我想为我的 IIS 托管服务提供一些初始化代码。我读过这篇文章,它说(变体之一):
通过从 ServiceHost 类型派生,您可以实现受保护的方法 ServiceHostBase.InitializeRuntime。
我的问题:我可以向 IIS 提供我自己的自定义 ServiceHost 类型吗?
正如文章建议的那样,您可以ServiceHostFactory
向 IIS 提供一个初始化您的服务主机的方法。
首先,在文件中定义工厂.svc
:
<%@ServiceHost Language="C#" Factory="SomeNamespace.MyServiceHostFactory" %>
然后创建工厂和主机类:
class MyServiceHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new MyServiceHost(serviceType, baseAddresses);
}
}
class MyServiceHost : ServiceHost
{
public MyServiceHost()
{
// initialize, add endpoints, behaviors, etc.
}
}
InitializeRuntime
如果你愿意,你也可以覆盖。在文章中,他们使用它来记录运行服务的虚拟目录。
另一种方法是通过 Web.config 文件中的无文件激活。在您的<system.serviceModel>
部分中,添加以下内容:
<serviceActivations>
<add relativeAddress="Service.svc"
service="SomeNamespace.Service1"
factory="SomeNamespace.MyServiceHostFactory"/>
</serviceActivations>
这使您能够在 IIS 中托管服务,而无需物理 .svc 文件。但是,这是 WCF 4.0+ 的功能。