在.NET 4.0中,asmx web服务返回XML而不是JSON

9
我刚刚将我的网站测试副本升级到了ASP.NET 4.0,发现一个奇怪的问题,只有在我将网站上传到服务器时才会出现。
该网站有一个返回JSON的ASMX Web服务,但当我在服务器上运行网站时,它返回XML。在ASP.NET 3.5中已经正常工作了一年多。
WebMethod使用了正确的属性...
[WebMethod][ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<LocationRecentChange> RecentChanges()

在我的本地机器上,它返回 JSON 格式。但是在服务器上(Windows 2008 64bit),它返回 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);
    }
});

欢迎提出任何建议,这让我感到困惑!

2个回答

7

您确定服务器已安装.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。


原来服务器的IIS出了点问题。我无法在本地重现这个问题,但是将该项插入到web.config中确实可以解决它。 - Baldy
3
我遇到了完全相同的问题。您能否编辑答案并包含我需要添加到 web.config 中的确切代码(包括应将其添加到哪个部分)?谢谢。 - njr101

2

通过阅读有关Ajax Web服务请求如何处理的内容,我成功地找到了它的位置...

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

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

以下是您需要添加到web.config handlers部分的内容(如果需要支持IIS6,请还要添加到httpHandlers部分)...

<handlers>
   <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

我有这样的怀疑,这将需要用相同处理程序的.NET 4.0版本来替换,但目前它可以工作。


1
我遇到了完全相同的问题。您能否编辑答案,包括需要添加到哪个部分的include?以及任何额外的元素,例如<remove>(如果需要)。谢谢。 - njr101
我已经为您更新了内容,并添加了相关部分文档的链接。 - Baldy
但是你没有说要在哪里添加<handlers>部分...那应该放在哪里?无论我把它放在哪里,都会出现错误。 - NickG
它放在web.config文件的system.webServer部分。 - Baldy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接