我试图弄清楚为什么我的 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(); 返回空?尽管在第一次通话中对其进行了初始化?
更新:
- 研究具有两种不同绑定的可能性:一个用于流式传输,另一个用于会话创建。