Система.Сеть.Сервисы.Протоколы.SoapException: сервер не распознал значение заголовка HTTP SOAPAction:
Когда я пытался вызвать метод в веб-службе, возникло исключение:
System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: http://localhost:53460/3Development/MyWebService.asmx/GetBasePath.
at System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest()
at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
Пространство имен веб-службы:
[WebService(Namespace = "http://internaltest.temp.us/MyWebService.asmx")]
Я провел небольшое исследование и обнаружил, что это исключение возникает из-за того, что пространство имен веб-службы, на которое ссылается проект, отличается от пространства имен веб-службы сервера, но я пытался удалить веб-ссылку и добавить ее снова в проект, но результат был все тот же.
Моя ситуация была похожа на нижеприведенную статья:
Http://bluebones.net/2003/07/server-did-not-recognize-http-header-soapaction/
Из Статьи:
Таким образом, в основном веб-сервис был перемещен из http://foo.com/servicename
to http://bar.com/servicename но "пространство имен" веб-службы
останавливались как http://foo.com/servicename, потому что никто не изменил его.
Проблема заключается в следующем:
Как изменить пространство имен в интернете ссылка?
5 ответов:
Помимо удаления и добавления веб-ссылок, вы можете попробовать регенерировать прокси с помощью wsdl.exe как предложено здесь, с пространством имен снова. Надеюсь, это поможет
Я также получил такое же исключение при вызове веб-сервиса. В моем клиентском коде я неправильно использовал пространство имен для ссылки на веб-сервис. Поэтому всякий раз, когда я обращался к веб-сервису, я использовал полные имена, такие как: Namespace.WebService, который решил эту проблему для меня.
Делюсь своим опытом, потому что это может помочь кому-то там.
Пример для объяснения случая:
Фактический метод:
[WebMethod] public string Bar(){ }Вы переименовали его в
Foo[WebMethod] public string Foo(){ }Неправильно названный метод:
objectName.Bar();Правильный вызов:
objectName.Foo();A конфликт имен (из-за переименования веб-метода) между фактическим веб-методом и вызываемым методом может возникнуть проблема.
Еще один бессовестный способ получить ошибку заключается в том, что если вы динамически изменяете url конечной точки и вводите адрес asmx вместо адреса wcf и наоборот.
Это может произойти, когда значение свойства
SOAPActionWS не задано (null) или не корректно в отправленном запросе. Я использую библиотеку apache для подключения к службам в моем текущем проекте, и ниже вы можете найти мое решение/обходной путь.Поскольку для моего случая apache не существует методаimport org.apache.axis.client.Call; import org.apache.axis.client.Service; call = (Call) service.createCall(); call = setUseSOAPAction(true);setSoapAction, я использовал их методsetPropertyи присвоил этому свойству имяSOAPActionвручную.call.setProperty("SOAPAction", "expected SOAPAction value"); call.setSOAPActionURI("expected SOAPAction value");Я не мог вызвать службу, не используя эти два метода одновременно. время.
Я надеюсь, что это поможет.
Comments