如何负载平衡IIS 6托管的WCF服务?

时间:2020-03-06 14:36:55  来源:igfitidea点击:

我们使用BigIP在两个IIS服务器之间进行负载平衡。我们最近将IIS 6托管的WCF服务部署到了这两台Windows Server 2003R2服务器上。

每个服务器都配置有两个主机头:一个用于负载均衡器地址,然后一个第二个主机头,仅指向该服务器。这样,我们可以引用负载均衡组中的特定服务器进行调试。

因此,当我们运行时,我们立即得到错误:

This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection. 
  Parameter name: item

我做了一些研究,我们可以实现一个过滤器来告诉它忽略主机之一,但是然后我们无法从该地址访问服务器。

<serviceHostingEnvironment>
    <baseAddressPrefixFilters>
        <add prefix="http://domain.com:80"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>

在这种情况下最好的解决方案是什么,它使我们能够通过http://domain.com/service.svc和http://server1.domain.com/service.svc来访问WCF服务?

如果我们应该像某些站点建议的那样创建自己的ServiceFactory,那么有人在此有任何示例代码吗?

任何帮助深表感谢。

编辑:如果可能的话,我们将需要能够从两个地址中的任何一个访问WCF服务。

谢谢你。

解决方案

它使用的URL基于IIS中的绑定。网站是否具有多个绑定?如果可以,还是多个站点使用了WCF服务?如果是,那么我们就是SOL AFAIK。我们遇到了这个问题。基本上,HTTP只能有一个IIS绑定,否则会炸弹。

另外,这里是有关实现ServiceHostFactory的信息。如果WCF服务只能通过1个地址访问(这对我们来说是不可能的),则该方法将起作用。

当我们需要测试特定计算机时,可以通过在要测试的计算机上编辑"主机"文件来"绕过"负载平衡,并确保发送正确的主机头以使WCF保持快乐,例如:

10.0.0.11至10.0.0.16是群集" cluster.mycompany.local"中的六个主机,其负载平衡IP地址为10.0.0.10. 在测试时,我们可以在机器主机文件中添加一行" 10.0.0.13 cluster.mycompany.local",以便能够直接访问集群中的第三台机器。

在bigIP上创建2个新的虚拟服务器
http://server1.domain.com/
http://server2.domain.com/

为其中仅包含特定服务器的每个VS创建一个池,因此将没有实际的负载平衡并以这种方式访问​​它。如果我们缺少外部IP,则仍可以使用与生产域名相同的IP,并使用一个临时变量将流量定向到适当的池

希望这可以帮助