Добавить пользовательский заголовок в элемент безопасности с помощью WCF - PullRequest
1 голос
/ 20 июля 2010

Можно ли добавить и прочитать пользовательский заголовок в элементе Envelope / Header / Security? Я попытался использовать атрибут MessageHeader, но это не позволяет мне поместить заголовок в элемент Security.

Я создал класс, который реализует IClientMessageInspector, думая, что я могу получить доступ к заголовку Security следующим образом:

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
   MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
   request = buffer.CreateMessage();

   Message originalMessage = buffer.CreateMessage();
   foreach (MessageHeader h in originalMessage.Headers)
   {
      Console.WriteLine("\n{0}\n", h);
   }

   return null;
}

Но заголовок Security отсутствует в объекте originalMessage.Headers.

1 Ответ

0 голосов
/ 30 сентября 2011

Создание пользовательского кодировщика сообщений: http://msdn.microsoft.com/en-us/library/ms751486.aspx.

Вы можете получить доступ к заголовкам сообщений в переопределении WriteMessage вашего кодировщика.Обратите внимание, что свойство «Заголовки сообщения» не будет содержать заголовок «Безопасность» (хотя это может зависеть от типа используемой вами защиты).Запишите сообщение в поток или файл, используя, скажем, Message.WriteMessage (XmlWriter).Поток / файл будет содержать содержимое сообщения непосредственно перед отправкой по сети, включая элемент безопасности.Оттуда вы можете при необходимости изменить свое сообщение и вернуть ArraySegment, включая ваши изменения.

...