摘要:当主机是 Windows 服务时,如何管理对 Web 服务的并行请求?
我知道 SOAP Web 服务可以托管在 IIS、控制台应用程序或 WinForms 应用程序中。由于某种原因,这些主机对我不可用,我必须在 Windows 服务中托管我的 Web 服务。
在 IIS 的情况下,我读到 Web 服务器本身管理多个并行请求并为它们分配不同的线程。我需要了解这种多线程在 Windows 服务的情况下是如何工作的。哪个组件负责它?它是基于池的还是什么?我如何以及在哪里可以配置池大小等?
摘要:当主机是 Windows 服务时,如何管理对 Web 服务的并行请求?
我知道 SOAP Web 服务可以托管在 IIS、控制台应用程序或 WinForms 应用程序中。由于某种原因,这些主机对我不可用,我必须在 Windows 服务中托管我的 Web 服务。
在 IIS 的情况下,我读到 Web 服务器本身管理多个并行请求并为它们分配不同的线程。我需要了解这种多线程在 Windows 服务的情况下是如何工作的。哪个组件负责它?它是基于池的还是什么?我如何以及在哪里可以配置池大小等?
术语“网络服务”是一个广义的。请查看Web 服务与 WCF 服务进行说明。如果您的问题是关于基于 WCF 的服务,这里有一篇关于并发的好文章:http: //www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-and。
要回答您的问题:
System.ServiceModel.ServiceHost
负责托管服务。应用配置或代码中的 ServiceBehavior 属性可用于设置所需的行为,如下所示:
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)]
var yourServiceHost = new ServiceHost(yourService);
线程是从线程池中创建的。System.ServiceModel.Description.ServiceThrottlingBehavior
您可以控制与应用程序配置一起使用或在应用程序配置中使用的线程数:
<serviceBehaviors>
<behavior name="serviceBehavior">
<serviceThrottling maxConcurrentInstances="<your_max_instances>" maxConcurrentSessions="<your_max_concurrent_sessions>" />
</behavior>
</serviceBehaviors>