jQuery:Ajax调用asp.net webservice失败,服务器返回500错误

时间:2010-01-08 13:53:47

标签: asp.net ajax jquery

好的,所以我创建了一个测试项目,只是为了验证jQuery AJAX是否可以与asp.net服务一起使用,并且没有任何问题。我使用了在VS studio中创建的默认HelloWorld服务。我通过jQuery调用这个服务:

Default.aspx中的

<script language="javascript" type="text/javascript">
    $(document).ready(function() {

        //test web service
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "TestService.asmx/HelloWorld",
            data: "{}",
            dataType: "json",
            success: function(msg) { alert(msg);},
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                debugger;
            }
        });
    });
</script>
TestService.asmx中的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace WebServiceTestWitJQuery
{
    /// <summary>
    /// Summary description for TestService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class TestService : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}

然后我继续并完全复制了所有内容,因为它在我的项目中并不起作用。我收到500服务器错误。

我验证了以下内容:

  1. web.configs相同
  2. 页面相同
  3. 服务类相同
  4. jquery ajax call same相同
  5. 我可以导航到http://localhost:3272/TestService.asmx?op=HelloWorld并且webservice工作正常。
  6. 还有什么?

6 个答案:

答案 0 :(得分:2)

想出来。当不确定发生了什么时,请使用Fiddler。它清楚地表明服务器无法创建服务类的实例,因为它位于错误的命名空间中。我有R#禁用,并没有注意到我没有更改服务的命名空间。问题解决了。

答案 1 :(得分:1)

我有几个猜测,因为我对jQuery有点了解但对asp.net没有任何了解。

在jQuery调用中,您表示需要json响应。 “Hello World”我认为将作为原始字符串返回,而不是格式化为json。删除'dataType:“json”,'param和jQuery应该最好确定接收的数据类型。

我认为编写jQuery代码的方式只与RESTful Web Services兼容,而不是与WSDL的传统Web服务兼容。虽然我对asp.net一无所知,但是在这里您没有看到使用REST的命名约定。

答案 2 :(得分:0)

问题在于您的脚本网址,因此您需要编写完整的网址。 Here是您的解决方案。 例如: URL:localhost:1111/TestService.asmx/HelloWorld

答案 3 :(得分:0)

我解决了这个问题。我知道回答这个问题为时已晚,但也许有人有同样的问题。

我从ajax删除了以下行,并禁用了500内部错误。

contentType: "application/json; charset=utf-8",
        data: "{}",
        dataType: "json",

答案 4 :(得分:0)

我收到此错误,这是由我的WebService无法访问会话状态引起的。这可以通过更改

来解决
[WebMethod]
public MyData GetMyData() {...}

[WebMethod(EnableSession = true)]
public MyData GetMyData() {...}

有关详细信息,请参阅此链接:How to use Session state in ASP.NET WebService

答案 5 :(得分:0)

我发布这个,因为这两个顶级解决方案都不适用于我(VS2015,.Net4.0,WebForms中的ajax调用与问题完全相同)。 只有在我明确授权配置文件中的 HttpPost 之后才能使用它:

<system.web>
    <webServices>
     <protocols> 
    <add name="HttpGet" /> -- just for direct testing : delete this line after 
    <add name="HttpPost" />
     </protocols>
     </webServices>
</system.web>