WCF之实例模型

  • PerCall.

    • 为每次调用创建新的服务对象.

    • 内存使用量最小,增加整体的吞吐量.

    • 状态不保存,服务实例及时释放。
      • 单例的状态没有办法保存.所以应使用数据库或者文件或者全局变量来保存服务实例的状态.如果单调服务真的与状态无关,就根本不需要单调激活模式。准确地讲,正是因为状态,特别是代价昂贵的状态,才需要使用单调模式.

    • 不会有并发性问题。

    • 服务的利用率最高,只有在需要时才会有服务实例的创建。不会有闲置的服务对象。

    • 在实例销毁时,不会断开与客户端的连接.在事务编程(保证实例状态的同步)与队列服务中(单调服务能够建立服务实例与离散队列消息之间的简单映射)最好.

    • 采用单调服务的根本原因,是在于单调激活模式的本质就在于能够适时释放实例所持有的昂贵资源,这里的资源大体上讲就是一种状态。如果不需要维护状态,则意味着性能上没有太大的损耗,我们就没有必要采用单调激活模式了,毕竟频繁地创建与销毁实例,仍然会对性能造成一定的影响.

    • 但是当服务对象的创建需要很大开销时,该模式会使得整体的吞吐量减少,此时不应再使用它.

    • 业务逻辑层和数据访问层相互独立,应考虑共享。

    • 对于每次都要使用的资源放入Cache,但会产生并发行问题,要上锁,对于耗时的操作,也放入Cache.


  • Session.
    • WCF有4种会话:传输,可靠性,安全,应用程序。

    • 会话应保证是可靠的,实现了会话的服务的终结点都应该使用支持可靠会话传输的绑顶类型.

    • Session是由客户端发起的,这样使得只有在有请求时才创建,更高效,且保证了消息的有序。

    • 但是ASP.NET的会话由服务器发起。

    • 会出现多客户时的并发问题,应对临界资源进行加锁,但是这样减少了服务的吞吐量。

    • 由于维护状态,所以内存开销比较大.

    • 业务逻辑的组件是完全独立的,即无状态。状态的保存是发生在Session层。当想在业务逻辑层保持状态时,应该把状态信息保存到服务层,即Session层。

    • 服务与状态紧密相连。SessionMode: Allowed:如果当前使用的Binding支持Session,就使用Session.如果不支持,就不会使用。NotAllowed:无论怎样。都不使用Session功能。推荐。使得设置明确。有确定行为。Required:当Binding不支持Session时。会使得服务失败。推荐。

    • 绑定和实例模型的对应依赖于SessionID.任何形式的会话都会生成会话信道,ID用来将消息和信道绑定起来.

    • 通常,一旦客户端关闭了代理,会话就会终止。但是,客户端也可以强行终止会话,也可能因为通信故障而终止会话。每个会话还包含了一个空闲超时值,默认为10分钟。会话如果是因为空闲超时的原因被终止,那么当客户端试图使用它的代理时,会获得一个CommunicationObjectFaultedException异常。在绑定中通过配置不同的值,可以为客户端和服务配置不同的超时值, 以短的超时值为准。支持可靠传输层会话的绑定提供了ReliableSession属性,类型为ReliableSession或者OptionalReliableSession。ReliableSession类定义了InactivityTimeout属性,属于TimeSpan类型,通过它可以配置一个新的空闲超时值.


    • 实例停用
      • 仅对会话实例模式有效.

      • 会话除了关联客户端信息外,还需要关联托管了服务的上下文.上下文会随着会话的开启关闭而被创建和销毁.默认上下文的生命周期与服务实例一样.为了优化,可以分离两者.可以独立的停用实例,或者有不含实例的上下文.

      • 通过服务契约的ReleaseInstanceMode= None/ BeforeCall/ AfterCall/ BeforeAndAfterCall.

      • 也可以通过编程方式在服务的操作中显式地完成对实例的停止。方法是利用InstanceContext的ReleaseServiceInstance()方法,可以混合使用这两种方法.

  • 单件.
    • 加锁后,只有一个请求能被处理,造成吞吐量的减少。只有当不会有临界资源时才会使用。且会带来死锁的危险。

    • 也可以有状态(使用SessionID).


  • PerCall高可扩展性和高吞吐量;Session应注意Session带来的开销和潜在的超时可能性;一般不使用单件模式。只有当多台客户端共享一个功能时.

