У меня возникли некоторые проблемы при построении правильно отформатированного 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)