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

问题描述:

可以在信封/标题/安全元素中添加和读取自定义标题吗?我尝试使用MessageHeader属性,但是这不允许我将标题放在Security元素中。使用WCF将自定义标题添加到Security元素中

我创建了一个实现IClientMessageInspector以为我能访问安全头,像这样一类:

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对象。

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

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