C# WCF ServerInspectorBehavior-如何在AfterReceiveRequest中保留标头以便在BeforeSendReply中使用

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

我有一个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 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(request.Headers.FindHeader(“令牌ID”、“SecurityInfo”)) var bufferedCopy=request.CreateBufferedCopy(int.MaxValue); var sizeLog=string.Format(“请求消息大小:~{0}KB”,GetMessageLengthInKB(bufferedCopy.CreateMessage()); logger.Info(sizeLog); request=bufferedCopy.CreateMessage(); } 返回null; } SendReply之前的公共无效(参考消息回复,对象关联状态){ 如果(logger.IsInfo已启用){ //这里我想得到securityToken的值??? var bufferedCopy=reply.CreateBufferedCopy(int.MaxValue); var sizeLog=string.Format(“响应消息大小:~{0}KB”,GetMessageLengthInKB(bufferedCopy.CreateMessage()); logger.Info(sizeLog); reply=bufferedCopy.CreateMessage(); } } 关于如何保留securityToken变量以便在向客户端发送回复之前使用它的任何线索


您可以在AfterReceiveRequest方法中返回您的令牌(而不是返回null),它将作为correlationState对象传递给BeforeSendReply(将其转换为适当的类型,您可以使用它)