Web 服务方法名称无效

Web Service method name is not valid

本文关键字:无效 方法 服务 Web      更新时间:2023-09-26

当我尝试从javascript调用Webmethod时,我收到以下错误"Web服务方法名称无效"

System.InvalidOperationException: SaveBOAT Web Service 方法名称无效。 at System.Web.Services.Protocols.HttpServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

网页代码 :

<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 网站上找到的所有解决方案,但没有一个对我有用。

这是一个愚蠢的错误。

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

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

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

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

尝试使用它,我认为数据类型应该是 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 "";
     }

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

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

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

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

[WebMethod]
        public object MyWebMethod(object parameter)

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

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

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

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