Вот сценарий: я пытаюсь отправить SOAP-сообщение в службу промежуточного маршрутизатора. Эта служба заботится только о моих заголовках SOAP-сообщений и использует заголовок WS-AddressingTo
для отправки по моему сообщению.Настройка MessageHeaders.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 --->
Я в настоящее время в состоянии установить другие пользовательские заголовки, что служба маршрутизации требует, используя Custom Behaviors без проблем:
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 для отладки, когда это поле получает множество и, конечно же, оно перезаписывается (screenshot of the stack trace and breakpoint).
Есть ли другой способ изменить заголовок SOAP To
, который я неправильно понимаю?