使用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。