提供自定义ServiceHost

时间:2013-10-22 05:50:55

标签: c# wcf iis

我想为我的IIS托管服务提供一些初始化代码。我读过this article,它说(其中一个变种):

  

通过派生ServiceHost类型,您可以实现受保护的   方法ServiceHostBase.InitializeRuntime。

我的问题:我可以向IIS提供自己的自定义ServiceHost类型吗?

2 个答案:

答案 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+功能。