以及如何解决它.为了维护目的,我想记录每个抛出的异常.
jQuery 1.3.2,ASP.NET 2.0.对PageMethod(WebMethod)进行AJAX调用会返回完整/整个页面,而不仅仅是响应.页面方法上的断点显示它永远不会被击中.我的方法有[WebMethod]属性,它是 public static,返回string并且不接受params.我甚至尝试在我的班级顶部添加[ScriptService]以查看它是否有帮助,但事实并非如此.
我已经看到这篇帖子Jquery AJAX与ASP.NET WebMethod返回整个页面有相同的症状,但我仍然有问题.我读了http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/,我觉得我跟着这个到了T,但仍然没有运气.
我正在制作的jQuery调用是:
jQuery.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: '{}',
dataType: 'json',
url: 'MyPage.aspx/SomePageMethod',
success: function(result){
alert(result);
}
});
Run Code Online (Sandbox Code Playgroud)
根据FF3中的Firebug,请求/响应头如下所示
Response Headers
Server ASP.NET Development Server/8.0.0.0
Date Tue, 24 Feb 2009 18:58:27 GMT
X-AspNet-Version 2.0.50727
Cache-Control private
Content-Type text/html; charset=utf-8
Content-Length 108558
Connection Close
Request Headers
Host localhost:2624
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
Accept application/json, text/javascript, */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset …
Run Code Online (Sandbox Code Playgroud) 我试图通过jQuery从客户端调用服务器端方法.我的代码如下:
服务器端:
using System.Web.Services;
[WebMethod()]
//[ScriptMethod()]
public static void SendMessage(string subject, string message, string messageId, string pupilId)
{
//Send message
}
Run Code Online (Sandbox Code Playgroud)
客户端:
$("#btnSendMessage").live("click", function(){
var subject = $("#tbSubject").val();
var message = $("#tbMessage").val();
var messageId = $("#hdnMessageId").val();
var pupilId = $("#hdnPupilId").val();
$.ajax({
type: "POST",
url: "./MessagePopup.aspx/SendMessage",
data: ("subject=" + subject + "&message=" + message + "&messageId=" + messageId + "&pupilId=" + pupilId),
error: function(XMLHttpRequest, textStatus, errorThrown){
alert(textStatus);
},
success: function(result){
alert("success");
}
});
return false;
});
Run Code Online (Sandbox Code Playgroud)
我在服务器端SendMessage方法上添加了一个断点,但它从来没有打过它,但是当我运行代码时,会调用jQuery成功方法.可能导致这种情况的原因是什么?`
我正在开发一个新项目.使用常规旧时尚网络服务的WCF Web服务有什么好处吗?
Visual Studio为两者提供模板.有什么区别?优点和缺点?
有没有办法使用ELMAH全局处理常规ASP.NET Web服务(asmx)中的异常,就像我们在ASP.NET网站中一样?
考虑将传入的SOAP请求记录到ASP.NET ASMX Web服务的要求.任务是捕获发送到Web服务的原始XML.
需要记录传入消息以进行调试检查.该应用程序已经有自己的日志库,因此理想的用法是这样的:
//string or XML, it doesn't matter.
string incomingSoapRequest = GetSoapRequest();
Logger.LogMessage(incomingSoapRequest);
Run Code Online (Sandbox Code Playgroud)
我正在使用Microsoft.XMLHTTP调用调用web服务:
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", "/xxx/Converter.asmx/Convert", false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send("conversionFolder=" + escape(conversionFolder));
if (xmlhttp.status == 200) {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlhttp.responseText);
... more stuff ...
return str;
}
else {
alert(xmlhttp.statusCode + " - " + xmlhttp.statusText);
}
Run Code Online (Sandbox Code Playgroud)
当我记得在本地web.config中添加HttpPost协议时,一切正常.
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<webServices>
<protocols>
<add name="HttpPost"/>
</protocols>
</webServices>
<compilation debug="false"></compilation>
</system.web>
<system.codedom>
</system.codedom>
<!--
The system.webServer section is required for running ASP.NET AJAX under Internet
Information Services 7.0. It is not …
Run Code Online (Sandbox Code Playgroud) 我知道我可以使用以下语法使用jquery调用页面方法
$.ajax({
type: "POST",
url: "Default.aspx/GetDate",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// Replace the div's content with the page method's return.
$("#Result").text(msg.d);
}
});
Run Code Online (Sandbox Code Playgroud)
这适用于aspx页面但是可以使用ascx页面吗?(网页控制)
我已经尝试了大约半个小时,因为我无法让它工作,我想知道它是否可能.
注意:为了清楚,当我尝试调用ascx页面时,我正在更新jquery中的url :)
我在一个IIS应用程序中运行了一堆.NET Webservices.这些Web服务由另一个IIS应用程序(前端)使用.第一个电话很慢,大概5到10秒.在那之后它只是几毫秒.第一个电话被认为是性能问题.
我们尝试过调用所有这些Web服务的应用程序,但这显然无法解决任何问题.因此,问题不在于默认的应用程序回收.我创建了一个应用程序,它只是多次初始化服务并测量创建一个实例所需的时间.在运行此应用程序之前,我确保启动/回收我的Web服务应用程序,然后运行该应用程序.第一次初始化需要2到4秒,所有其他的只需几毫秒.
另一个想法是我们在前端应用程序中创建一个页面,启动所有的Web服务,并在任何用户进入之前调用此页面.我不认为这是一个优雅的解决方案,我还能尝试什么?
我有一个与Web服务通信的客户端.我与之通信的类是通过wsdl.exe生成的C#类.我现在想记录所有传入和传出的消息.
到目前为止我所做的是编写一个继承自动生成的C#类的类,并重写了GetReaderForMessage方法.这样我可以或多或少地像这样访问传入的消息:
protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
{
System.Xml.XmlReader aReader = base.GetReaderForMessage(message, bufferSize);
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(aReader);
string content = doc.InnerXml.ToString();
System.Xml.XmlReader aReader2 = System.Xml.XmlReader.Create(new System.IO.StringReader(content));
return aReader2;
}
Run Code Online (Sandbox Code Playgroud)
显然我对这个解决方案不太满意,因为基本上我正在创建两个xml读者.一个用于读取SOAP消息的内容,另一个用于返回方法调用方.另外,我不能用GetWriterForMessage方法做同样的事情.
但也许我只是做起来太困难了.例如,是否可以直接读取SoapClientMessage对象的内容?我已经阅读了一些文章,建议我应该在这里使用SoapExtensions,但是从我能理解的情况来看,只有我创建的'客户'本身就是一个Web服务,在这种情况下它不是.
有什么建议?