我正在考虑自行托管我的 WCF 服务,而不是使用 IIS。对我来说,一个大问题是我是否需要像 IIS 那样实例化多个服务主机,或者一个就足够了。
除了由于隔离而导致的安全原因之外,多个服务主机还有什么好处吗?
一台服务主机可以同时为一个端点上的多个连接提供服务吗?
没有任何好处或选择,真的 - 一个ServiceHost
(该类的实例)只能托管一个服务,并且对于每个服务,您需要一个单独的服务主机。这是 1:1 的映射 - 总是如此,别无选择。
当然,您的 Windows NT 服务或控制台应用程序可以有多个ServiceHost
对象同时活动。如果您有一组逻辑上属于在一起的服务,并且没有彼此就无法真正存在,那么这会很有用 - 其中一个服务启动而另一个服务未启动是没有意义的。
是的,服务主机可以托管公开多个端点的服务,并且多个客户端可以同时连接这些单独的端点,没有问题。 WCF 运行时将启动多个工作线程来处理传入的请求(您可以使用 ServiceThrotdling 行为限制这些请求),彼此独立。
要设置和控制并发调用和请求的数量,您需要查看服务器端的 ServiceThrotdling 行为。
<behaviors>
<serviceBehaviors>
<behavior name="serviceThrottled">
<serviceThrottling
maxConcurrentCalls="16"
maxConcurrentInstances="26"
maxConcurrentSessions="10"/>
</behavior>
</serviceBehaviors>
</behaviors>
当然,您需要在服务声明中引用该服务行为配置:
<service name="YourService" behaviorConfiguration="serviceThrottled">
.....
</service>
这些是默认值。解释如下(摘自 Dan Rigsby 的博文,已缩短):
最大并发调用数(默认 = 16) [每条消息] 可以主动处理的最大消息数。
最大并发实例数(默认值 = 26)服务中可以同时执行的 InstanceContext 对象的最大数量。对于每会话服务,这等于最大会话数,对于每调用服务,它是最大并发调用数,对于单例来说,这是没有意义的。
最大并发会话数(默认 = 10) [每通道] 服务一次可以接受的最大会话数。仅适用于基于会话的绑定(wsHttp 或 netTcp)
绝对也检查一下Dan Rigsby 的精彩博客文章 http://www.danrigsby.com/blog/index.php/2008/02/20/how-to-throttle-a-wcf-service-help-prevent-dos-attacks-and-maintain-wcf-scalability/关于这个话题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)