WCF负载平衡实现方法总结

开发 开发工具
WCF负载平衡分为基本的HTT绑定;WSHttp绑定和WSDualHttp绑定;以及Net.TCP 绑定等等。在这篇文章中将会为大家详细介绍这些知识。

WCF框架是一款功能比较强大的开发工具。对于一个经验丰富的开发人员来说,对这框架的应用应该是相当熟悉的。提高WCF应用程序能力的方法之一是通过把它们部署到负载平衡的服务器场来扩展它们。#t#

使用标准的WCF负载平衡技术,包括诸如 Windows 网络负载平衡这样的软件负载平衡器以及基于硬件的负载平衡设备,可以使 WCF 应用程序实现负载平衡。

以下各节讨论对使用各种系统提供的绑定生成的 WCF 应用程序实现负载平衡时的注意事项。

基本 HTTP 绑定的WCF负载平衡

从负载平衡的角度看,使用 BasicHttpBinding 进行通信的 WCF 应用程序与其他普通类型的 HTTP 网络流量(如静态 HTML 内容、ASP.NET 页或 ASMX Web 服务)并没有什么区别。使用此绑定的 WCF 通道本质上是无状态的,当通道关闭时,其连接也会终止。因此,BasicHttpBinding 可以很好地与现有的 HTTP 负载平衡技术一起使用。

默认情况下,BasicHttpBinding 会在消息中发送一个具有 Keep-Alive 值的连接 HTTP 标头,该标头可让客户端建立到支持这些客户端的服务的持续连接。这种配置具有高的吞吐量,因为可以重新使用以前建立的连接向同一个服务器发送后续消息。然而,重新使用连接可能导致客户端与负载平衡场中的特定服务器密切关联,从而降低循环负载平衡的效率。如果不需要此行为,则可以使用 CustomBinding 或用户定义的 Binding 在使用 KeepAliveEnabled 属性的服务器上禁用 HTTP Keep-Alive。下面的示例演示如何使用配置来执行该操作。

  1. < ?xml version="1.0" encoding="utf-8" ?> 
  2. < configuration> 
  3. < system.serviceModel> 
  4. < services> 
  5. < service   
  6. name="Microsoft.ServiceModel.
    Samples.CalculatorService"
     
  7. behaviorConfiguration="
    CalculatorServiceBehavior"
    > 
  8. < host> 
  9. < baseAddresses> 
  10. < add baseAddress="http://
    localhost:8000/servicemodelsamples/service"
    /> 
  11. < /baseAddresses> 
  12. < /host> 
  13. < !-- configure http endpoint, 
    use base address provided by host  
  14. And the customBinding --> 
  15. < endpoint address="" 
  16. binding="customBinding" 
  17. bindingConfiguration="HttpBinding"   
  18. contract="Microsoft.ServiceModel
    .Samples.ICalculator"
     /> 
  19. < /service> 
  20. < /services> 
  21. < bindings> 
  22. < customBinding> 
  23. < !-- Configure a CustomBinding
     that disables keepAliveEnabled--
    > 
  24. < binding name="HttpBinding" 
    keepAliveEnabled="False"/> 
  25. < /customBinding> 
  26. < /bindings> 
  27. < /system.serviceModel> 
  28. < /configuration> 

WSHttp 绑定和 WSDualHttp 绑定的WCF负载平衡

如果对默认的绑定配置进行一些修改,则 WSHttpBinding 和 WSDualHttpBinding 都可以使用 HTTP 负载平衡技术来实现负载平衡。

关闭安全上下文的建立:这可以通过将 WSHttpBinding 上的 EstablishSecurityContext 属性设置为 false 来完成。或者,如果需要安全会话,则可以按照 安全会话 主题中的说明,使用有状态安全会话。有状态安全会话使服务保持无状态,因为安全会话的所有状态都随每个请求作为保护安全令牌的一部分进行传输。请注意,若要启用有状态安全会话,必须使用 CustomBinding 或用户定义的 Binding,因为系统提供的 WSHttpBinding 和 WSDualHttpBinding 上并不会公开必需的配置设置。

不要使用可靠会话。默认情况下此功能处于关闭状态。

使 Net.TCP 绑定实现WCF负载平衡

可以使用 IP 层负载平衡技术实现 NetTcpBinding 的负载平衡。不过,默认情况下,NetTcpBinding 会汇集 TCP 连接以减少连接延迟。这是一种干扰负载平衡基本机制的优化。用于优化 NetTcpBinding 的主配置值是租约超时,它是连接池设置的一部分。连接池导致客户端连接与场内特定的服务器关联。随着这些连接的生存期的增加(一个受租约超时设置控制的因素),场内不同服务器上的负载分布会变得不平衡。结果使平均调用时间增加。

因此,在负载平衡方案中使用 NetTcpBinding 时,应考虑减少由绑定使用的默认租约超时。虽然租约超时的***值取决于应用程序,但 30 秒的租约超时对于负载平衡方案不失为一个合理的始点。有关通道租约超时和其他传输配额的更多信息,请参见传输配额。

若要在负载平衡方案中获得***性能,请考虑使用 NetTcpSecurity(Transport 或 TransportWithMessageCredential)。

责任编辑:曹凯 来源: 博客园
相关推荐

2010-02-22 16:43:09

WCF负载平衡

2010-12-17 10:45:13

ldirectordLVS负载平衡

2010-05-04 17:38:36

ISP负载平衡

2010-05-04 17:31:05

2010-04-20 13:36:17

负载平衡

2010-05-05 18:07:53

网络负载平衡

2010-05-10 17:15:36

负载平衡方案

2022-02-06 11:50:29

HAProxy网络流量系统运维

2010-05-04 17:50:41

负载平衡

2020-03-19 13:10:48

DRSVMware负载平衡

2010-04-21 13:48:48

网络负载平衡

2010-05-04 17:54:50

网络负载平衡

2013-12-16 15:09:15

多核负载

2010-05-04 17:45:49

自动负载平衡

2013-05-30 09:58:50

RouterosADSL负载均衡技术

2010-05-10 18:19:00

负载平衡技术

2010-04-25 23:36:47

负载平衡服务器

2010-05-10 18:27:51

负载平衡产品

2023-12-15 19:29:20

2010-04-21 10:17:59

点赞
收藏

51CTO技术栈公众号