我想弄清楚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实例,以及如何为每个服务请求创建一个新主机?
由于
答案 0 :(得分:0)
为每个新请求创建主机没有意义 - 服务主机是服务器端的WCF运行时 - 将是
的代码片段创建服务主机是一项非常昂贵和广泛的操作 - 在IIS中托管的情况下,这将在第一个请求进入时“按需”完成,但服务主机将保持一段时间并且被重用。
自托管时,您通常会在托管应用程序中创建一个服务主机实例,然后将该主机保持打开状态并激活,直到您要关闭服务为止。
每个请求在每个呼叫的基础上创建的是服务类实例,它实际处理进入的请求(但不是服务主机)。