我试图找出为什么我的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? 尽管在第一次调用初始化呢?
更新:
- 调查有两个不同的绑定的可能性:一为流和另一个用于会话创建。