Web服务方法名称无效

时间:2012-08-09 06:42:42

标签: javascript asp.net jquery

当我尝试从javascript调用webmethod时出现以下错误“Web服务方法名称无效”

  

System.InvalidOperationException:SaveBOAT Web服务方法名称无效。      在System.Web.Services.Protocols.HttpServerProtocol.Initialize()      在System.Web.Services.Protocols.ServerProtocol.SetContext(类型类型,HttpContext上下文,HttpRequest请求,HttpResponse响应)      在System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type,HttpContext context,HttpRequest request,HttpResponse response,Boolean& abortProcessing)

HTML代码:

<asp:LinkButton runat="server" ID="lnkAddBoat" OnClientClick="javascript:AddMyBoat(); return false;"></asp:LinkButton>

JS代码:

function AddMyBoat() {
            var b = document.getElementById('HdnControlId').value;

            jQuery.ajax({
                type: "GET",
                url: "/AllService.asmx/SaveBOAT",
                data: { Pid: b },
                contentType: "application/text",
                dataType: "text",
                success: function(dd) {
                    alert('Success' + dd);
                },
                error: function(dd) {
                    alert('There is error' + dd.responseText);
                }
            });
}

C#代码(AllService.asmx文件中的Web方法)

[WebMethod]
public static string SaveBOAT(int Pid)
{
    // My Code is here
    //I can put anythng here
    SessionManager.MemberID = Pid;
    return "";
}

我尝试了在Stack Overflow和ASP.NET站点上找到的所有解决方案。但是没有一个能为我工作。

9 个答案:

答案 0 :(得分:13)

这是一个愚蠢的错误。

从方法声明中删除Static关键字。

[WebMethod]
public string SaveBOAT(string Pid)
{        
     SessionManager.MemberID = Pid;
     return "";
}

答案 1 :(得分:2)

在我的情况下,错误是Web服务方法被声明为“私有”而不是“公共”

答案 2 :(得分:1)

尝试使用它,我认为数据类型应该是JSON

       jQuery.ajax({
            type: "POST",  // or GET
            url: "/AllService.asmx/SaveBOAT",
            data: { Pid: b },
            contentType: "application/json; charset=utf-8",
            dataType: "json"
            success: function(dd) {
                alert('Success' + dd);
            },
            error: function(dd) {
                alert('There is error' + dd.responseText);
            }
        });

并在C#代码中将Pid更改为字符串

    [WebMethod]
     public static string SaveBOAT(string Pid)
     {        
      SessionManager.MemberID = Pid;
      return "";
     }

答案 3 :(得分:1)

就我而言,我已经复制了另一个asmx文件,但没有将class属性更改为asmx文件本身中新类的名称(右键单击asmx文件->查看标记)

答案 4 :(得分:0)

你是否添加了ServiceReference类。检查this一次。根据你的评论我可以告诉你做什么

答案 5 :(得分:0)

我也面临类似的问题。该解决方案包括检查与确保所有名称相关的所有内容,参数是否正确响应。确保我们在UI页面中调用的Web方法名称拼写正确,数据,数据类型正确等等。在我的情况下,我在ajax调用中拼错了Web方法名称。一旦我找到并正确更正了名称,它就能正常工作 对于Ex:在.asmx类文件中,这是方法名称&#34; IsLeaseMentorExistWithTheSameName&#34;但当我从UI打电话时,这就是我所说的:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<label><input type="checkbox" name="all" checked="true">All / none</label>
<label><input type="checkbox" name="cat1" checked="true">A</label>
<label><input type="checkbox" name="cat2">B</label>
<label><input type="checkbox" name="cat3">C</label>
<label><input type="checkbox" name="cat4">D</label>

请注意&#34;&#34;不见了。这是一个错误,我纠正了,所以它工作正常。

答案 6 :(得分:0)

我遇到了这个问题,因为我的soap方法具有一个List<string>参数。无法找到使它与array参数一起使用的方法;因此只需将参数转换为以&分隔的字符串(例如val1&val2&val3)并将参数转换为服务方法中的数组。

答案 7 :(得分:0)

如Sundar Rajan所述,请检查参数是否正确。我出现此错误的原因是因为我未能传递任何参数(作为POST请求中的主体),并且asmx Web方法期望使用命名参数,因此绑定逻辑未能将请求与方法名称匹配,即使名称本身实际上是正确的。

[WebMethod]
        public object MyWebMethod(object parameter)

如果请求正文中没有parameter,则将收到此错误。

答案 8 :(得分:0)

就我而言,WebService 接收参数之一称为 )。当我从 javascript 调用它时,我发送了正确的 Id 值,但发送的变量的名称被错误地称为 aId。所以我只需要重命名 WebService 调用,像以前一样保持正确的值,只需更改变量名即可。