asp.net ASMX Web服务返回的XML而不是JSON的 [英] asp.net asmx web service returning xml instead of json

查看:1081
本文介绍了asp.net ASMX Web服务返回的XML而不是JSON的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么这个简单的Web服务拒绝JSON返回给客户端?

Why does this simple web service refuse to return JSON to the client?

下面是我的客户code:

Here is my client code:

        var params = { };
        $.ajax({
            url: "/Services/SessionServices.asmx/HelloWorld",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            timeout: 10000,
            data: JSON.stringify(params),
            success: function (response) {
                console.log(response);
            }
        });

和服务:

namespace myproject.frontend.Services
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [ScriptService]
    public class SessionServices : System.Web.Services.WebService
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}

web.config中:

web.config:

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
</configuration>

和响应:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>

不管我做什么,响应总是回来为XML。如何获取Web服务返回JSON?

No matter what I do, the response always comes back as XML. How do I get the web service to return Json?

编辑:

下面是小提琴手HTTP跟踪:

Here is the Fiddler HTTP trace:

REQUEST
-------
POST http://myproject.local/Services/SessionServices.asmx/HelloWorld HTTP/1.1
Host: myproject.local
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json; charset=utf-8
X-Requested-With: XMLHttpRequest
Referer: http://myproject.local/Pages/Test.aspx
Content-Length: 2
Cookie: ASP.NET_SessionId=5tvpx1ph1uiie2o1c5wzx0bz
Pragma: no-cache
Cache-Control: no-cache

{}

RESPONSE
-------
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 19 Jun 2012 16:33:40 GMT
Content-Length: 96

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>

我已经记不清有多少文章我看过现在正试图解决这一问题计数。该指令是不完整或不解决我的问题的某些原因。
一些更相关的包括(均无功而返):

I have lost count of how many articles I have read now trying to fix this. The instructions are either incomplete or do not solve my issue for some reason. Some of the more relevant ones include (all without success):

  • ASP.NET web service erroneously returns XML instead of JSON
  • asmx web service returning xml instead of json in .net 4.0
  • http://williamsportwebdeveloper.com/cgi/wp/?p=494
  • http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/
  • http://forums.asp.net/t/1054378.aspx
  • http://jqueryplugins.info/2012/02/asp-net-web-service-returning-xml-instead-of-json/

还有其他一些普通的文章。

Plus several other general articles.

推荐答案

终于找到它了。

为发布的应用程序code是正确的。问题是与配置。正确的web.config文件是:

The app code is correct as posted. The problem is with the configuration. The correct web.config is:

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
    <system.webServer>
        <handlers>
            <add name="ScriptHandlerFactory"
                 verb="*" path="*.asmx"
                 type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                 resourceType="Unspecified" />
        </handlers>
    </system.webServer>
</configuration>

根据文档,注册的处理程序应该从.NET 4中不必要的向上,因为它已经被移到了machine.config中。无论出于何种原因,这不是为我工作。但添加登记到Web.config我的应用程序解决了问题。

According to the docs, registering the handler should be unnecessary from .NET 4 upwards as it has been moved to the machine.config. For whatever reason, this isn't working for me. But adding the registration to the web.config for my app resolved the problem.

很多关于这个问题的请示文章添加处理程序的&LT;&的System.Web GT; 部分。这并不工作,并导致其他问题的整体负载。我尝试添加的处理程序两部分,这会产生一组完全误导我排除其他迁移的错误。

A lot of the articles on this problem instruct to add the handler to the <system.web> section. This does NOT work and causes a whole load of other problems. I tried adding the handler to both sections and this generates a set of other migration errors which completely misdirected my troubleshooting.

在情况下,它可以帮助别人,如果我再次疗法有同样的问题,这里是我的清单会检讨:

In case it helps anyone else, if I had ther same problem again, here is the checklist I would review:


  1. 您指定键入:POST在Ajax请求

  2. 您指定的contentType:应用/ JSON的;字符集= UTF-8在Ajax请求

  3. 您指定数据类型:在Ajax请求JSON

  4. 请问你的.asmx Web服务包括 [ScriptService ]`属性?

  5. 您的Web方法包括 [ScriptMethod(ResponseFormat = ResponseFormat.Json)
    属性? (我的code即使没有这个属性,但很多文章说,这是必需的)

  6. 你有没有加入 ScriptHandlerFactory 在web.config文件&LT; system.webServer&GT;&LT;处理&GT;

  7. 你有没有去掉从web.config文件中的所有处理程序&LT;&的System.Web GT;&LT;&HttpHandlers的GT;

  1. Did you specify type: "POST" in the ajax request?
  2. Did you specify contentType: "application/json; charset=utf-8" in the ajax request?
  3. Did you specify dataType: "json"in the ajax request?
  4. Does your .asmx web service include the [ScriptService]` attribute?
  5. Does your web method include the [ScriptMethod(ResponseFormat = ResponseFormat.Json)] attribute? (My code works even without this attribute, but a lot of articles say that it is required)
  6. Have you added the ScriptHandlerFactory to the web.config file in <system.webServer><handlers>?
  7. Have you removed all handlers from the the web.config file in in <system.web><httpHandlers>?

希望这有助于同样的问题的人。并感谢海报建议。

Hope this helps anyone with the same problem. and thanks to posters for suggestions.

这篇关于asp.net ASMX Web服务返回的XML而不是JSON的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