WCF实现Session信息

来源:互联网 发布:c erp系统源码下载 编辑:程序博客网 时间:2024/06/11 15:45
新建两个类
public class ContextHeader : IClientMessageInspector{    public static Dictionary<string, Users> ListUsers = new Dictionary<string, Users>();    public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)    {    }    ~ContextHeader()    {    }    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)    {        //这里是客户端调用方法时候会调用 每次调用方法都会调用        MessageHeader clientHeader = MessageHeader.CreateHeader("headerName", string.Empty, Guid.NewGuid().ToString());        request.Headers.Add(clientHeader);        return null;    }}
public class CallContextAttribute : Attribute, IEndpointBehavior, IOperationBehavior    {        ContextHeader ch = new ContextHeader();        public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)        {        }        public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)        {            clientRuntime.ClientMessageInspectors.Add(ch);        }        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)        {        }        public void Validate(ServiceEndpoint endpoint)        {        }        public void AddBindingParameters(OperationDescription operationDescription, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)        {        }        public void ApplyClientBehavior(OperationDescription operationDescription, System.ServiceModel.Dispatcher.ClientOperation clientOperation)        {            clientOperation.Parent.ClientMessageInspectors.Add(ch);        }        public void ApplyDispatchBehavior(OperationDescription operationDescription, System.ServiceModel.Dispatcher.DispatchOperation dispatchOperation)        {        }        public void Validate(OperationDescription operationDescription)        {        }    }

然后你的Contract上就可以写

[ServiceContract]    [CallContext]    public interface SayHelloContract    {        [CallContext]        [OperationContract]        string SayHi(string HelloName);    }