在WCF中实例化服务对象的默认行为是什么?

时间:2011-07-14 16:59:15

标签: c# wcf

我一直在准备MS 70-513考试,并且有自学进度训练套件内容cd,有一些练习测试。

以下是我要求有人解释的那些测试的一个问题。正确标记的答案是A,但我不明白为什么D不正确。

问题:

在WCF中实例化服务对象的默认行为是什么?

A - 每个实例都与一个用户定义的服务对象相关联。

B - 每个实例处理请求应用程序生命周期的所有请求。

C - 为每个客户端请求创建一个新实例。

D - 为每个新客户会话创建一个新实例。

提前Thakns, 布鲁诺

3 个答案:

答案 0 :(得分:3)

我从msdn论坛得到了答案,我想我已经确信了。

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/2e35729f-603a-4a52-a3b7-920c9f3a8100/

引用答案:

  

这是一个棘手的问题 - 我认为D不正确的原因是   并非每个客户都创建会话。例如basicHttpBinding   不支持会议。所以,如果你不总是有一个会话--D不是   总是如此。但是,A总是如此(除非你创建自己的   自定义行为)因为每个InstanceContext对象都包装一个   用户定义的服务对象(根据您的对象创建的对象)   服务类型)

答案 1 :(得分:2)

它的PerSession

http://msdn.microsoft.com/en-us/library/ms733040.aspx

  

如果在WCF中使用默认的实例化行为,则WCF客户端对象之间的所有调用都由同一服务实例处理。因此,在应用程序级别,您可以将会话视为启用类似于本地调用行为的应用程序行为。例如,在创建本地对象时:   调用构造函数。   对WCF客户端对象引用的所有后续调用都由同一对象实例处理。   销毁对象引用时会调用析构函数。   只要使用默认服务实例行为,会话就会在客户端和服务之间启用类似的行为。如果服务合同需要或支持会话,则可以通过设置IsInitiating和IsTerminating属性将一个或多个合同操作标记为启动或终止会话。

答案 2 :(得分:0)

我认为D也是正确的,因为InstanceContextMode默认设置为PerSessionlink)。