客户端如何使用负载均衡的WCF服务

时间:2013-03-15 13:44:39

标签: .net wcf

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

以下是服务器中的end pointshttps://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 Service Endpoints vs Host Base address问题的答案是

  

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

以下来自WCF Addressing In Depth

  

客户端没有意识到服务的基地址,也没有必要在线路上支持类似的东西。因此,您将无法在客户端对象模型或配置部分中找到与基址相关的任何内容。客户端只需选择一个特定的端点,该端点始终配置有绝对地址,该绝对地址决定了它在传输过程中将使用的地址。

来自Load Balancing

  

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

客户端

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

问题

那么,客户端如何利用负载平衡性能优势呢?它总是会在服务器A上进行服务操作,不是吗?

2 个答案:

答案 0 :(得分:1)

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

基地址仅限服务器。它为您提供了一种指定所有其他相对URI所基于的基本URI的方法。

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

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

答案 1 :(得分:1)

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