Использование веб-службы SOAP в ASP.NET

У меня есть 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-ответа. Любая идея, как я должен передавать мой конверт для мыла, чтобы получить правильный ответ от веб-службы?

Ответ 1

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

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

Ответ 2

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


Это не способ использования веб-сервисов в .NET. Используйте команду "Добавить службу" в Visual Studio, чтобы создать прокси-классы, которые позволят вам очень легко использовать эту службу.

См. Как использовать веб-службу для примера, а также http://msdn.microsoft.com/wcf/.

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

Ответ 3

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

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

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

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