Wcf 几个servicehosts的好处是什么?一个ServiceHost是否支持一个端点上的多个同时连接?

Wcf 几个servicehosts的好处是什么?一个ServiceHost是否支持一个端点上的多个同时连接?,wcf,performance,servicehost,self-hosting,Wcf,Performance,Servicehost,Self Hosting,我正在考虑自我托管我的WCF服务,而不是使用IIS。对我来说,一个大问题是我是否需要像IIS那样实例化多个servicehosts,或者一个就足够了 多个servicehosts是否除了安全原因之外,对隔离有任何好处 一个servicehost能否同时为一个端点上的多个连接提供服务?没有任何好处或选择,实际上-一个servicehost(该类的实例)可以承载一个服务,并且对于每个服务,您需要一个单独的服务主机。这是一个1:1的映射-始终没有选择 当然,您的Windows NT服务或控制台应用程序

我正在考虑自我托管我的WCF服务,而不是使用IIS。对我来说,一个大问题是我是否需要像IIS那样实例化多个servicehosts,或者一个就足够了

多个servicehosts是否除了安全原因之外,对隔离有任何好处


一个servicehost能否同时为一个端点上的多个连接提供服务?

没有任何好处或选择,实际上-一个
servicehost(该类的实例)可以承载一个服务,并且对于每个服务,您需要一个单独的服务主机。这是一个1:1的映射-始终没有选择

当然,您的Windows NT服务或控制台应用程序可以同时激活多个
ServiceHost
对象。如果您有一组逻辑上属于一起的服务,并且如果没有其他服务就无法真正存在,那么这将非常有用,因为启动其中一个服务和不启动另一个服务是没有意义的

是的,一个服务主机可以承载一个公开多个端点的服务,并且多个客户端可以同时连接到这些单独的端点上,没有问题。WCF运行时将启动大量工作线程,以独立地处理传入请求(您可以限制具有ServiceThrottling行为的请求)


要设置和控制并发调用和请求的数量,您需要查看服务器端的ServiceThrottling行为

<behaviors>
    <serviceBehaviors>
        <behavior name="serviceThrottled">
            <serviceThrottling
                maxConcurrentCalls="16"
                maxConcurrentInstances="26"
                maxConcurrentSessions="10"/>
        </behavior>
    </serviceBehaviors>
</behaviors>

当然,您需要在服务声明中引用该服务行为配置:

<service name="YourService" behaviorConfiguration="serviceThrottled">
  .....
</service>

.....
这些是默认值。解释如下(摘自Dan Rigsby的博客文章,简称):

  • MaxConcurrentCalls(默认值=16)[每条消息]可以主动处理的最大消息数

  • MaxConcurrentInstances(默认值=26)服务中一次可以执行的InstanceContext对象的最大数量。对于每个会话服务,这等于最大会话数,对于每个调用服务,这是最大并发调用数,对于单例,这是毫无意义的

  • MaxConcurrentSessions(默认值=10)[每个通道]服务一次可以接受的最大会话数。仅适用于基于会话的绑定(wsHttp或netTcp)


当然也可以看看这个主题。

不,我感兴趣的情况是,我有一个逻辑服务和一个端点,但我需要多个客户端同时连接到该服务(尽管使用一种端点)。@flashnik:这绝对没有问题。默认情况下,服务上可能有10-16个并发调用,无论它们来自哪个端点,您能解释一下我如何改变这个数量吗?