0

我想为我的 IIS 托管服务提供一些初始化代码。我读过这篇文章,它说(变体之一):

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

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

4

2 回答 2

3

正如文章建议的那样,您可以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如果你愿意,你也可以覆盖。在文章中,他们使用它来记录运行服务的虚拟目录。

于 2013-10-22T06:11:22.470 回答
1

另一种方法是通过 Web.config 文件中的无文件激活。在您的<system.serviceModel>部分中,添加以下内容:

<serviceActivations>
  <add relativeAddress="Service.svc" 
       service="SomeNamespace.Service1" 
       factory="SomeNamespace.MyServiceHostFactory"/>
</serviceActivations>

这使您能够在 IIS 中托管服务,而无需物理 .svc 文件。但是,这是 WCF 4.0+ 的功能。

于 2013-10-22T06:47:37.573 回答