ravidev
ravidev

Reputation: 2738

Web Service method name is not valid

I get the following error "Web Service method name is not valid" when i try to call webmethod from javascript

System.InvalidOperationException: SaveBOAT Web Service method name is not valid. 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)

HTML Code :

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

JS Code :

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# Code (Web method in AllService.asmx file)

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

I tried all solutions found on Stack Overflow and ASP.NET site.but none of them worked for me.

Upvotes: 12

Views: 33349

Answers (9)

Ash
Ash

Reputation: 1298

In my case, one of the WebService receiving parameters was called aId. When I called it from javascript, I was sending the correct Id value, but the name of the sent variable was incorrectly called bId. So I just had to rename the WebService call, keep the correct value like before, and just change the variable name.

Upvotes: 0

Wilco
Wilco

Reputation: 1093

As Sundar Rajan states, check the parameters are also correct. My instance of this error was because I had failed to pass any parameters (as a body in a POST request) and the asmx web method was expecting a named parameter, because of this the binding logic failed to match up the request to the method name, even though the name itself is actually correct.

[WebMethod]
        public object MyWebMethod(object parameter)

If there is no parameter in the body of the request then you will get this error.

Upvotes: 1

user224851
user224851

Reputation:

I had this issue because my soap method had a List<string> parameter. Couldn't figure out a way to make it work with the array parameter; so just converted the parameter to a &-delimited string (e.g. val1&val2&val3) and converted the parameter to an array in the service method.

Upvotes: 0

ravidev
ravidev

Reputation: 2738

It was a silly mistake.

remove Static keyword from method declaration.

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

Upvotes: 14

Matthew Lock
Matthew Lock

Reputation: 13476

In my case I had copied another asmx file, but not changed the class property to the name of the new class in the asmx file itself (Right click on asmx file -> View Markup)

Upvotes: 7

Sundar Rajan
Sundar Rajan

Reputation: 61

I too faced the similar issue. The solution includes checking everything related to ensuring all name, parameters are passed correctly as many have responded. Make sure that the web method name that we are calling in UI page is spelled correctly, the data, data types are correct and etc. In my case, I misspelled the web method name in my ajax call. It works fine once I found and corrected the name correctly.
For Ex: In .asmx class file, this is the method name "IsLeaseMentorExistWithTheSameName" but when I called from UI this is how I called:

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

Notice that the word "The" is missing. That was a mistake and I corrected and so it worked fine.

Upvotes: 1

Alessio
Alessio

Reputation: 2068

In my case the error was that the Web Service method was declared "private" instead of "public"

Upvotes: 3

Rohit
Rohit

Reputation: 165

Try using this, I think datatype should be 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);
            }
        });

And in C# Code change Pid to string

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

Upvotes: 1

Nag
Nag

Reputation: 689

Did U add ServiceReference Class. Check this once. Based on your comment I can tell what to do

Upvotes: 0

Related Questions