Вызов WebMethod с использованием регистра изменений jQueryAjax - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть следующий запрос с использованием 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 &#39;getdealnumberlist&#39;,  method names are case sensitive.   The method name &#39;GetWTNumberList&#39; with the same name but different casing was found.

Кто и почему меняет кожух? Если я изменяю, мой .asmx работает как положено.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

В этой надоедливой проблеме я нашел ответ, и он был очень тривиальным.

В Visual Studio при использовании Option Compare Binary Option Compare Text у меня сложилось впечатление, что это повлияет только на генерацию кода.Я был неправ.Не уверен, каков метод создания промежуточного кода для веб-сервисов и / или AJAX, но добавление Option Compare Text решает проблему верблюда.

Лично я считаю, что это (выживаемая) ошибка.

0 голосов
/ 12 ноября 2018

Не уверен, что именно является причиной проблемы, но я столкнулся с этой проблемой очень давно, все еще используя страницу веб-форм и обратный вызов AJAX для возврата чего-либо из веб-службы (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

Эта проблема также иногда возникала, когда методы веб-службы тестировались напрямую, например, введя URL как http://localhost:XXXX/path/to/webservicename.asmx/GetDealNumberList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...