任何人都可以在WCF中告诉我如何在SessionMode.Allowed中创建会话或无会话通道。这意味着允许两种类型的WCF服务对话。感谢。
答案 0 :(得分:4)
SessionMode
仅描述您的服务合同,但未实现所需行为。 SessionMode.Allowed
告诉每个人服务在会话和没有会话时工作正常。在绑定中定义使用或不使用会话。
不同类型的绑定提供不同的功能集。某些功能需要/包括会话支持。
您可以对同一个合同使用多个绑定,并且一个绑定将在其他绑定不同时实现会话。
例如,下面的代码创建了会话通道,因为WSHttpBinding实现了消息安全性。
EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");
WSHttpBinding binding = new WSHttpBinding();
ChannelFactory<ICalculator> factory = new
ChannelFactory<ICalculator>(binding, address);
ICalculator channel = factory.CreateChannel();
添加此行将使Channel无会话:
binding.Security.Mode = SecurityMode.None;
Binding bellow也是无会话的,因为BasicHttpBinding
默认实现SecurityMode.None
。
BasicHttpBinding myBinding = new BasicHttpBinding();
EndpointAddress myEndpoint = new EndpointAddress("http://localhost/MathService/Ep1");
ChannelFactory<IMath> myChannelFactory = new ChannelFactory<IMath>(myBinding, myEndpoint);
基于安全性的会话不是WCF支持的唯一会话类型。 WCF支持4种不同类型的会话:
如果绑定实现了上述任何功能,您的服务将是sessionfull。
有关详细信息,请参阅MSDN - http://msdn.microsoft.com/en-us/library/ms733040.aspx
答案 1 :(得分:2)
我假设您的意思是SessionMode属性上的[ServiceContract]属性。
如果是这种情况,我认为你对合同中的会话概念有误解。通道是否会话取决于用于创建通道的绑定。 SessionMode
属性用于在运行时验证该合同的端点是否使用了适当的绑定。
对于会话模式的三个值:
该属性的MSDN page的备注部分提供了有关此属性的更多信息。