Потребление веб-сервиса SOAP в ASP.NET

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

var soapEnvelope = string.Empty;
soapEnvelope = "";
soapEnvelope += "";
soapEnvelope += "";
soapEnvelope += "username";
soapEnvelope += "password";
soapEnvelope += "";
soapEnvelope += "";
soapEnvelope += "";

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. Какая-либо идея, как я должен передавать свой Конверт Мыла для возвращения надлежащего ответа от веб-сервиса?

11
задан John Saunders 11 March 2014 в 18:03
поделиться

3 ответа

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

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

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

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

3
ответ дан 3 December 2019 в 02:10
поделиться

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


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

Смотрите How to Consume a Web Service для примера, а также http://msdn.microsoft.com/wcf/.

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

9
ответ дан 3 December 2019 в 02:10
поделиться

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

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

22
ответ дан 3 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: