12

当我尝试从 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。创建(类型类型、HttpContext 上下文、HttpRequest 请求、HttpResponse 响应、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 站点上找到的所有解决方案。但没有一个对我有用。

4

9 回答 9

13

这是一个愚蠢的错误。

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

[WebMethod]
public string SaveBOAT(string Pid)
{        
     SessionManager.MemberID = Pid;
     return "";
}
于 2012-08-09T08:26:35.303 回答
4

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

于 2018-09-25T07:50:45.547 回答
2

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

于 2013-07-27T13:23:49.320 回答
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 "";
     }
于 2012-08-09T07:15:44.703 回答
1

我也面临类似的问题。该解决方案包括检查与确保所有名称、参数正确传递相关的所有内容,因为许多人已做出响应。确保我们在 UI 页面中调用的 Web 方法名称拼写正确,数据、数据类型正确等等。就我而言,我在 ajax 调用中拼错了 Web 方法名称。一旦我找到并正确更正了名称,它就可以正常工作。
例如:在 .asmx 类文件中,这是方法名称“IsLeaseMentorExistWithTheSameName”,但是当我从 UI 调用时,我是这样调用的:

var varURL = <%=Page.ResolveUrl("~/Main/BuildCriteria.asmx") %> + '/IsLeaseMentorExistWithSameName';  

请注意,缺少“The”一词。那是一个错误,我纠正了,所以效果很好。

于 2016-05-09T22:11:04.320 回答
1

正如 Sundar Rajan 所说,检查参数是否正确。我的这个错误实例是因为我未能传递任何参数(作为 POST 请求中的主体)并且 asmx web 方法需要一个命名参数,因此绑定逻辑无法将请求与方法名称匹配,即使名称本身实际上是正确的。

[WebMethod]
        public object MyWebMethod(object parameter)

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

于 2019-06-20T11:17:00.707 回答
0

你添加了ServiceReference类吗?检查一次。根据您的评论,我可以告诉您该怎么做

于 2012-08-09T07:12:53.190 回答
0

我遇到了这个问题,因为我的肥皂方法有一个List<string>参数。想不出办法让它与数组参数一起工作;所以只需将参数转换为&-delimited 字符串(例如val1&val2&val3)并将参数转换为服务方法中的数组。

于 2019-06-19T15:36:07.010 回答
0

在我的例子中,WebService 接收参数之一被调用aId。当我从 javascript 调用它时,我发送了正确的 Id 值,但是发送的变量的名称被错误地调用了bId。所以我只需要重命名 WebService 调用,像以前一样保持正确的值,然后更改变量名。

于 2021-04-29T14:23:25.623 回答