WebServiceHostFactory和WebServiceHost实例生命周期

时间:2011-10-12 20:40:51

标签: wcf wcf-rest

我想弄清楚WebServiceHost的生命周期。我认为它最初是每次调用/每个请求(即类似于为每个请求创建的ASP.Net页面)。我已经创建了一个Custom WebServiceHostFactory和WebServiceHost,但是注意到Factory和Host只创建了一次。

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实例,以及如何为每个服务请求创建一个新主机?

由于

1 个答案:

答案 0 :(得分:0)

为每个新请求创建主机没有意义 - 服务主机是服务器端的WCF运行时 - 将是

的代码片段
  • 收听传入的请求
  • 将这些请求分发给要处理的服务类

创建服务主机是一项非常昂贵和广泛的操作 - 在IIS中托管的情况下,这将在第一个请求进入时“按需”完成,但服务主机将保持一段时间并且被重用。

自托管时,您通常会在托管应用程序中创建一个服务主机实例,然后将该主机保持打开状态并激活,直到您要关闭服务为止。

每个请求在每个呼叫的基础上创建的是服务类实例,它实际处理进入的请求(但不是服务主机)。