Мне нужно добавить настраиваемое поле в заголовок SOAP, а для изменения это , а не учетные данные. Мой исходящий запрос должен выглядеть следующим образом:
<?xml version="1.0"?>
<soapenv:Envelope xmlns:urn="urn:company:sap:ds:sales" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<messageId xmlns="http://www.company.com/foo/bar/soap/features/messageId/">urn:uuid:123c155c-3ab4-19ca-a045-02003b1bb7f5</messageId>
</soapenv:Header>
<soapenv:Body>
...
</soapenv:Body>
</soapenv:Envelope>
Интересной частью, конечно, является тег messageId и его UUID. Как добавить это в C# к моему SoapHttpClientProtocol?
До сих пор я изменил класс обслуживания, сгенерированный утилитой, переопределив GetWebRequest (в новом файле частичного класса). Там я могу добавить в HttpWebRequest.Headers, но я в недоумении, как это нужно сделать, чтобы получить желаемый результат? Это не так просто, как просто написать
request.Headers["messageID"] = "urn:uuid:123c155c-3ab4-19ca-a045-02003b1bb7f5"
, потому что в нем отсутствует часть xmlns = "http://www.company.com/foo/bar/soap/features/messageId/". Я также не уверен, правильно ли это добавляет soapenv: Header (а не просто Header).
О, и, конечно, я не могу просто протестировать, потому что у меня нет доступа к серверу. который находится за брандмауэром.