如果我想对我的WCF服务进行负载平衡,标准建议是disable HTTP persistent connections。换句话说,确保" Keep-Alive"不活跃。
如果我希望每个请求都得到适当的平衡,并且我不介意在每次调用时重新创建连接所需的延迟小幅增加,那么这很好。
但是,在我的情况下,我实际上想避免额外的延迟 - 而且我不介意通过平衡器的重复请求是"粘性"到一台服务器。相反,我只是希望能够从平衡组中删除其中一个服务器,并允许连接正常过渡到其他服务器。
为实现这一目标,我需要一些方法来保持" Keep-Alive"在请求仍在进行中时取消激活。使用WCF消息检查器会很棒,当发出信号时,它会添加一个" Connection:close"标题回复。不幸的是,explicitly adding "connection: close"可能是不可能的。
所以我的下一个选择是调整IIS配置。虽然我的应用程序仍在处理飞行中的请求,但我会调整" Http响应标头中的设置。相关的网站。在那里可以"Set Common Headers" and turn "Keep-Alive" off。
太棒了,除了一件事:更改任何配置会导致应用程序域与我的应用程序卸载。当我这样做时,IIS非常友好地允许现有的飞行中连接正常地流失,并且下一个入站请求会导致应用程序域再次加载。所有后续处理现在都有"连接:关闭"发送回复。
因此,通过更改配置不会损害入站请求,但由于重新加载应用域所花费的时间,我可能违反了我的SLA请求处理。
简而言之,我只想要一些方法来取消激活HTTP持久连接 - 而不会导致应用程序域卸载和重新加载。
如果有人可以解释如何克服"覆盖"我会很高兴有一个自定义WCF消息检查员来处理这个问题。 IIS强制执行"连接" HTTP标头。