当前位置:  开发笔记 > 运维 > 正文

单个WCF服务中的多个基址

如何解决《单个WCF服务中的多个基址》经验,为你挑选了1个好方法。

我有一个环境,在同一台服务器上托管的多个站点将使用单个服务进行调用.例如:

http://domain1.com/Api/Service.svc

http://domain2.com/Api/Service.svc

Api应用程序已设置为映射到同一物理目录的每个站点中的虚拟目录,因此源仅位于一个位置.问题是WCF不喜欢为其服务端点提供多个基地址.为了使服务工作,我不得不添加一个基地址前缀过滤器:

      
          
    
    
  

但是这只适用于域1,因为你只允许一个baseAddressPrefixFilter(他们不应该把它baseAddressPrefixFilter 小号,如果你只允许一个).我尝试构建一个自定义的ServiceHostFactory来绕过它,但是在激活过程中调用ServiceHostFactory之前我遇到了过滤器问题.

关于如何让单个服务在这样的2个域上工作的任何想法?



1> Steve..:

好的,将整个URL放在端点地址中是我没想过的,所以这让我到了某个地方.使用自定义ServiceHostFactory后,适用于domain1,但不适用于domain2.我收到了一条我以前没见过的新错误消息:

"没有协议绑定与给定地址匹配' http://domain2.com/Api/Poll.svc/soap '.协议绑定在IIS或WAS配置中的站点级别配置."

更新:

好吧,我想通了(最后!).我可以将主机节点添加到服务定义中,并避免在每个端点中使用绝对URL.我还删除了BaseAddressPrefixFilter,但在解决方案中保留了自定义ServiceHostFactory.

  
    
      
        
        
      
    
    
            
  

我担心我将不得不为每个绑定编写一个端点,这可能需要管理很多额外的配置.这个解决方案很棒,因为我不需要这样做,它更简洁一些.

作为参考,这是我的ServiceHostFactory类.它很简单,但它是必需的.一旦你有了这个,你还必须修改.svc文件的标记,以包括Factory:Factory ="Api.ServiceHostFactory"

   public class MyServiceHostFactory : System.ServiceModel.Activation.ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {                        
        ServiceHost host;

        host = new ServiceHost(serviceType, baseAddresses[0]);

        return host;
    }
}

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有