自托管WCF ServiceHost / WebServiceHost并发/性能设计选项(.NET 3.5)

时间:2010-05-12 23:42:26

标签: wcf concurrency servicehost self-hosting

因此,我将通过自托管(在WindowsService中)WebServiceHost提供一些功能(不确定如何使用ServiceHost处理HTTP GET / POST),其中一个可能被称为大量时间。此功能还将依赖于appdomain中的连接(由WindowsService托管,因此它可以在多个请求中保持活动状态。)

我有以下疑虑,非常感谢任何输入/想法/意见:

  • 并发访问 - WebServiceHost如何处理大量并发请求。它们是否按顺序排队并按顺序处理,还是自动创建合同的新实例?
  • WebServiceHost - > WindowsService通信 - 我需要从WebServiceHost到托管WindowsService的某种形式的通信,例如请求新会话(如果不存在)。也许实现一个使用WindowsService订阅的事件扩展WebServiceHost的类...(除非有其他方法可以在发出请求时在WindowsService中引发事件...)
  • 多个WebServiceHosts或Contracts - 它是否会在不同的线程中运行多个WebServiceHost实例(每个端点可能有一个?)会给予任何实际的性能提升 - 更好地理解第一点可能会有所帮助
  • WSDL - 我不确定为什么(可能只是需要做更多的阅读),但我不确定如何让WebServiceHost基本端点响应WDSL文档来描述可用的合同。不需要,因为所有操作都将通过GET请求完成,这些操作不会发生变化,但是很高兴...

这就是目前的情况;)我一直在WCF上阅读很多,并希望我很久以前就已经进入了它,但绝对还在学习。

1 个答案:

答案 0 :(得分:5)

并发访问 - 您可以使用ServiceBehaviorAttribute设置此功能。有许多选项 - 您可以让WCF为每个传入请求创建服务类的新实例,或者您可以让单个实例处理所有请求。此外,您可以告诉WCF是否连续或同时传递请求。

WebServiceHost - > WindowsService通信。我想到了两种方法:WCF支持一种名为“众所周知的实例”的模式,您可以将服务实例传递给ServiceHost构造函数,而不是传递Type并让WCF为您实例化它。使用此模式,您可以使用对托管代码的引用来预配置您的服务实例(或者您也可以使用事件)。如果你想保持实例化的灵活性,另一种选择是在你的托管代码中有一个静态方法,WCF服务可以回调它。

多个WebServiceHosts或Contracts - 拥有多个ServiceHost实例确实没有优势。另见SO线程:What are the benefits for several servicehosts? Does one ServiceHost support several simultaneous connections on one endpoint?

WSDL - 虽然您可以通过启用元数据发布(http://msdn.microsoft.com/en-us/library/ms788760.aspx)来启用WSDL,但WSDL支持适用于基于SOAP的服务,而不是纯HTTP GET / POST。为您的服务自动生成的WSDL可能不会非常有用。