Вот сценарий: я пытаюсь отправить сообщение SOAP промежуточной службе маршрутизатора. Эта служба заботится только о заголовках моих сообщений SOAP и использует WS-Addressing. To
заголовок для пересылки моего сообщения.
Мне нужно в основном POST-запрос, подобный следующему, в службу маршрутизатора:
POST http://gatewayRouter/routingService HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Host: gatewayRouter
Content-Length: 8786
Expect: 100-continue
Connection: Keep-Alive
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header> <!-- ... -->
<a:To s:mustUnderstand="1">http://actualDestination</a:To>
</s:Header> <!-- ... body, /envelope, etc --->
В настоящее время я могу установить другие настраиваемые заголовки, которые требуются службе маршрутизации, с помощью Пользовательское поведение а> без проблем:
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
request = buffer.CreateMessage();
request.Headers.To = new Uri("http://actualDestination");
request.Headers.Add(new CustomHeader());
return null;
}
Приведенный выше код отлично работает, чтобы добавить мой CustomHeader в сообщение, но не может изменить исходящее поле WS-Addressing To
— оно всегда возвращается к тому же URI, что и значение HTTP POST. На самом деле, я использовал .NET Reflector для отладки, когда это поле установлено, и, конечно же, оно перезаписывается (скриншот трассировки стека и точки останова).
Есть ли другой способ изменить заголовок SOAP To
, который я неправильно понимаю?