【问题标题】:Web Service method name is not validWeb 服务方法名称无效
【发布时间】:2012-08-06 08:42:14
【问题描述】:

当我尝试从 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(类型类型、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 网站上的所有解决方案。但没有一个对我有用。

【问题讨论】:

    标签: javascript asp.net jquery


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      [WebMethod]
              public object MyWebMethod(object parameter)
      

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          这是一个愚蠢的错误。

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

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

          【讨论】:

          • 在我的情况下缺少公共关键字
          • 嗨,我不经常遇到此错误,但它正在发生。我的 web 方法有 public 关键字并且没有 static 关键字。但我仍然遇到这个错误。知道导致相同的原因吗?
          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

            • 谢谢先生。这解决了我们的问题。我们没有包含所有参数。
            【解决方案7】:

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

            【讨论】:

            • 你知道为什么它强迫它公开
            • @John 如果 Web 服务方法不公开,您会如何调用它?
            • 我想将它标记为内部然后通过我自己的接口暴露给另一个项目。
            • @John 网络服务是接口。
            【解决方案8】:

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

            【讨论】:

            • 我尝试了您的代码并收到此错误“Unknown web method SaveBOAT.
              Parameter name: methodName”
            • 从“public static string SaveBOAT(string Pid)”中删除静态。
            【解决方案9】:

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

            【讨论】:

              猜你喜欢
              • 2017-04-07
              • 1970-01-01
              • 2016-10-12
              • 2013-05-08
              • 1970-01-01
              • 2014-09-28
              • 2011-01-14
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多