为什么我的sessionful,NetTcpBinding的,流服务实例不保留会话状态?(Why i

2019-10-22 05:30发布

我试图找出为什么我的NetTcpBinding的服务不维护状态,符合市场预期。 (也许我做错了)

我有以下结构(简化)WCF服务:

消息协定

    [MessageContract]
    public class StreamMetaData
    {
        [MessageHeader] 
        public string Info {get; set;}
        [MessageBodyMember]
        public Stream Data { get; set; }

    }

合同

    ServiceContract(SessionMode = SessionMode.Allowed)]
    public interface IMyService
    {
        [OperationContract]
        void Init(StreamMetaData metaData);

        [OperationContract]
        StreamMetaData GetMetaData();

    }

履行

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class MyService : IMyService
    {
        private StreamMetaData _streamMetaData;
        private StreamMetaData StreamMetaData 
        {
            get { return this._streamMetaData; }
            set { this._streamMetaData= value; }

        }

        public void Init(StreamMetaData metaData)
        {
            if (metaData == null)
                throw new ArgumentNullException("metaData");
            try
            {
                this.StreamMetaData = metaData;
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        public StreamMetaData GetMetaData()
        {
            return this.StreamMetaData;

        }
    }

客户端

        MyServiceNetTcp.MyServiceClient client= new MyServiceNetTcp.MyServiceClient ();

        client.Open();

        //metaData is an instance of StreamMetaData initialised somewhere in the code
        client.Init(metaData);

        var currentMetaData = client.GetMetaData(); //Returns null

我也跟着上处理会话MSDN文档 (特别是流)。

为什么说VAR currentMetaData = client.GetMetaData(); 返回null? 尽管在第一次调用初始化呢?

更新:

  • 调查有两个不同的绑定的可能性:一为流和另一个用于会话创建。
文章来源: Why is my sessionful,NetTcpBinding, Streaming service instance not retaining session state?