Вот сценарий: я пытаюсь отправить сообщение SOAP в службу промежуточного маршрутизатора. Эта служба заботится только о моих заголовках сообщений SOAP и использует заголовок WS-Addressing To
для пересылки моего сообщения.
Мне нужно в основном отправить запрос в службу роутера, как показано ниже:
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 для отладки, когда это поле установлено, и, конечно же, оно перезаписывается ( снимок экрана трассировки стека и точки останова ).
Есть ли какой-то другой способ изменить заголовок To
SOAP, который я не правильно понимаю?