Формат запроса непризнан для URL, неожиданно заканчивающегося

Это не вопрос - отправьте его здесь для справки:

При использовании WebService я получил следующую ошибку:

Формат запроса непризнан для URL, неожиданно заканчивающегося /myMethodName

Ответ 1

Нашел решение на этот веб-сайт

Все, что вам нужно, это добавить в свой web.config следующий текст

<configuration>
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
  </system.web>
</configuration>

Дополнительная информация от Microsoft

Ответ 2

Несмотря на 90% всей информации, которую я нашел (пытаясь найти решение этой ошибки), я предлагаю добавить конфигурацию HttpGet и HttpPost, которая не работает для меня... и didn Мне все равно.

Мое приложение работает на множестве серверов (30+), и мне никогда не приходилось добавлять эту конфигурацию для любого из них. Либо версия приложения, работающего под .NET 2.0, либо .NET 4.0.

Решением для меня было перерегистрировать ASP.NET для IIS.

Для достижения этой цели я использовал следующую командную строку...

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i

Ответ 3

Убедитесь, что вы используете правильный метод: Post/Get, правильный тип контента и правильные параметры (данные).

$.ajax({
    type: "POST",
    url: "/ajax.asmx/GetNews",
    data: "{Lang:'tr'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) { generateNews(msg); }
})

Ответ 4

Superb.

Случай 2 - если та же проблема может возникнуть), в моем случае проблема была вызвана следующей строкой:

<webServices>
  <protocols>
    <remove name="Documentation"/>
  </protocols>
</webServices>

Он хорошо работает на сервере, так как вызовы выполняются непосредственно в функции webservice - однако не удастся, если вы запустите службу непосредственно из .Net в среде отладки и хотите протестировать запуск этой функции вручную.

Ответ 5

Для записи я получал эту ошибку, когда я переместил старое приложение с одного сервера на другой. Я добавил элементы <add name="HttpGet"/> <add name="HttpPost"/> в web.config, который изменил ошибку на:

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at BitMeter2.DataBuffer.incrementCurrent(Int64 val)
   at BitMeter2.DataBuffer.WindOn(Int64 count, Int64 amount)
   at BitMeter2.DataHistory.windOnBuffer(DataBuffer buffer, Int64 totalAmount, Int32 increments)
   at BitMeter2.DataHistory.NewData(Int64 downloadValue, Int64 uploadValue)
   at BitMeter2.frmMain.tickProcessing(Boolean fromTimerEvent)

Чтобы исправить эту ошибку, мне пришлось добавить строки ScriptHandlerFactory в web.config:

  <system.webServer>
    <handlers>
      <remove name="ScriptHandlerFactory" />
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </handlers>
  </system.webServer>

Почему он работал без этих строк на одном веб-сервере, а не на другом, которого я не знаю.

Ответ 6

Я использую следующую строку кода, чтобы исправить эту проблему. Напишите следующий код в файле web.config

<configuration>
    <system.web.extensions>
       <scripting>
       <webServices>
       <jsonSerialization maxJsonLength="50000000"/>
      </webServices>
     </scripting>
   </system.web.extensions>
</configuration>

Ответ 7

У меня не было проблемы при разработке в локальном хосте. Однако, как только я опубликовал веб-сервер, веб-сервис возвращал пустой (пустой) результат, и я видел ошибку в своих журналах.

Я исправил его, установив для моего ajax contentType:

"application/json; charset=utf-8"

и используя:

JSON.stringify()

на объекте, который я отправлял.

var postData = {data: myData};
$.ajax({
                type: "POST",
                url: "../MyService.asmx/MyMethod",
                data: JSON.stringify(postData), 
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    console.log(data);
                },
                dataType: "json"
            });

Ответ 8

В html вы должны заключить вызов в форме с GET с чем-то вроде

<a href="/service/servicename.asmx/FunctionName/parameter=SomeValue">label</a>

Вы также можете использовать POST, действие - это местоположение веб-службы и ввод параметра через тег ввода.

Существуют также классы SOAP и прокси.

Ответ 9

В моем случае у меня была перегрузка функции, которая вызывала это исключение, как только я изменил имя моей второй функции, она побежала нормально, предполагая, что веб-сервер не поддерживает перегрузку функции

Ответ 10

Я также получил эту ошибку с mod-mona apache. Похоже, что страница документации для webservice еще не реализована в Linux. Но webservice работает, несмотря на эту ошибку. Вы должны увидеть его, добавив ?WSDL в конец URL-адреса, т.е. http://localhost/WebService1.asmx?WSDL

Ответ 11

Убедитесь, что вы отключили пользовательские ошибки. Это может замаскировать исходную проблему в вашем коде:

изменить

<customErrors defaultRedirect="~/Error" mode="On">

к

<customErrors defaultRedirect="~/Error" mode="Off">

Ответ 12

a WebMethod, для которого требуется ContextKey,

[WebMethod]
public string[] GetValues(string prefixText, int count, string contextKey)

когда этот ключ не установлен, получил исключение.

Исправление, назначая ключ автозаполненияExtender.

ac.ContextKey = "myKey";