代码之家  ›  专栏  ›  技术社区  ›  Jason Stevenson

如何平衡IIS6托管的WCF服务?

  •  7
  • Jason Stevenson  · 技术社区  · 17 年前

    我们使用bigip在两个IIS服务器之间进行负载平衡。我们最近在这两个WindowsServer2003r2服务器上部署了一个由IIS6承载的WCF服务。

    每台服务器都配置了两个主机头:一个用于负载平衡器地址,另一个仅指向该服务器的主机头。这样我们就可以引用负载平衡组中的特定服务器进行调试。

    所以当我们运行时,我们立即得到了错误:

    此集合已包含带有方案http的地址。此集合中每个方案最多只能有一个地址。 参数名称:item

    我做了一些研究,我们可以实现一个过滤器来告诉它忽略其中一个主机,但是我们不能从那个地址访问服务器。

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

    在这种情况下,什么是最好的解决方案,允许我们通过 http://domain.com/service.svc http://server1.domain.com/service.svc ?

    如果我们像一些网站建议的那样创建自己的服务工厂,有人对此有任何示例代码吗?

    任何帮助都非常感谢。

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

    谢谢您。

    3 回复  |  直到 17 年前
        1
  •  1
  •   CPU_BUSY    17 年前

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

    为每个虚拟机创建一个池,其中只包含特定的服务器——这样就不会有实际的负载平衡并以这种方式访问它。如果您缺少外部IP,您仍然可以使用与生产域名相同的IP,只需使用irule将流量引导到适当的池。

    希望这有帮助

        2
  •  0
  •   Darren Kopp    17 年前

    它使用的URL基于IIS中的绑定。网站是否有多个绑定?如果是,或者是多个站点使用的WCF服务?如果是,那么你就是索尔·阿法克。我们遇到了这个问题。基本上,HTTP只能有一个IIS绑定,否则它会爆炸。

    此外,以下是有关 implementing a ServiceHostFactory . 如果您的WCF服务可能只能通过1个地址访问(不幸的是,对于我们来说,这是不可能的),这将起作用。

        3
  •  0
  •   Rob    17 年前

    当您需要测试特定的机器时,您可以“绕过”负载平衡,并通过编辑从SO测试的机器上的“hosts”文件,确保将正确的主机头发送到keeep wcf happy,例如:

    10.0.0.11到10.0.0.16是集群“cluster.mycompany.local”中的六个主机,负载平衡IP地址为10.0.0.10。在测试时,可以在machines hosts文件中添加一行“10.0.0.13 cluster.mycompany.local”,以便能够直接命中集群中的第三台计算机。

    推荐文章