几个服务主机有什么好处?一个ServiceHost是否支持一个端点上的多个同时连接?

fla*_*nik 7 performance wcf self-hosting servicehost

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

除了安全原因,除了隔离外,多个服务主机是否会提供任何好处?

一个servicehost可以同时在一个端点上提供多个连接吗?

mar*_*c_s 11

没有任何好处或选择,实际上 - 一个ServiceHost(该类的实例)可以只托管一个服务,并且对于每个服务,您需要一个单独的服务主机.这是一个1:1的映射 - 总是没有选择.

但是,当然,您的Windows NT服务或控制台应用程序可以ServiceHost同时激活多个对象.如果你有一组逻辑上属于一起并且不能彼此真正存在的服务,这可能很有用 - 其中一个服务启动而另一个服务没有启动是没有意义的.

是的,服务主机可以托管一个公开多个端点的服务,多个客户端可以同时连接这些单独的端点,没问题.WCF运行时将启动许多工作线程来处理传入的请求(您可以限制具有ServiceThrottling行为的那些)彼此独立.


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

<behaviors>
    <serviceBehaviors>
        <behavior name="serviceThrottled">
            <serviceThrottling
                maxConcurrentCalls="16"
                maxConcurrentInstances="26"
                maxConcurrentSessions="10"/>
        </behavior>
    </serviceBehaviors>
</behaviors>
Run Code Online (Sandbox Code Playgroud)

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

<service name="YourService" behaviorConfiguration="serviceThrottled">
  .....
</service>
Run Code Online (Sandbox Code Playgroud)

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

  • MaxConcurrentCalls(默认值= 16)[Per-message]可以主动处理的最大消息数.

  • MaxConcurrentInstances(默认值= 26)服务中可以一次执行的最大InstanceContext对象数.对于每会话服务,这等于最大会话数,对于每个呼叫服务,它是最大并发呼叫数,对于单身人士来说,这是毫无意义的.

  • MaxConcurrentSessions(默认值= 10)[每个通道]服务一次可以接受的最大会话数.只有基于会话的绑定(wsHttp或netTcp)才能发挥作用

肯定还要查看Dan Rigsby关于该主题的优秀博客文章.