我试图使用
JSON从jQuery调用ASMX并获取SOAP错误响应.
我究竟做错了什么?!
这是我的jQuery调用:
$.ajax({ type: "POST",url: '/Services/TeamPerson.asmx',contentType: "application/json; charset=utf-8",data: {'active':false,'team_id':team_id,'player_id':player_id},dataType: "json",success: function(msg) { alert(msg); },error: function(xhr,msg) { alert(msg + '\n' + xhr.responseText); } });
这是我的网络服务:
[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolBoxItem(false)] [ScriptService] public class TeamPerson : WebService { [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public void SetPlayerStatus(bool active,ulong team_id,ulong player_id) { // blah blah } }
我收到一个令人讨厌的SOAP错误:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body><soap:Fault><soap:Code> <soap:Value>soap:Receiver</soap:Value></soap:Code> <soap:Reason><soap:Text xml:lang="en"> System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Xml.XmlException: Data at the root level is invalid. Line 1,position 1. at System.Xml.XmlTextReaderImpl.Throw(Exception e) at System.Xml.XmlTextReaderImpl.Throw(String res,String arg) at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace() at System.Xml.XmlTextReaderImpl.ParseDocumentContent() at System.Xml.XmlTextReaderImpl.Read() at System.Xml.XmlTextReader.Read() at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read() at System.Xml.XmlReader.MoveToContent() at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent() at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement() at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest() at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message) at System.Web.Services.Protocols.SoapServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type,HttpContext context,HttpRequest request,HttpResponse response) at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type,HttpResponse response,Boolean& abortProcessing) --- End of inner exception stack trace ---</soap:Text></soap:Reason><soap:Detail /></soap:Fault></soap:Body></soap:Envelope>
我可以通过我的浏览器点击/Services/TeamPerson.asmx并且web方法正常.我还在web.config中定义了以下内容:
<httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,System.Web.Extensions,Version=3.5.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35"/> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,PublicKeyToken=31BF3856AD364E35"/> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler,PublicKeyToken=31BF3856AD364E35" validate="false"/> <add verb="GET,HEAD,POST" path="TinyMCEHandler.aspx" type="Moxiecode.TinyMCE.Web.HttpHandler,Moxiecode.TinyMCE" /> </httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule,PublicKeyToken=31BF3856AD364E35"/> </httpModules>