2

我在负载平衡方案中托管了 WCF 服务。该服务使用 IIS 托管。有两台服务器是负载平衡的。

以下是end points服务器中的。 https://labA.myCompany.com:44330/MyService/InternalService.svc https://labB.myCompany.com:44330/MyService/InternalService.svc

我保持host base address不变

baseAddress=" https://test-LoadBalanced.myCompany.com/MyService". 

此主机基地址来自负载平衡地址。

当我输入https://test-LoadBalanced.myCompany.com/MyService/InternalService.svc时 ,我可以获得服务页面。在里面,有时我会得到 ServerA 盒子的端点地址和有时服务器 B 盒子的端点地址的 wsdl 链接。

参考

WCF服务端点与主机基地址问题的答案说

在 IIS 上托管 WCF 服务时,基地址只能是 .svc 文件的 URL。

以下来自WCF 深度寻址

客户不知道服务的基地址,也不需要在他们的网络上支持类似的东西。因此,您不会在客户端对象模型或配置部分中找到与基地址相关的任何内容。客户端只需选择一个特定的端点,该端点总是配置有一个绝对地址,而该绝对地址决定了它将在传输过程中使用的地址。

负载均衡

默认情况下,BasicHttpBinding 在带有 Keep-Alive 值的消息中发送连接 HTTP 标头,这使客户端能够与支持它们的服务建立持久连接。此配置提供了增强的吞吐量,因为可以重用先前建立的连接将后续消息发送到同一服务器。但是,连接重用可能会导致客户端与负载平衡场中的特定服务器强关联,这会降低循环负载平衡的有效性。如果不希望出现这种行为,可以使用带有 CustomBinding 或用户定义的绑定的 KeepAliveEnabled 属性在服务器上禁用 HTTP Keep-Alive。

客户

我使用负载平衡地址创建了一个客户端。但是,在客户端配置中,端点地址是服务器 A 盒子的地址;不是负载平衡地址。

问题

那么,客户端如何利用负载均衡的性能优势呢?它将始终访问服务器 A 以获得服务操作,不是吗?

4

2 回答 2

1

更改客户端的代码/配置以指向服务的负载平衡端点。

基地址是服务器专用的问题。它为您提供了一种方法来指定所有其他相对 URI 所基于的基本 URI。

如果您的客户端向您的负载均衡器发送 HTTP 消息,它们将被转发到服务器。为此,只需使用服务的负载平衡器配置您的客户端。

在服务器上禁用HTTP也可能是明智keep-alive的,以防止您的客户端与 LB 后面的服务器形成粘性关系。

于 2013-03-15T13:56:20.493 回答
1

WSDL 仅在您的客户端应用程序的设计时使用。一旦向导创建了所有客户端类,您就可以将客户端应用程序指向负载平衡器。

于 2013-03-15T14:01:16.507 回答