Это не вопрос - отправьте его здесь для справки:
При использовании WebService я получил следующую ошибку:
Формат запроса непризнан для URL, неожиданно заканчивающегося /myMethodName
Это не вопрос - отправьте его здесь для справки:
При использовании WebService я получил следующую ошибку:
Формат запроса непризнан для URL, неожиданно заканчивающегося /myMethodName
Нашел решение на этот веб-сайт
Все, что вам нужно, это добавить в свой web.config следующий текст
<configuration>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
</configuration>
Дополнительная информация от Microsoft
Несмотря на 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
Убедитесь, что вы используете правильный метод: 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); }
})
Superb.
Случай 2 - если та же проблема может возникнуть), в моем случае проблема была вызвана следующей строкой:
<webServices>
<protocols>
<remove name="Documentation"/>
</protocols>
</webServices>
Он хорошо работает на сервере, так как вызовы выполняются непосредственно в функции webservice - однако не удастся, если вы запустите службу непосредственно из .Net в среде отладки и хотите протестировать запуск этой функции вручную.
Для записи я получал эту ошибку, когда я переместил старое приложение с одного сервера на другой. Я добавил элементы <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>
Почему он работал без этих строк на одном веб-сервере, а не на другом, которого я не знаю.
Я использую следующую строку кода, чтобы исправить эту проблему. Напишите следующий код в файле web.config
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
У меня не было проблемы при разработке в локальном хосте. Однако, как только я опубликовал веб-сервер, веб-сервис возвращал пустой (пустой) результат, и я видел ошибку в своих журналах.
Я исправил его, установив для моего 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"
});
В html вы должны заключить вызов в форме с GET с чем-то вроде
<a href="/service/servicename.asmx/FunctionName/parameter=SomeValue">label</a>
Вы также можете использовать POST
, действие - это местоположение веб-службы и ввод параметра через тег ввода.
Существуют также классы SOAP
и прокси.
В моем случае у меня была перегрузка функции, которая вызывала это исключение, как только я изменил имя моей второй функции, она побежала нормально, предполагая, что веб-сервер не поддерживает перегрузку функции
Я также получил эту ошибку с mod-mona apache. Похоже, что страница документации для webservice еще не реализована в Linux. Но webservice работает, несмотря на эту ошибку. Вы должны увидеть его, добавив ?WSDL
в конец URL-адреса, т.е. http://localhost/WebService1.asmx?WSDL
Убедитесь, что вы отключили пользовательские ошибки. Это может замаскировать исходную проблему в вашем коде:
изменить
<customErrors defaultRedirect="~/Error" mode="On">
к
<customErrors defaultRedirect="~/Error" mode="Off">
a WebMethod, для которого требуется ContextKey,
[WebMethod]
public string[] GetValues(string prefixText, int count, string contextKey)
когда этот ключ не установлен, получил исключение.
Исправление, назначая ключ автозаполненияExtender.
ac.ContextKey = "myKey";