WCF之实例模型

时间: 2024-10-08 19:34:58

WCF之实例模型的相关文章

C# 一个WCF简单实例

C# 一个WCF简单实例 作者: 字体:[增加 减小] 类型:转载 时间:2012-10-27我要评论 以订票为例简单应用wcf程序,需要的朋友可以参考下 WCF实例(带步骤) 复制代码代码如下: <xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 本篇转自百度文档,自己试过,确实可以用. 以订票为例简单应用wcf 新建一个wcf服务应用程序 在IServi

使用C#创建及调用WCF完整实例 (Windows服务宿主)

关于WCF的概念.原理.优缺点等,在这里就不多说了,网上很多,可以自行搜索,比我解释的要专业的多. 这里直接说使用Windows 服务(Windows Service)作为宿主如何实现,其它方式不在此次教程之内 文章最后有本例的下载连接,包含源代码.说明教程.编译后文件 实例环境:Windows Server 2008 R2 + VS 2010(C#) 打开 VS 2010,选择 新建项目,选择 ”WCF”|”WCF 服务库 ”,注意这里是”WCF 服务库 ”,不是"WCF 服务应用程序&quo

【原创】有关Silverlight中自动生成的类中 没有WCF层edmx模型新加入的对象 原因分析。

前端页面层: 编译老是不通过,报如下如所示错误: -- 然后下意识的查了下 生成的cs文件,没有搜到根据edmx 生成的 对应的类. 结果整理: 1.尽管在 edmx 模型中加入了 对应的表,但 如果在 wcf层是 没有 显示的去 写方法 去调用的话, silverlight 自动生成的 类 里面 也是不会 出现该类的! 解决措施: 在WCF层的一些Service类中显示的 用下 目标对象.

【转】一个简单的WCF回调实例

代码下载:http://files.cnblogs.com/AlwinXu/CallbackService-master.zip 本文转自: http://adamprescott.net/2012/08/15/a-simple-wcf-service-callback-example/ A Simple WCF Service Callback Example 11 Replies I’ve done a lot with WCF services over the past few year

winform调用WCF默认实例

一:截图 二:调用代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WCFwinformTest { public partial class Form1

WCF默认实例的解读

一:图片 IService1.cs是定义的接口,包含对Service.方法和方法用的类的声明的声明 Service1.cs是对接口的实现,包含实现的方法 代码注释: using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace WcfServi

DICOM:再次剖析fo-dicom中DicomService的自定义事件绑定

题记: 趁着<从0到1>大火的热潮,近期重新翻阅了一遍<从一到无穷大>(这样是不是感觉整个非负数轴就圆满了^_^).虽然作为科普类书籍,但是里面的内容还是比较深奥,幸亏有作者精准的翻译,一番细细品味后犹如醍醐灌顶,心中透亮. 一直幻想有外星人.宇宙外生物的存在,从<源代码>描述的"平行世界",到<星际穿越>的"超维空间",再到时下泛滥的穿越剧,却总未解开心中那团疑惑.或许只有时间的流逝才能给我解答,只怕光阴荏苒,时不我

DICOM:再次剖析fo-dicom中DicomService的自己定义事件绑定

题记: 趁着<从0到1>大火的热潮,最近又一次翻阅了一遍<从一到无穷大>(这样是不是感觉整个非负数轴就圆满了^_^). 尽管作为科普类书籍.可是里面的内容还是比較深奥,幸亏有作者精准的翻译,一番细细品味后宛如醍醐灌顶,心中透亮. 一直幻想有外星人.宇宙外生物的存在,从<源代码>描写叙述的"平行世界",到<星际穿越>的"超维空间",再到时下泛滥的穿越剧,却总未解开心中那团疑惑. 也许仅仅有时间的流逝才干给我解答,仅仅怕光

我(webabcd)的文章索引

[最后更新:2014.08.28] 重新想象 Windows Store Apps 系列文章 重新想象 Windows 8 Store Apps 系列文章 重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockOverflow 重新想象 Windows 8 Store Apps (2) - 控件之按钮控件: Button,