C# 如何确保WCF服务始终适用于所有人?

C# 如何确保WCF服务始终适用于所有人?,c#,web-services,wcf,web-hosting,C#,Web Services,Wcf,Web Hosting,这是我第一次使用WCF服务,对此我有一些疑问。我有一个项目布局,如下所示: WCF项目 客户端项目(将WCF项目作为服务引用引用) 在添加服务引用时,我提供了在运行WCF项目时创建的Http://地址作为服务地址 每次运行客户端应用程序时,我都会运行WCF项目,以确保当客户端想要使用WCF服务时,WCF服务始终可用 我知道这不是一个可持续的设计,因为每次我想使用WCF服务时都要运行WCF项目是行不通的 而且 我在一个团队环境中,我还希望确保当我的队友从我那里获得最新的代码时,他们可以运

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

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

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

<>我如何实现这一点?

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

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

  • PerCall:为每个客户端请求创建一个新实例
  • PerSession:为每个新客户端创建一个新实例
  • 单个:单个实例处理所有客户端请求
每种方法都有优点和缺点,因此您需要为您的服务场景选择适当的行为

并发性
并发性是对InstanceContext中活动线程数量的控制。这是通过使用
ServiceBehaviorAttribute.ConcurrencyMode
ConcurrencyMode
枚举来控制的

  • 单线程:一次一个线程处理实例上下文中的消息
  • 多线程:每个服务实例可以有多个线程同时处理消息
  • 可重入:每个服务实例一次处理一条消息,但接受重入操作调用
节流
ServiceThrottlingBehavior
类公开可用于限制在应用程序级别创建的实例或会话数量的属性。使用此行为,您可以微调Windows通信基础(WCF)应用程序的性能。p>
      <serviceBehaviors>
        <behavior name="ThrottledService">
          <serviceThrottling 
             maxConcurrentCalls="n" 
             maxConcurrentInstances="n" 
             maxConcurrentSessions="n" />
        </behavior>
      </serviceBehaviors>

参考资料:

那么,为什么不在您的团队可以访问的生产服务器上运行IIS下的服务呢?目前是如何部署的?您是否尝试过将WCF应用程序作为服务而不是手动运行?WCF端是否从专用服务器运行?队友们,他们正在运行自己版本的WCF应用程序吗?您必须在IIS上或作为Windows服务托管WCF服务。有关详细信息,请参见此处@inquisitive\u mind:谢谢,这就是我需要的:)