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

Kyl*_*yle 4 concurrency wcf self-hosting servicehost

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

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

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

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

ale*_*dej 5

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

WebServiceHost - > WindowsService通信.两种方法映入脑海:WCF支持一个名为"众所周知的实例"模式,你通过你的服务的一个实例,以ServiceHost的构造函数,而不是传递一个类型,并让WCF实例为你的.使用此模式,您可以使用对托管代码的引用来预配置您的服务实例(或者您也可以使用事件).如果您想保留实例化灵活性,另一种方法是在您的托管代码中使用WCF服务可以回调的静态方法.

多个WebServiceHosts或Contracts - 拥有多个ServiceHost实例确实没有优势.另见这个SO线程:几个服务主机有什么好处?一个ServiceHost是否支持一个端点上的多个同时连接?.

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