2013-10-22 135 views
0

我想爲我的IIS託管的服務有一些初始化代碼。我已閱讀this article,它說(變種之一):提供自定義ServiceHost

通過從ServiceHost的派生型,您可以實現保護 方法ServiceHostBase.InitializeRuntime。

我的問題:我可以提供自己的自定義ServiceHost類型到IIS嗎?

回答

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

另一種方法是通過Web.config文件中的無文件激活。在你<system.serviceModel>部分,添加以下內容:

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

這使您可以在託管IIS服務,而無需物理.svc文件。但是,這是WCF 4.0+功能。

+0

它實際上必須在下請參閱https://msdn.microsoft.com/en-us/library/ee816902(v=vs.110).aspx –