Использование веб-службы SOAP в ASP.NET - PullRequest
11 голосов
/ 27 июля 2010

У меня есть SOAP WSDL (находится здесь: https://portal.bsh -partner.com / picenter / server / a2a / ), и я пытаюсь использовать веб-службы.

var soapEnvelope = string.Empty;
soapEnvelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
soapEnvelope += "<soapenv:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:q0=\"http://thexmlhost.com\">";
soapEnvelope += "<q0:Connect>";
soapEnvelope += "<q0:Username>username</q0:Username>";
soapEnvelope += "<q0:Password>password</q0:Password>";
soapEnvelope += "</q0:Connect>";
soapEnvelope += "</soapenv:Body>";
soapEnvelope += "</soapenv:Envelope>";

var xmlHttp = new MSXML2.ServerXMLHTTP40();
xmlHttp.open("POST", "https://thexmlhost.com/", "", "");
xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttp.setRequestHeader("SOAPAction", "thexmlhost.com/");

xmlHttp.send(soapEnvelope);

xmlHttp.waitForResponse(500);

var outXml = xmlHttp.responseText;

Ответ продолжает возвращать страницу с общей ошибкой ответа HTTP.Любая идея, как я должен передать мой конверт мыла, чтобы получить правильный ответ от веб-службы?

Ответы [ 3 ]

22 голосов
/ 27 июля 2010

Если у вас есть WSDL, вы можете создать ссылку на службу в Visual Studio, и она создаст прокси-класс для вас. Если бы я не упустил какой-то изюминки в вашем вопросе, это было бы намного надежнее и намного проще в реализации и использовании.

Надеюсь, это поможет.

9 голосов
/ 27 июля 2010

Я только что заметил, что вы используете этот код на стороне сервера.


Это не способ использовать веб-сервисы в .NET.Используйте команду «Добавить ссылку на службу» в Visual Studio, чтобы создать прокси-классы, которые позволят вам очень легко использовать службу.а также http://msdn.microsoft.com/wcf/.

Кроме того, никогда не использует методы работы со строками при работе с XML.Вкратце, правила для строк и для XML разные..NET имеет несколько API-интерфейсов XML для работы с XML, и все они знают правила.

3 голосов
/ 27 июля 2010

Просто взглянув на код, похоже, вы забыли добавить начальный тег вашего тела: <soapenv:Body>

Если у вас нет особых причин для создания сообщения вручную, я настоятельно рекомендую использовать прокси-сервер, созданный с помощью инструмента svcutil.exe, который поставляется с Visual Studio 2008 или более поздней версии. (этот инструмент автоматически используется Visual Studio, если вы используете функцию «Добавить ссылку на службу»), при условии, что у вас нет проблем с использованием WCF для обработки связи с вашим веб-сервисом.

В качестве альтернативы, если по какой-то причине вы не можете использовать WCF, например, если вы разрабатываете в .Net 2.0 с Visual Studio 2005, и в этом случае у вас не будет возможности «Добавить ссылку на службу», тогда все равно может используйте более старую функцию «Добавить веб-ссылку» в Visual Studio для создания прокси для вашего веб-сервиса. Эта функция использует инструмент wsdl.exe, а не svcutil.exe.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...