当前位置: 首页 > 知识库问答 >
问题:

返回xml而不是json的ASP.NET asmx web服务

岳杜吟
2023-03-14

以下是我的客户端代码:

        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:

<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>
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>
    null

共有1个答案

赵锐
2023-03-14

终于想通了。

应用程序代码是正确的张贴。问题出在配置上。正确的web.config是:

<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>

根据文档,注册处理程序在。NET4以上应该是不必要的,因为它已经被移动到了machine.config。不管出于什么原因,这对我不起作用。但是将注册添加到web.config中就解决了这个问题。

许多关于此问题的文章都指示将处理程序添加到 部分。这是不起作用的,并导致了一大堆其他问题。我尝试将处理程序添加到这两个部分,这将生成一组其他迁移错误,这完全误导了我的故障排除。

如果我再次遇到同样的问题,如果对其他人有帮助,下面是我将检查的清单:

  1. 您是否在ajax请求中指定了类型:“post”
  2. 您是否在ajax请求中指定了contenttype:“application/json;charset=utf-8”
  3. 您是否在ajax请求中指定了datatype:“json”
  4. 您的.asmx web服务是否包含[ScriptService]属性?
  5. web方法包括[scriptmethod(ResponseFormat=ResponseFormat.json)]属性吗?(我的代码即使没有这个属性也能工作,但是很多文章都说它是必需的)
  6. 是否将ScriptHandlerFactory添加 中的web.config文件?
  7. 是否从 中的web.config文件中删除了所有处理程序?
 类似资料:
  • 问题内容: 我刚刚将我的网站的测试副本升级到asp.net 4.0,并且注意到了一个奇怪的问题,仅当我将网站上传到服务器时才会出现。 该站点有一个返回json的asmx Web服务,但是当我在服务器上运行该站点时,它会返回xml。它在asp.net 3.5中已经运行了一年多。 webMethod装饰有正确的属性… 在我的本地计算机上,它返回json。 但在服务器(Windows 2008 64位)

  • 我正在使用Reverfit 2.0从返回json文本的web服务读取数据,但在下面的代码中响应是LinkedTreeMap,我无法将其转换为json: 现在我从站点读取数据: 形成的url为json响应为

  • 以下endpoint以字符串形式返回用户名。 我如何构造它以返回一个json对象,该对象包含一个键,该键的值为该字符串(例如,{“user”:“joeuser”})?

  • 问题内容: 我需要从C#Web服务获取Json数据。 我知道有一些基于此的问题,相信我,我已经阅读了很多,但只是让我进一步困惑。 这是我所做的: 在我的Web服务中,我包括了:用于类和方法 我还使用了a 将我的数据转换为字符串 我正在使用此服务致电 如果我不使用它,则会收到跨域引用错误。 为此,我必须设置m服务以获取回调函数名称,以便传递t +序列化的Json Data; 但是在输出中我把它包裹起

  • 问题内容: 我有这行代码(总是返回1): 其中token [“ rows”]是: 我想对组件数量进行计数。 这也不起作用: 整个JSON在这里: 问题答案: 根据您在另一个答案中的评论,我现在可以了解您为什么感到困惑。您没有在问题中提到正在执行XML到JSON的转换。 如您所知,XML不像JSON那样具有“对象”或“数组”的概念。在XML中,所有内容都只是命名节点的集合。在确定某个东西应该是数组还

  • 我试图让2支球队互相比赛。当我说团队1.玩(团队2)时,我称之为;当 i 生成的数字小于 0.5 时,team2 应获胜,如果大于 0.5,则团队 1 应获胜。当团队 1 获胜时,它会正确显示为尼克斯,但当团队 2 获胜时,它会显示内存地址。我怎么能让它正确地说网是赢的,而不是team@78987neu73