Построение SOAP-сообщения с XMLDocument VB.NET - PullRequest
1 голос
/ 21 июля 2010

У меня возникли некоторые проблемы при построении правильно отформатированного SOAP сообщения с использованием XMLDocument в VB.NET (хотя ответы на C # хороши).

Я использую следующий код, чтобы вручную создать мое сообщение SOAP , так как префикс пространства имен мыла : Header и soap: Body удаляются в выходном XML:

Dim soapEnvelope As XmlElement = _xmlRequest.CreateElement("soap", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/")
soapEnvelope.SetAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema")
soapEnvelope.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
_xmlRequest.AppendChild(soapEnvelope)
Dim soapHeader As XmlElement = _xmlRequest.CreateElement("soap", "Header", String.Empty)
_xmlRequest.DocumentElement.AppendChild(soapHeader)
Dim soapBody As XmlElement = _xmlRequest.CreateElement("soap", "Body", String.Empty)
_xmlRequest.DocumentElement.AppendChild(soapBody)

Это приводит к следующему выводу:

    <?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Header>
  ...
 </Header>
 <Body>
  ....
 </Body>
</soap:Envelope>

Что мне нужно, это:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soap:Header>
  ...
 </soap:Header>
 <soap:Body>
  ....
 </soap:Body>
</soap:Envelope>

ПРИМЕЧАНИЕ: Я ценю все входные данные, но независимо от каких-либо ссылок на то, как SOAP должен работать или анализироваться на принимающей стороне или что-то в этом роде, нижняя строка мне нужна генерировать XML, как описано для. Заранее спасибо!

РЕШЕНИЕ: Очень похоже на Quartmeister ответ был способ, которым я решил это. Проблема была на самом деле в отношении пространства имен. Вместо того, чтобы использовать строковое значение каждый раз, я использовал следующее решение, используя NamespaceURI из DocumentElement :

Dim soapHeader As XmlElement = _xmlRequest.CreateElement("soap", "Header", _xmlRequest.DocumentElement.NamespaceURI)
Dim soapBody As XmlElement = _xmlRequest.CreateElement("soap", "Body", _xmlRequest.DocumentElement.NamespaceURI)

1 Ответ

2 голосов
/ 21 июля 2010

Вам необходимо установить пространство имен XML для элементов Header и Body в пространство имен soap:

Dim soapHeader As XmlElement = _xmlRequest.CreateElement("soap", "Header", "http://schemas.xmlsoap.org/soap/envelope/")
Dim soapBody As XmlElement = _xmlRequest.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...