笔记:实例管理
为了支持服务端的本地特性,WCF定义了行为的概念。一个行为,就是本地的服务特性,他不会影响到服务的通信模式。ServiceBehaviorAttribute的InstanceContextModel属性是控制服务上的实例模式。
单调服务(InstanceContextModel.PerCall)
特点:每次Client代理请求,WCF都会创建一个服务实例,调用完后销毁。
1、传统的C/S模式,每个Client长期占用一个Service实例,这样服务端很浪费资源,只能支持为数不多的Client。
2、PerCall是根据需求才创建实例,而且在调用方法后立即销毁。所以Service会少于Client,可以支持更多的Client。
3、单调服务需要load状态,销毁时保存状态,状态共享比较适合分布式负载均衡(Load-balancing)
4、客户端不必去Dispose或ClearUp,这是服务端的工作。
5、单调服务具有良好的可伸缩性和对事物的支持
6、PerCall类似于Remoting的SingleCall
会话服务(InstanceContextModel.PerSession)
特点:和传统的CS模式一样,Client发出请求和Service建立独立的持久的连接,直到Client关闭。Service和Proxy共同持有一个Session。
1、InstanceContextModel 默认是PerSession模式。
2、关闭Proxy时,客户端异步调用Dispose,销毁实例。
3、NetTcpBinding和NetNamedPipeBinding,WCF会关联客户端的连接。
4、BaseHttpBinding无法保持会话。
5、WsHttpBinding可以通过信息头的SessionId来模拟传输层会话,因为SessionId是唯一的。
6、ServiceContract(SessionModel.Allowed | Required | NotAllowed) 默认是Allowed
7、若要设计一个会话契约,推荐使用Required
8、NotAllowed 禁止会话层传输,此时要把InstanceContextModel设为PerCall
9、配置一致性,如果服务时限的其中一个契约是会话契约,其他契约最好也是会话契约。
10、InstanceContextModel为PerCall,则SessionModel无效。SessionModel设为NotAllowed,则为PerCall
11、Service通过OperationContext.Current.SessionId获取 Client通过Proxy.InnerChannel.SessionId获取
12、PerSession同理与Remoting的客户端激活模式
单例服务(InstanceContextModel.Singleton)
特点:单例服务是一种极端的共享式服务,所有的客户端都将独自连接相同的实例(Well-Known),其生存周期是无限的,只有在关闭宿主时才会被释放。
1、单例服务不需要客户端维护单例实例的会话,也不需要使用支持传输层会话的绑定。
2、同一时间内只能有一个客户端能够访问单例服务。
分布操作(Demarcating Operation)
为了方法的有步骤的执行,WCF允许契约设计者制定契约操作为启动或终止的会话操作。使用OperationContract的特性IsInitiating和IsTerminating划分会话的执行步骤。
1、分布操作支持PerSession和Singleton模式。
2、IsInitiating默认为true IsTerminating默认为false
3、IsTerminating被设为true,则该方法执行完后终止会话,相反则持续会话。
实例停用(Context Deactivation)
限流(Throttling)
分类:
WCF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?