我正在试图找出WebServiceHost的生命周期。我认为它最初将是每个调用/每个请求(即,类似于为每个请求创建一个ASP.Net页面)。我已经创建了一个自定义WebServiceHostFactory和WebServiceHost,但注意到工厂和主机只创建了一次。
CustomWebServiceHostFactory覆盖CreateServiceHost,CustomWebServiceHost覆盖OnOpening,以提供一些诊断信息来跟踪生命周期。
我的服务文件
[ServiceContract]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public partial class ProductService
{
... // code
}我的Global.asax文件
private void RegisterRoutes()
{
RouteTable.Routes.Add(new ServiceRoute("products", new CustomServiceHostFactory(), typeof(ProductService)));
}有谁能解释为什么两个请求会访问同一个CustomWebServiceHost实例,以及我将如何为每个服务请求创建一个新的主机?
谢谢
发布于 2011-10-12 20:43:53
为每个新请求创建主机是没有意义的--服务主机是服务器端的WCF运行时--这段代码将
侦听传入的requests
创建服务主机是一个非常昂贵和广泛的操作--在IIS中托管的情况下,这将在第一个请求传入时“按需”完成,但是服务主机将在给定的时间内停留并被重用。
当自我托管时,通常在托管应用程序中创建一个服务主机实例,然后将该主机保持打开并处于活动状态,直到要关闭服务为止。
为每个请求创建的是服务类实例,它实际上处理传入的请求(而不是服务主机)。
https://stackoverflow.com/questions/7746293
复制相似问题