Недопустимое имя метода веб-службы

Я получаю следующую ошибку: "Имя метода веб-службы недопустимо", когда я пытаюсь вызвать webmethod из javascript

Исправление System.InvalidOperationException: имя метода SaveBAT недействительно.    в System.Web.Services.Protocols.HttpServerProtocol.Initialize()    в System.Web.Services.Protocols.ServerProtocol.SetContext(тип типа, контекст HttpContext, запрос HttpRequest, ответ HttpResponse)    в System.Web.Services.Protocols.ServerProtocolFactory.Create(тип типа, контекст HttpContext, запрос HttpRequest, ответ HttpResponse, логическое и 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);
                }
            });
}

Код С# (веб-метод в файле AllService.asmx)

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

Я пробовал все решения, найденные в Qaru и ASP.NET site.but, но никто из них не работал у меня.

Ответ 1

Это была глупая ошибка.

удалите ключевое слово Static из объявления метода.

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

Ответ 2

В моем случае ошибка заключалась в том, что метод Web-службы был объявлен "private" вместо "public"

Ответ 3

Попробуйте использовать это, я думаю, что тип данных должен быть 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);
            }
        });

И в С# Code смените Pid на строку

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

Ответ 4

В моем случае я скопировал другой файл asmx, но не изменил свойство класса на имя нового класса в самом файле asmx (щелкните правой кнопкой мыши на файле asmx → Просмотреть разметку)

Ответ 5

Добавил ли ServiceReference класс. Отметьте этот один раз. Основываясь на вашем комментарии, я могу сказать, что делать

Ответ 6

Я тоже столкнулся с подобной проблемой. Решение включает в себя проверку всего, что связано с обеспечением того, чтобы все имя, параметры передавались правильно, как многие ответили. Убедитесь, что имя веб-метода, которое мы вызываем на странице пользовательского интерфейса, написано правильно, данные, типы данных верны и т.д. В моем случае я ошибся в имени веб-метода в своем вызове ajax. Он отлично работает, как только я нашел и правильно исправил имя.
Для Ex: в файле класса .asmx это имя метода "IsLeaseMentorExistWithTheSameName", но когда я вызывал из пользовательского интерфейса, я так называл:

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

Обратите внимание, что слово "The" отсутствует. Это была ошибка, и я исправил ее, и поэтому она отлично работала.

Ответ 7

У меня была эта проблема, потому что мой метод мыла имел параметр List<string>. Не могу найти способ заставить его работать с параметром массива; поэтому просто преобразуйте параметр в строку & -delimited (например, val1&val2&val3) и преобразуйте параметр в массив в методе обслуживания.

Ответ 8

Как утверждает Сундар Раджан, проверьте правильность параметров. Мой пример этой ошибки был, потому что я не смог передать какие-либо параметры (как тело в запросе POST), и веб-метод asmx ожидал именованный параметр, из-за этого логика привязки не смогла сопоставить запрос с именем метода хотя само название на самом деле правильное.

[WebMethod]
        public object MyWebMethod(object parameter)

Если в теле запроса нет parameter вы получите эту ошибку.