我在IIS上有一个C#Web服务,就像代理一样。我的问题是,当其中一个后端服务器的IP地址发生变化时,Windows DNS缓存会正确更新(使用nslookup检查),但服务会继续对旧IP做一些请求约40分钟。
我注意到如果我停止点击代理5分钟但故障转移无效,那么故障转移应该是自动的。
有什么想法吗?
提前致谢。
答案 0 :(得分:2)
尝试在服务器Web.config上设置此项:
<configuration>
<system.webServer>
<httpProtocol allowKeepAlive="false" />
</system.webServer>
</configuration>
这告诉服务器it can't send back the Connection: Keep-Alive
header。为每个请求创建新连接,这会以某种方式强制它更新到新IP。当Keep Alive保持启用状态时,它会长时间保持与旧IP的共享连接。
答案 1 :(得分:0)
您是否尝试将负缓存超时设置为零?我知道你说dns缓存是正确更新的,但是如果你在它过时的时候甚至一次点击它,你可能会被使用旧的IP卡,直到它过期。
在Windows XP上,您将其在注册表中设置为:
HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \服务\的dnscache \参数 DWORD:MaxNegativeCacheTtl 值:0
在Vista或Windows 7中没有玩过这个。
我很想看到无法解析后端服务器地址的代码......想知道代码本身是否存在旧的IP。
答案 2 :(得分:0)
如果您使用的是构建在Windows http组件上的内容,您会发现该组件会挂起已解析的ip作为性能“优化”。一旦它有一个名称/ IP匹配,它将挂在它上面字面上DAYS。它完全忽略了TTL。
您通过空闲延迟克服此问题的唯一原因是因为该组件在您的特定用途中正在回收。
这是一个已知问题。 MS项目经理“有点”承认。但是,它从未被修复过。
我们写了自己的替代品。