IIS将Web服务输出从JSON转换为XML

时间:2012-01-12 09:40:45

标签: jquery asp.net web-services iis-7 asp.net-4.0

这是我们在其他地方讨论过的一个问题,有几个潜在的解决方案,但我们无法让它们中的任何一个起作用。

我们设置了ASP.net webservice以将结果作为JSON返回。我们使用JQuery $ .post来获取结果(但这几乎肯定不是问题的一部分。)当结果到达客户端时,它们被包装在XML标记中。所以,而不是像这样回来:

<?xml version="1.0" encoding="utf-8"?>
{data}

......他们这样回来......

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="[SomeURL.com]">{data}</string>

在测试过程中,我们发现ASP.net 3.5中对于webservice结果的默认值是JSON,但是在ASP.net 4.0中,它被更改为XML。

为了尝试测试这个,我们下载了一个ASP.net 3.5测试webservice应用程序,并按照预期在JSON本地输出。然后我们将应用程序升级到4.0,期望它开始以XML格式输出。但是,在本地,它继续输出为JSON,没有外部标记。

然后,我们将此测试应用程序移动到我们的IIS 7.0服务器,它立即开始输出为XML。这意味着该问题与IIS中的设置与本地设置有关。

然后我们找到了这篇文章:

asmx web service returning xml instead of json in .net 4.0

...并尝试通过web.config将4.0脚本处理程序替换为3.5版本。但是,这也不起作用。在我们的web.config修改之后,我们在IIS的Handler Mappings区域中有以下内容:

ScriptHandlerFactory - 3.5版本。
ScriptHandlerFactoryAppServices-Integrated-4.0 - 4.0版本。

......但也......

WebServiceHandlerFactory-Integrated - 2.0版本
WebServiceHandlerFactory-Integrated-4.0 - 4.0版本
WebServiceHandlerFactory-ISAPI-2.0
WebServiceHandlerFactory-ISAPI-2.0-64
WebServiceHandlerFactory-ISAPI-4.0_32bit
WebServiceHandlerFactory-ISAPI-4.0_64bit

所以...就是我们所处的位置 - 搞乱IIS设置以尝试将Web服务作为JSON发送。我们非常肯定这是一个IIS设置,或者至少是ASP.net 4.0 vs 3.5设置。

作为背景,ASP.net webservice看起来像这样:

<System.Web.Script.Services.ScriptService(Namespace:="[SomeURL.com]")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class RequestM
Inherits System.Web.Services.WebService

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False, XMLSerializeString:=False)> _
Public Function dataRequestJSON(ByVal JsonRequestObject As String) As String

    Try

        Dim MyNewDataRequest As New DataRequest(JsonRequestObject)
        Dim MyJsonResponse = MyNewDataRequest.JsonResponse
        Return MyJsonResponse

    Catch ex As Exception
        Return ex.Message
    End Try

End Function

请帮忙!

谢谢!

2 个答案:

答案 0 :(得分:0)

您可能需要将ASP.NET 3.5 Web服务指向经典ASP.NET 2.0应用程序池,您可以在Web服务的“高级设置”中执行此操作。

答案 1 :(得分:0)

问题是json请求的格式化,虽然它是有效的json,asp.net webserive仍然返回xml。原来与iis设置完全无关。一定是其他论坛的红鲱鱼