使用WCF将自定义标头添加到Security元素中

时间:2010-07-19 22:42:26

标签: wcf saml soapheader

我可以在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;
}

但是originalMessage.Headers对象中没有Security头。

1 个答案:

答案 0 :(得分:0)

创建自定义消息编码器:http://msdn.microsoft.com/en-us/library/ms751486.aspx

您可以访问编码器的WriteMessage覆盖中的邮件头。请注意,Message的Headers属性不包含Security标头(尽管这可能取决于您使用的安全类型)。使用Message.WriteMessage(XmlWriter)将消息写入流或文件。流/文件将在通过线路发送之前包含消息的内容,包括Security元素。从那里,您可以根据需要修改您的消息并返回包含您的更改的ArraySegment。