我想为我的IIS托管服务提供一些初始化代码。我读过this article,它说(其中一个变种):
通过派生ServiceHost类型,您可以实现受保护的 方法ServiceHostBase.InitializeRuntime。
我的问题:我可以向IIS提供自己的自定义ServiceHost类型吗?
答案 0 :(得分:3)
如文章所示,您可以向IIS提供初始化服务主机的ServiceHostFactory
。
首先,在.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
。在文章中,他们使用它来记录运行服务的虚拟目录。
答案 1 :(得分:1)
另一种方法是通过Web.config文件中的无文件激活。在<system.serviceModel>
部分中,添加以下内容:
<serviceActivations>
<add relativeAddress="Service.svc"
service="SomeNamespace.Service1"
factory="SomeNamespace.MyServiceHostFactory"/>
</serviceActivations>
这使您可以在IIS中托管服务,而无需具有物理.svc文件。但是,这是一个WCF 4.0+功能。