WebMethods突然给出:无效的Web服务调用,缺少参数值

时间:2013-11-12 15:41:16

标签: ajax webmethod

我的ajax电话突然停止工作,我无法弄清楚原因。我没看到什么?

答:这是因为ASP.NET State Server被关闭了。

这是我的网络方法

[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Test(string message)
{
    return message;
}

这是我的ajax电话

$.ajax({
    url: '/Test.asmx/Test',
    data: {message:'hello'},
    type: "POST",
    async: true,
    contentType: "application/json; charset=UTF-8",
    dataType: "json",
    beforeSendMethod: function (xhr) {
        xhr.setRequestHeader("Content-type", "application/json; charset=utf-8");
    },
    success:  function (data, textStatus, jqXHR) {
        console.log('success!',data, textStatus, jqXHR);
    },
    error: function (data, textStatus, jqXHR) {
        console.log('error!',data, textStatus, jqXHR);
    }
});

这是我的错误

Message:    Invalid web service call, missing value for parameter: 'message'.

StackTrace:   at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters)
   at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)
   at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)
   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)

ExceptionType: System.InvalidOperationException

如果我这样做,它会起作用:

$.ajax({
    url: '/Services/Authentication.asmx/Test',
    data: {message:'hello'},
    type: "POST",
    success:  function (data, textStatus, jqXHR) {
        console.log('success!',data, textStatus, jqXHR);
    },
    error: function (data, textStatus, jqXHR) {
        console.log('error!',data, textStatus, jqXHR);
    }
});

除了WebMethod返回XML而不是JSON:

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

接头

enter image description here

2 个答案:

答案 0 :(得分:2)

有史以来最愚蠢的错误。 ASP.NET State Service已关闭,忘记将其设置为在我打开时自动启动。重新启动我的电脑,忘了我正在使用它。 Visual Studio没有抛出任何异常。它看起来好像我在调用WebMethod错了。一旦我重新开启服务,一切正常。

答案 1 :(得分:0)

Walter,我使用相同的 methodology 方法。但是我注意到你的标题和我在成功通话中看到的内容之间存在差异:

我的成功请求有效负载

enter image description here

您的申请有效负载失败

enter image description here

您的有效负载看起来不像是一个对象,而只是一个字符串。