1

我试图弄清楚为什么我的 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(); 返回空?尽管在第一次通话中对其进行了初始化?

更新:

  • 研究具有两种不同绑定的可能性:一个用于流式传输,另一个用于会话创建。
4

0 回答 0