asmx web服务在.net 4.0中返回xml而不是json

我刚刚将我的网站的测试副本升级到asp.net 4.0,并注意到一个奇怪的问题,只有当我将网站上传到我的服务器时才会出现。

该站点有一个返回json的asmx Web服务,但当我在我的服务器上运行该站点时,它返回xml。 它在asp.net 3.5中运行良好超过一年。

webMethod用正确的属性装饰……

[WebMethod][ScriptMethod(ResponseFormat = ResponseFormat.Json)] public List RecentChanges() 

在我的本地机器上它返回json。

然而在服务器(Windows 2008 64位)上它返回xml。

使用firebug控制台,你会看到200 OK响应和一堆XML,在我的本地机器上返回的数据是我期望的JSON。

这是调用服务的JavaScript。

 function loadRecentData() { $.ajax({ type: "POST", url: "service/spots.asmx/RecentChanges", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: loadRecentUpdates, failure: function(msg) { //alert(msg); } }); 

}

欢迎任何建议,这让我难过!

你确定你的服务器上安装了.NET 4吗?

.NET 4中ScriptHandlerFactory的“type”字符串是:

 System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 

ASP.NET 4现在包含在机器级别的默认web.config中。 因此,您不需要在项目的web.config,3.5或4中对ScriptHandlerFactory进行任何映射。

好吧,我设法通过阅读有关ajax Web服务请求来跟踪它在这里…

http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/ajax/tutorial-05-cs.aspx

基本上,asp.net 3.5中的处理程序需要在system.webserver下的web.config处理程序部分声明,以便它可以返回JSON响应而不是默认响应。

这里是您需要添加到web.config 处理程序部分的内容 (如果需要支持IIS6,还可以添加到httpHandlers部分)…

   

我怀疑这将需要替换相同处理程序的.net 4.0版本,但现在,它的工作原理。