Ответ 1
Это была глупая ошибка.
удалите ключевое слово Static
из объявления метода.
[WebMethod]
public string SaveBOAT(string Pid)
{
SessionManager.MemberID = Pid;
return "";
}
Я получаю следующую ошибку: "Имя метода веб-службы недопустимо", когда я пытаюсь вызвать 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, но никто из них не работал у меня.
Это была глупая ошибка.
удалите ключевое слово Static
из объявления метода.
[WebMethod]
public string SaveBOAT(string Pid)
{
SessionManager.MemberID = Pid;
return "";
}
В моем случае ошибка заключалась в том, что метод Web-службы был объявлен "private" вместо "public"
Попробуйте использовать это, я думаю, что тип данных должен быть 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 "";
}
В моем случае я скопировал другой файл asmx, но не изменил свойство класса на имя нового класса в самом файле asmx (щелкните правой кнопкой мыши на файле asmx → Просмотреть разметку)
Добавил ли ServiceReference
класс. Отметьте этот один раз. Основываясь на вашем комментарии, я могу сказать, что делать
Я тоже столкнулся с подобной проблемой. Решение включает в себя проверку всего, что связано с обеспечением того, чтобы все имя, параметры передавались правильно, как многие ответили. Убедитесь, что имя веб-метода, которое мы вызываем на странице пользовательского интерфейса, написано правильно, данные, типы данных верны и т.д. В моем случае я ошибся в имени веб-метода в своем вызове ajax. Он отлично работает, как только я нашел и правильно исправил имя.
Для Ex: в файле класса .asmx это имя метода "IsLeaseMentorExistWithTheSameName", но когда я вызывал из пользовательского интерфейса, я так называл:
var varURL = <%=Page.ResolveUrl("~/Main/BuildCriteria.asmx") %> + '/IsLeaseMentorExistWithSameName';
Обратите внимание, что слово "The" отсутствует. Это была ошибка, и я исправил ее, и поэтому она отлично работала.
У меня была эта проблема, потому что мой метод мыла имел параметр List<string>
. Не могу найти способ заставить его работать с параметром массива; поэтому просто преобразуйте параметр в строку &
-delimited (например, val1&val2&val3
) и преобразуйте параметр в массив в методе обслуживания.
Как утверждает Сундар Раджан, проверьте правильность параметров. Мой пример этой ошибки был, потому что я не смог передать какие-либо параметры (как тело в запросе POST), и веб-метод asmx ожидал именованный параметр, из-за этого логика привязки не смогла сопоставить запрос с именем метода хотя само название на самом деле правильное.
[WebMethod]
public object MyWebMethod(object parameter)
Если в теле запроса нет parameter
вы получите эту ошибку.