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

225

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

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

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

  • 3
    Msgstr "Неизвестный формат запроса для URL, который неожиданно заканчивается на" / _myMethodName ". " Чтобы упростить Google.
  • 0
    И китайский перевод: « Невозможно определить запрошенный формат, потому что URL неожиданно закончился с / myMethodName ».
Теги:
web-services

12 ответов

460
Лучший ответ

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

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

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

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

  • 2
    будет ли это работать на приложениях IIS7 .Net2.0?
  • 3
    Я думаю, все, что вам нужно сделать, это переключить <system.web> на <system.webserver>
Показать ещё 18 комментариев
15

Несмотря на 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
  • 0
    Это исправило мою проблему. Я получал ту же ошибку, что и OP; на ранее работавшем сайте. Оказывается, кто-то включил .NET 3.5 через функции Windows (по несвязанным причинам), которые сломали мой сайт. aspnet_regiis -i исправил это, хотя.
12

Убедитесь, что вы используете правильный метод: 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); }
})
  • 0
    моя передача значения параметра получила проблему из-за типа данных и пропущенных значений, которые заканчиваются ошибкой 500. сейчас это решено.
7

Superb.

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

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

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

  • 0
    Добавил эту логику в web.config, чтобы предотвратить отображение определения при просмотре в сервисе .asmx. Видимо, это сломало ActiveReports. Рад знать, что это, скорее всего, симптом локального тестирования, и он будет работать на сервере. Благодарю.
2

Для записи я получал эту ошибку, когда я переместил старое приложение с одного сервера на другой. Я добавил элементы <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>

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

1

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

Я исправил его, установив для моего 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"
            });
1

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

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

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

0

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

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

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

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

ac.ContextKey = "myKey";
0

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

0

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

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

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

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

-2

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

изменить

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

к

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню