提供自定义服务主机

本文关键字:主机 服务 自定义 | 更新日期: 2023-09-27 18:36:17

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

通过从服务主机类型派生,可以实现受保护的 方法ServiceHostBase.InitializeRuntime.

我的问题:是否可以向 IIS 提供自己的自定义服务主机类型?

提供自定义服务主机

如本文所示,您可以提供初始化服务主机的 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。在本文中,他们使用它来记录运行服务的虚拟目录。

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

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

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