C# WCF ServerInspectorBehavior-如何在AfterReceiveRequest中保留标头以便在BeforeSendReply中使用
我有一个WCF服务,我已经扩展了它的行为 这是我的代码:C# WCF ServerInspectorBehavior-如何在AfterReceiveRequest中保留标头以便在BeforeSendReply中使用,c#,wcf,C#,Wcf,我有一个WCF服务,我已经扩展了它的行为 这是我的代码: public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { if (logger.IsInfoEnabled) { // this is a header sent from client that I need to keep so I can
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) {
if (logger.IsInfoEnabled) {
// this is a header sent from client that I need to keep so I can return it in BeforeSendReply
var securityToken = request.Headers.GetHeader < string > (request.Headers.FindHeader("Token-ID", "SecurityInfo"))
var bufferedCopy = request.CreateBufferedCopy(int.MaxValue);
var sizeLog = string.Format("request message size: ~{0} KB", GetMessageLengthInKB(bufferedCopy.CreateMessage()));
logger.Info(sizeLog);
request = bufferedCopy.CreateMessage();
}
return null;
}
public void BeforeSendReply(ref Message reply, object correlationState) {
if (logger.IsInfoEnabled) {
// here I want to get the securityToken value ???
var bufferedCopy = reply.CreateBufferedCopy(int.MaxValue);
var sizeLog = string.Format("response message size: ~{0} KB", GetMessageLengthInKB(bufferedCopy.CreateMessage()));
logger.Info(sizeLog);
reply = bufferedCopy.CreateMessage();
}
}
接收方请求后的公共对象(ref消息请求、IClientChannel通道、InstanceContext InstanceContext){
如果(logger.IsInfo已启用){
//这是从客户端发送的头,我需要保留它,以便在BeforeSendReply中返回它
var securityToken=request.Headers.GetHeader您可以在AfterReceiveRequest方法中返回您的令牌(而不是返回null),它将作为correlationState对象传递给BeforeSendReply(将其转换为适当的类型,您可以使用它)