如何确保WCF服务始终可供所有人使用?

时间:2015-03-18 23:28:19

标签: c# web-services wcf web-hosting

这是我第一次使用WCF服务,我对此有一些疑问。我的项目布局如下:

  • WCF项目
  • 客户端项目(引用WCF项目作为服务参考)
    • 我提供了在添加服务引用时运行WCF项目作为服务地址时创建的Http://地址。
    • 每次运行客户端应用程序时,我还运行WCF项目以确保在客户端想要使用它时始终可以使用WCF服务
    • 我知道这不是一个可持续的设计,因为每次我想要使用WCF服务运行WCF项目都不会有用。

另外,

  • 我在团队环境中,我也想确保当我的队友从我那里获得最新代码时,他们可以运行客户端应用程序,而不必担心WCF应用程序

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

除了审查有关WCF服务托管的一般信息之外,作为新的WCF服务开发人员,您还需要考虑以下服务方面:

<强>实例化
实例化行为(使用ServiceBehaviorAttribute.InstanceContextMode属性设置)控制如何创建InstanceContext以响应传入消息。

  • PerCall:为每个客户端请求创建一个新实例
  • PerSession:为每个新客户创建一个新实例
  • 单个:单个实例处理所有客户端请求

每个都有利弊,因此您需要为您的服务方案选择正确的行为。

<强>并发
并发性是任何时候控制InstanceContext中活动的线程数。这是通过ServiceBehaviorAttribute.ConcurrencyMode使用ConcurrencyMode枚举来控制的。

  • 单一:一次处理实例上下文中的消息
  • Multiple:每个服务实例可以有多个线程同时处理消息。
  • 可重入:每个服务实例一次处理一条消息,但接受可重入的操作调用。

<强>节流
ServiceThrottlingBehavior类公开了可用于限制在应用程序级别创建的实例或会话数的属性。使用此行为,您可以微调Windows Communication Foundation(WCF)应用程序的性能。

      <serviceBehaviors>
        <behavior name="ThrottledService">
          <serviceThrottling 
             maxConcurrentCalls="n" 
             maxConcurrentInstances="n" 
             maxConcurrentSessions="n" />
        </behavior>
      </serviceBehaviors>

参考文献: https://msdn.microsoft.com/en-us/library/ms731193%28v=vs.110%29.aspx https://msdn.microsoft.com/en-us/library/vstudio/ms735114%28v=vs.100%29.aspx