这是我们在其他地方讨论过的一个问题,有几个潜在的解决方案,但我们无法让它们中的任何一个起作用。
我们设置了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
请帮忙!
谢谢!
答案 0 :(得分:0)
您可能需要将ASP.NET 3.5 Web服务指向经典ASP.NET 2.0应用程序池,您可以在Web服务的“高级设置”中执行此操作。
答案 1 :(得分:0)
问题是json请求的格式化,虽然它是有效的json,asp.net webserive仍然返回xml。原来与iis设置完全无关。一定是其他论坛的红鲱鱼