当我尝试从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(Type type,HttpContext context,HttpRequest request,HttpResponse response,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站点上找到的所有解决方案。但是没有一个能为我工作。
答案 0 :(得分:13)
这是一个愚蠢的错误。
从方法声明中删除Static
关键字。
[WebMethod]
public string SaveBOAT(string Pid)
{
SessionManager.MemberID = Pid;
return "";
}
答案 1 :(得分:2)
在我的情况下,错误是Web服务方法被声明为“私有”而不是“公共”
答案 2 :(得分:1)
尝试使用它,我认为数据类型应该是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 "";
}
答案 3 :(得分:1)
就我而言,我已经复制了另一个asmx文件,但没有将class属性更改为asmx文件本身中新类的名称(右键单击asmx文件->查看标记)
答案 4 :(得分:0)
你是否添加了ServiceReference
类。检查this一次。根据你的评论我可以告诉你做什么
答案 5 :(得分:0)
我也面临类似的问题。该解决方案包括检查与确保所有名称相关的所有内容,参数是否正确响应。确保我们在UI页面中调用的Web方法名称拼写正确,数据,数据类型正确等等。在我的情况下,我在ajax调用中拼错了Web方法名称。一旦我找到并正确更正了名称,它就能正常工作 对于Ex:在.asmx类文件中,这是方法名称&#34; IsLeaseMentorExistWithTheSameName&#34;但当我从UI打电话时,这就是我所说的:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<label><input type="checkbox" name="all" checked="true">All / none</label>
<label><input type="checkbox" name="cat1" checked="true">A</label>
<label><input type="checkbox" name="cat2">B</label>
<label><input type="checkbox" name="cat3">C</label>
<label><input type="checkbox" name="cat4">D</label>
请注意&#34;&#34;不见了。这是一个错误,我纠正了,所以它工作正常。
答案 6 :(得分:0)
我遇到了这个问题,因为我的soap方法具有一个List<string>
参数。无法找到使它与array参数一起使用的方法;因此只需将参数转换为以&
分隔的字符串(例如val1&val2&val3
)并将参数转换为服务方法中的数组。
答案 7 :(得分:0)
如Sundar Rajan所述,请检查参数是否正确。我出现此错误的原因是因为我未能传递任何参数(作为POST请求中的主体),并且asmx Web方法期望使用命名参数,因此绑定逻辑未能将请求与方法名称匹配,即使名称本身实际上是正确的。
[WebMethod]
public object MyWebMethod(object parameter)
如果请求正文中没有parameter
,则将收到此错误。
答案 8 :(得分:0)
就我而言,WebService 接收参数之一称为 )
。当我从 javascript 调用它时,我发送了正确的 Id 值,但发送的变量的名称被错误地称为 aId
。所以我只需要重命名 WebService 调用,像以前一样保持正确的值,只需更改变量名即可。