我想爲我的IIS託管的服務有一些初始化代碼。我已閱讀this article,它說(變種之一):提供自定義ServiceHost
通過從ServiceHost的派生型,您可以實現保護 方法ServiceHostBase.InitializeRuntime。
我的問題:我可以提供自己的自定義ServiceHost類型到IIS嗎?
我想爲我的IIS託管的服務有一些初始化代碼。我已閱讀this article,它說(變種之一):提供自定義ServiceHost
通過從ServiceHost的派生型,您可以實現保護 方法ServiceHostBase.InitializeRuntime。
我的問題:我可以提供自己的自定義ServiceHost類型到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+功能。
它實際上必須在下請參閱https://msdn.microsoft.com/en-us/library/ee816902(v=vs.110).aspx –