为什么这个简单的Web服务拒绝将JSON返回给客户端?
这是我的客户代码:
var params = { }; $.ajax({ url: "/Services/SessionServices.asmx/HelloWorld", type: "POST", contentType: "application/json; charset=utf-8", dataType: "json", timeout: 10000, data: JSON.stringify(params), success: function (response) { console.log(response); } });
和服务:
namespace myproject.frontend.Services { [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] [ScriptService] public class SessionServices : System.Web.Services.WebService { [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string HelloWorld() { return "Hello World"; } } }
web.config:
<configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> </configuration>
以及响应:
<?xml version="1.0" encoding="utf-8"?> <string xmlns="http://tempuri.org/">Hello World</string>
无论我做什么,响应总是以XML形式返回。如何获得Web服务以返回Json?
编辑:
这是Fiddler HTTP跟踪:
REQUEST ------- POST http://myproject.local/Services/SessionServices.asmx/HelloWorld HTTP/1.1 Host: myproject.local User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: en-gb,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Content-Type: application/json; charset=utf-8 X-Requested-With: XMLHttpRequest Referer: http://myproject.local/Pages/Test.aspx Content-Length: 2 Cookie: ASP.NET_SessionId=5tvpx1ph1uiie2o1c5wzx0bz Pragma: no-cache Cache-Control: no-cache {} RESPONSE ------- HTTP/1.1 200 OK Cache-Control: private, max-age=0 Content-Type: text/xml; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Tue, 19 Jun 2012 16:33:40 GMT Content-Length: 96 <?xml version="1.0" encoding="utf-8"?> <string xmlns="http://tempuri.org/">Hello World</string>
我已经不知道现在为解决此问题而阅读了多少篇文章了。说明不完整或由于某种原因无法解决我的问题。一些更相关的内容包括(均未成功):
加上其他几篇一般文章。
终于想通了。
应用代码正确无误,已发布。问题出在配置上。正确的web.config是:
<configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.webServer> <handlers> <add name="ScriptHandlerFactory" verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" /> </handlers> </system.webServer> </configuration>
根据文档,从.NET 4起,不需要注册处理程序,因为它已移至machine.config。无论出于什么原因,这都不适合我。但是将注册添加到我的应用程序的web.config中可以解决此问题。
关于此问题的许多文章都指示将处理程序添加到该<system.web>部分。这是行不通的,并且会导致其他问题。我尝试将处理程序添加到这两个部分中,这会产生一系列其他迁移错误,这些错误完全导致了我的故障排除方向。
<system.web>
万一它对其他人有帮助,如果我再次遇到同样的问题,请查看以下清单:
type: "POST"
contentType: "application/json; charset=utf-8"
dataType: "json"
[ScriptService]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
ScriptHandlerFactory
<system.webServer><handlers>
<system.web><httpHandlers>
希望这对遇到同样问题的人有所帮助。并感谢海报的建议。