WCF会话服务基本应用技巧分享

开发 开发工具
WCF会话服务可以帮助开发人员在客户端每次连接时进行一个服务实例的分配。那么具体的操作步骤我们将会在这里给大家详细介绍。

WCF开发工具是一款由微软公司开发的建立于.Net Framework 2.0基础上的一个.Net Framework 3.0的重要组成部分。在这里我们可以通过对WCF会话服务做一个详细了解,以方便大家对此的掌握。

会话服务(Sessionful Service):为每次客户端连接分配一个服务实例。类似于Net Remoting的客户端激活模式。为每个客户端创建一个专门的服务实例。只要会话没有结束,该实例就不会被销毁。 对于会话服务而言,是一个客户端代理对应一个服务实例。也就是说,WCF会话服务中的服务是与代理相对应的,而不是对应于一个客户端。

配置私有会话

服务实例的默认激活方式为WCF会话服务模式。我们也可以显示配置会话服务的方式,使用[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)],具体代码如下所示:

 

  1. [ServiceBehavior(InstanceContextModeInstanceContextMode = 
    InstanceContextMode.PerSession)]  
  2. public class WCFServicePerSession : IWCFService  
  3. {  

服用要支持会话要依靠传输层的持久连接,例如NetTcpBinding会保持一个连接,而与连接无关的HTTP协议是因为无法保持连接,所以BasicHttpBinding是不支持会话的

 

如果服务要跨越服务边界,那么就要在服务契约这一层使用ServiceContact的SessionMode属性,SessionMode为枚举类型:

 

  1. public enum SessionMode  
  2. {  
  3. Allowed,  
  4. Required,  
  5. NotAllowed  

SessionMode.Allowed

SessionMode.Allowed是SessionMode的默认属性,一个服务端方法被标记了SessionMode.Allowed属性,表示它是允许传输会话的,但并不强制要求绑定必须支持会话,而服务的行为是采用单调还是会话这要取决于服务的配置和使用的绑定#t#

SessionMode.Required

SessionMode.Required 要求必须使用传输层会话,也就是说服务终结点的绑定一定得支持传输层会话,若要设计一个会话契约,我们还是使用SessionMode.Required而非SessionMode.Allowed

SessionMode.NotAllowed

SessionMode.NotAllowed指定契约永不使用传输会话,也不使用应用层会话,不管服务配置如何,总是采用单调服务方式。我们将一个契约标记SessionMode.NotAllowed以后,就不能使用NetTcpBinding等支持传输层会话的绑定,而如果像WSHttpBinding这样模拟传输层会话则是允许的,考虑到代码的可读性建议在使用SessionMode.NotAllowed时总是把服务配置为单调服务

一致性配置

为了方便,如果一个契约是会话契约那么***把所有契约都配置为会话契约,要避免将单调服务于会话契约混合定义在相同的WCF会话服务类型中

编写如下服务端代码

 

  1. [ServiceContract(SessionModeSessionMode = SessionMode.Required)]  
  2. interface IMyContract  
  3. {  
  4. [OperationContract]  
  5. void MyMethod();  
  6. }  
  7. [ServiceBehavior(InstanceContextModeInstanceContextMode=
    InstanceContextMode.PerSession)]  
  8. class MyService : IMyContract,IDisposable  
  9. {  
  10. int m_Counter = 0;  
  11. public MyService()  
  12. {  
  13. MessageBox.Show("Counter = " + m_Counter,"MyService.MyService()");  
  14. }  
  15. public void MyMethod()  
  16. {  
  17. m_Counter++;  
  18. string sessionID = OperationContext.Current.SessionId;  
  19. Trace.WriteLine("Service session ID: " + sessionID);  
  20. MessageBox.Show("Counter = " + m_Counter,"MyService.MyMethod()");  
  21. }  
  22. public void Dispose()  
  23. {  
  24. MessageBox.Show("Thread ID = " + Thread.CurrentThread.
    ManagedThreadId,"
    MyService.Dispose()");  
  25. }  

以上就是我们为大家介绍的有关WCF会话服务的相关内容。

责任编辑:曹凯 来源: CSDN
相关推荐

2010-02-25 10:52:29

WCF响应服务

2010-03-01 15:40:04

WCF实例停用

2010-02-25 18:04:02

WCF IIS宿主

2010-03-01 16:04:31

WCF服务契约

2010-02-26 13:40:28

WCF消息头

2010-03-01 18:11:40

WCF数据契约变更

2010-03-01 11:24:31

WCF面向服务

2010-02-06 16:16:01

C++冒泡排序

2010-02-23 15:58:57

WCF Session

2010-01-21 18:26:16

VB.NET拆分合并语

2010-03-01 13:06:49

WCF继承

2010-02-25 15:25:19

WCF通道

2010-02-22 15:20:54

WCF WS-Disc

2010-02-22 17:21:02

WCF消息交换

2013-12-12 16:10:21

Lua脚本语言

2010-02-26 10:46:12

WCF行为扩展

2010-02-23 13:03:34

WCF序列化

2010-03-02 10:50:57

WCF元数据交换

2010-02-25 16:45:13

WCF应用技巧

2010-02-24 17:07:26

WCF序列化引擎
点赞
收藏

51CTO技术栈公众号