【问题标题】:How can you load balance an IIS 6 hosted WCF Service?如何对 IIS 6 托管的 WCF 服务进行负载平衡?
【发布时间】:2010-09-12 11:15:17
【问题描述】:

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

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

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

此集合已包含一个采用 http 方案的地址。此集合中的每个方案最多可以有一个地址。 参数名称:项目

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

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

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

如果我们应该像某些网站建议的那样创建自己的 ServiceFactory,有没有人有这方面的示例代码?

非常感谢任何帮助。

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

谢谢。

【问题讨论】:

    标签: wcf iis-6 hostheaders


    【解决方案1】:

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

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

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

      另外,这里是implementing a ServiceHostFactory 的信息。如果您的 WCF 服务可能只能通过 1 个地址访问,这将起作用(不幸的是,这对我们来说是不可能的)。

      【讨论】:

      • 是的,正如我所说,它有更多的 one 绑定,“每台服务器都配置有两个主机头:一个用于负载平衡器地址,第二个主机头仅指向该服务器。”两者都使用 HTTP 协议。
      【解决方案3】:

      当您需要测试特定机器时,您可以“绕过”负载平衡并确保发送正确的主机头以通过编辑您正在测试的机器上的“主机”文件来保持 WCF 满意,因此,例如:

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

      【讨论】:

      • 是的,我开始认为主机标头方式不适用于 WCF。如果我没有收到任何其他回复,我会接受。
      猜你喜欢
      • 1970-01-01
      • 2019-12-30
      • 2012-01-03
      • 1970-01-01
      • 2013-04-26
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多