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

C# WCF中实例化服务对象的默认行为是什么?,c#,wcf,C#,Wcf,我一直在为MS 70-513考试做准备,有了自定进度的培训包内容cd,还有一些练习测试 下面是这些测试中的一个问题,我恳请某人解释一下。正确的答案是A,但我不明白为什么D不是正确的答案 问题: WCF中实例化服务对象的默认行为是什么 A-每个实例都与一个用户定义的服务对象相关联 B-每个实例处理请求应用程序生命周期内的所有请求 C-为每个客户端请求创建一个新实例 D-为每个新的客户端会话创建一个新实例 先发制人,, Bruno我认为D也是正确的,因为默认情况下,InstanceContextMo

我一直在为MS 70-513考试做准备,有了自定进度的培训包内容cd,还有一些练习测试

下面是这些测试中的一个问题,我恳请某人解释一下。正确的答案是A,但我不明白为什么D不是正确的答案

问题:

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

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

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

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

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

先发制人,,
Bruno

我认为D也是正确的,因为默认情况下,
InstanceContextMode
被设置为
PerSession

我从msdn论坛上得到了答案,我想我相信这一点

引用答案:

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

这是一种迫害

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