You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.6.1中WCF ServiceBehavior的生命周期及实例化时机问询

.NET 4.6.1中WCF ServiceBehavior的生命周期说明

你提供的服务行为配置如下:

<behaviors>
  <serviceBehaviors>
    <behavior name="**<<removed>>.ServiceBehavior**">
      <serviceThrottling maxConcurrentCalls="300" maxConcurrentSessions="300" maxConcurrentInstances="300" />
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
      <serviceCredentials>
       
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

针对你的问题,分三部分明确说明:

1. ServiceBehaviorAttribute的实例化时机

你提到的ServiceBehavior类实际是指标记在服务实现类上的ServiceBehaviorAttribute特性,它的实例是在WCF宿主首次加载服务类型时创建,并且在整个服务宿主运行期间只会存在一个实例。配置文件中的<serviceBehaviors>节点是对该特性的配置补充,WCF会在加载服务时将配置值绑定到特性实例上,后续不会重复创建。

2. 服务实例的生命周期(核心疑问点)

你真正关心的“每次调用是否实例化”,其实是指服务类的实例,这由ServiceBehaviorAttribute的InstanceContextMode属性决定(默认值为InstanceContextMode.PerSession):

  • PerCall:每次客户端调用服务方法时,都会创建一个新的服务实例,调用完成后立即回收。
  • PerSession:每个客户端会话(如TCP/WS绑定默认启用会话)对应一个服务实例,会话结束后实例被回收。
  • Single:整个服务宿主生命周期内只存在一个服务实例,所有客户端调用共享该实例(需注意线程安全问题)。

3. 与serviceThrottling配置的关联

你配置中的<serviceThrottling>节点用于限制并发资源:

  • maxConcurrentCalls:同时处理的调用数量上限
  • maxConcurrentSessions:同时存在的会话数量上限
  • maxConcurrentInstances:同时存在的服务实例数量上限
    这些参数会影响服务实例的创建和回收节奏,但不会改变InstanceContextMode定义的生命周期规则。

内容的提问来源于stack exchange,提问作者Creamer77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:35:10