WCF会话服务基本应用
WCF开发工具是一款由微软公司开发的建立于.Net Framework 2.0基础上的一个.Net Framework 3.0的重要组成部分。在这里我们可以通过对WCF会话服务做一个详细了解,以方便大家对此的掌握。
会话服务(Sessionful Service):为每次客户端连接分配一个服务实例。类似于Net Remoting的客户端激活模式。为每个客户端创建一个专门的服务实例。只要会话没有结束,该实例就不会被销毁。 对于会话服务而言,是一个客户端代理对应一个服务实例。也就是说,WCF会话服务中的服务是与代理相对应的,而不是对应于一个客户端。
配置私有会话
服务实例的默认激活方式为WCF会话服务模式。我们也可以显示配置会话服务的方式,使用[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)],具体代码如下所示:
- [ServiceBehavior(InstanceContextModeInstanceContextMode =
InstanceContextMode.PerSession)] - public class WCFServicePerSession : IWCFService
- {
- }
服用要支持会话要依靠传输层的持久连接,例如NetTcpBinding会保持一个连接,而与连接无关的HTTP协议是因为无法保持连接,所以BasicHttpBinding是不支持会话的
如果服务要跨越服务边界,那么就要在服务契约这一层使用ServiceContact的SessionMode属性,SessionMode为枚举类型:
- public enum SessionMode
- {
- Allowed,
- Required,
- 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会话服务类型中
编写如下服务端代码
- [ServiceContract(SessionModeSessionMode = SessionMode.Required)]
- interface IMyContract
- {
- [OperationContract]
- void MyMethod();
- }
- [ServiceBehavior(InstanceContextModeInstanceContextMode=
InstanceContextMode.PerSession)] - class MyService : IMyContract,IDisposable
- {
- int m_Counter = 0;
- public MyService()
- {
- MessageBox.Show("Counter = " m_Counter,"MyService.MyService()");
- }
- public void MyMethod()
- {
- m_Counter ;
- string sessionID = OperationContext.Current.SessionId;
- Trace.WriteLine("Service session ID: " sessionID);
- MessageBox.Show("Counter = " m_Counter,"MyService.MyMethod()");
- }
- public void Dispose()
- {
- MessageBox.Show("Thread ID = " Thread.CurrentThread.
ManagedThreadId,"MyService.Dispose()"); - }
- }
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /news/detail/tanhbkegge
-
从《银行业金融机构数据治理指引》监管要求看商业银行数据能力建设
51CTO 09-21 -
2023 年度 A 类学科竞赛项目清单
那个人有梦想 09-16 -
爱思唯尔的ESWA——模板、投稿、返修、接收的
老板来碗小面加蛋~ 09-16 -
国航天科技集团公司的各个研究院
知识在于积累 09-17 -
全球WIFI功率信号最强的国家清单,无线WIFI调优
Cisco_VIP 09-17 -
AI绘画Midjourney的咒语关键词汇
毕设小程序软件程序猿 09-17 -
ChatGPT注册流程攻略,含验证码接收
PHP中文网 05-29 -
创作者身份认证申请规则和审核标准
CSDN官方博客 09-16 -
的10 个顶尖的国内外设计网站
四喜圆子- 09-16 -
OBS做绿幕直播滤镜实现去掉绿色背景
视频砖家 09-16