我使用ajax(简化)有以下请求:
<asp:TextBox ID="DealNumber" runat="server" Width="100px" ToolTip="Deal (aka OPG)">
</asp:TextBox>
<Ajax:AutoCompleteExtender
ID="AutoCompleteExtender2"
runat="server"
TargetControlID="DealNumber"
ServiceMethod="GetDealNumberList"
ServicePath="/ws/WebServices.asmx"/>
和/ws/WebServices.asmx上(对不起我的.VB):
<System.Web.Script.Services.ScriptMethod(UseHttpGet:=True)>
<System.Web.Services.WebMethod>
Public Function GetDealNumberList(prefixText As String, count As Integer, contextKey As String) As System.String()
return {"Test " & PrefixText & " " & ContextKey}
end function
现在,进行典型的F12网络跟踪,ajax报告:
Invalid method name 'getdealnumberlist', method names are case sensitive. The method name 'GetWTNumberList' with the same name but different casing was found.
谁以及为什么要更换外壳?如果我修改我的.asmx可以正常使用。
答案 0 :(得分:0)
不确定到底是什么引起了该问题,但是很久以前我遇到了这个问题,同时仍然使用webforms页面和AJAX回调从Web服务(ASMX)返回内容。我通过将MessageName
属性和方法名以小写形式放在WebMethodAttribute
内来解决此问题,例如以下示例:
<ScriptMethod(UseHttpGet:=True)>
<WebMethod(MessageName:="getdealnumberlist")>
Public Function GetDealNumberList(prefixText As String, count As Integer, contextKey As String) As String()
Return {"Test " & PrefixText & " " & ContextKey}
End Function
当直接测试Web服务方法时,有时也会出现此问题,例如输入http://localhost:XXXX/path/to/webservicename.asmx/GetDealNumberList
之类的网址。
答案 1 :(得分:0)
在这个令人讨厌的问题中,我找到了答案,这很琐碎。
在Visual Studio中,当使用Option Compare Binary
Option Compare Text
时,我的印象是只会影响代码生成。我错了。不确定为Web服务和/或AJAX创建中间代码的方法是什么,但是添加Option Compare Text
可解决骆驼问题。
我个人认为这是(可生存的)错误。