У меня есть некоторые проблемы при создании правильно отформатированного сообщения SOAP с помощью XMLDocument в VB.NET (ответы C# прекрасны хотя).
Я использую следующий код для ручного создания моего сообщения SOAP, что происходит, то, что префикс пространства имен 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)
Вам необходимо установить пространство имен 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/")