【问题标题】:Default InstanceContextMode in WCFWCF 中的默认 InstanceContextMode
【发布时间】:2013-02-07 11:39:42
【问题描述】:

在WCF中,如果我们不具体指定ServiceBehaviour的InstanceContextMode,那么下面的默认模式是什么?

  1. 每次调用
  2. 每会话
  3. 单人

谢谢。

【问题讨论】:

标签: .net wcf c#-4.0 servicebehavior


【解决方案1】:

上面提到的documentation默认值是PerSession。但我相信这也取决于使用的绑定(是否绑定支持会话),比如 basichttpbinding 使用 PerCall

【讨论】:

    【解决方案2】:

    简单的回答是默认的Instancing模式是PerSession

    提供:

    这是一个 Microsoft 提供的示例,默认在代码中强制配置。 Default behavior sample

    [ServiceBehavior(  
    AutomaticSessionShutdown=true,  
    ConcurrencyMode=ConcurrencyMode.Single,  
    InstanceContextMode=InstanceContextMode.PerSession,  
    IncludeExceptionDetailInFaults=false,  
    UseSynchronizationContext=true,  
    ValidateMustUnderstand=true)]
    public class CalculatorService : ICalculator { ... }
    

    我发现在这篇 Microsoft 文章 (Using Sessions) 中阅读了有关会话的内容,这对于理解 Sessions 如何打开和关闭以及这与实例化和并发之间的关系特别有启发。

    默认情况下,WCF 客户端将创建一个新会话,该会话将创建一个服务器实例,会话期间的所有调用都称为会话,并由具有单个线程的服务器的单个实例(实例化)提供服务(并发)专用于该会话/客户端/对话。

    如果您使用 WCF 中的默认实例化行为,则 WCF 客户端对象之间的所有调用都由同一个服务实例处理。因此,在应用程序级别,您可以将会话视为启用类似于本地调用行为的应用程序行为。例如,当您创建本地对象时:

    一个构造函数被调用。

    对 WCF 客户端对象引用的所有后续调用都由同一个对象实例处理。

    当对象引用被销毁时调用析构函数。

    只要使用默认的服务实例行为,会话就会在客户端和服务之间启用类似的行为。

    希望这对某人有所帮助,因为我花了一段时间才找到答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-05
      • 2011-10-30
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多