Custom Hosting in IIS/WAS

常常需要与宿主实例进行交互。这对于使用自托管的方式是不可或缺的。当使用IIS或WAS时,不能直接访问宿主。为了克服这个障碍,WCF提供了一个宿主工厂。在.svc文件中使用Factory标签,使用此工厂,而不使用默认工厂:

<%@ ServiceHost
   Language   = "C#"
   Debug      = "true"
   CodeBehind = "~/App_Code/MyService.cs"
   Service    = "MyService"
   Factory    = "MyServiceFactory"
%>

当不显示使用.svc文件时,也可以在配置文件中指定宿主工厂:

“<serviceActivations>
   <add relativeAddress = "MyService.svc"
        service = "MyService"
        factory = "MyServiceFactory"
   />
</serviceActivations>”

摘录来自: Juval Löwy and Michael Montgomery. “Programming WCF Services”。 iBooks. 

自定义宿主工厂类必须继承自ServiceHostFactory类并重写虚方法CreateServiceHost():

public class ServiceHostFactory : ...
{
   protected virtual ServiceHost CreateServiceHost(Type serviceType,
                                                   Uri[] baseAddresses);
   //More members
}”

摘录来自: Juval Löwy and Michael Montgomery. “Programming WCF Services”。 iBooks. 

例如:

class MyServiceFactory : ServiceHostFactory
{
   protected override ServiceHost CreateServiceHost(Type serviceType,
                                                    Uri[] baseAddresses)
   {
      ServiceHost host = new ServiceHost(serviceType,baseAddresses);

      //Custom steps here

      return host;
   }
}”

摘录来自: Juval Löwy and Michael Montgomery. “Programming WCF Services”。 iBooks. 

CreateServiceHost()方法其实就相当于IIS或WAS托管服务的Main()方法,你可以以这样的目的来使用它。

尽管对于从 CreateServiceHost 返回的 ServiceHost 可以执行什么操作没有技术限制,但建议您尽可能使工厂实现简单化。如果有大量的自定义逻辑,最好将这些逻辑放入宿主内而不是工厂内,以便可以重用它们。

 完整示例:CustomServiceHost.zip

参考:

Juval Löwy and Michael Montgomery. “Programming WCF Services”

使用 ServiceHostFactory 扩展宿主(https://msdn.microsoft.com/zh-cn/library/aa702697.aspx)

 

原文地址:https://www.cnblogs.com/joe-yang/p/5154826.html