Система.Сеть.Сервисы.Протоколы.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, потому что никто не изменил его.




Проблема заключается в следующем:



Как изменить пространство имен в интернете ссылка?

739   5  

5 ответов:

Помимо удаления и добавления веб-ссылок, вы можете попробовать регенерировать прокси с помощью wsdl.exe как предложено здесь, с пространством имен снова. Надеюсь, это поможет

Я также получил такое же исключение при вызове веб-сервиса. В моем клиентском коде я неправильно использовал пространство имен для ссылки на веб-сервис. Поэтому всякий раз, когда я обращался к веб-сервису, я использовал полные имена, такие как: Namespace.WebService, который решил эту проблему для меня.

Делюсь своим опытом, потому что это может помочь кому-то там.

Пример для объяснения случая:

Фактический метод:

[WebMethod]
public string Bar(){
}

Вы переименовали его в Foo

[WebMethod]
public string Foo(){
}

Неправильно названный метод:

objectName.Bar();

Правильный вызов:

objectName.Foo();

A конфликт имен (из-за переименования веб-метода) между фактическим веб-методом и вызываемым методом может возникнуть проблема.

Еще один бессовестный способ получить ошибку заключается в том, что если вы динамически изменяете url конечной точки и вводите адрес asmx вместо адреса wcf и наоборот.

Это может произойти, когда значение свойства SOAPAction WS не задано (null) или не корректно в отправленном запросе. Я использую библиотеку apache для подключения к службам в моем текущем проекте, и ниже вы можете найти мое решение/обходной путь.

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

call = (Call) service.createCall();
call = setUseSOAPAction(true);
Поскольку для моего случая apache не существует метода setSoapAction, я использовал их метод setProperty и присвоил этому свойству имя SOAPAction вручную.
call.setProperty("SOAPAction", "expected SOAPAction value");
call.setSOAPActionURI("expected SOAPAction value");

Я не мог вызвать службу, не используя эти два метода одновременно. время.

Я надеюсь, что это поможет.

Comments

    Ничего не найдено.