【发布时间】:2012-02-08 14:40:04
【问题描述】:
这是我们在其他地方看到的一个问题,有几个潜在的解决方案,但我们无法让其中任何一个发挥作用。
我们设置了一个 ASP.net 网络服务以将结果返回为 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 中 Web 服务结果的默认值是 JSON,但在 ASP.net 4.0 中,这已更改为 XML。
为了尝试对此进行测试,我们下载了一个 ASP.net 3.5 测试网络服务应用程序,并按预期以 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 Web 服务如下所示:
<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
请帮忙!
谢谢!
【问题讨论】:
标签: jquery asp.net web-services iis-7 asp.net-4.0