我在IIS上有一个C# web服务,它充当代理。我的问题是,当其中一个后端服务器的IP地址改变时,windows DNS缓存被正确地更新(用nslookup检查),但是服务继续在旧IP上做一些请求大约40分钟。
我注意到,如果我停止访问代理5分钟,故障转移就会起作用,但这不是一个可接受的解决方案,故障转移应该是自动的。
有什么想法吗?
提前谢谢。
发布于 2012-02-04 05:43:35
尝试在您的服务器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的共享连接。
发布于 2010-10-09 03:49:57
您是否已尝试将负缓存超时设置为零?我知道你说过dns缓存是正确更新的,但如果你在它过期的时候命中它一次,你可能会一直使用旧的IP,直到它过期。
在Windows XP上,您可以在注册表中将其设置为:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters DWORD值: MaxNegativeCacheTtl值:0
在Vista或Windows7中还没有玩过这个游戏。
我很想看看不能解析后端服务器地址的代码……想知道代码本身中是否有什么东西保留了旧IP。
发布于 2010-10-09 15:08:40
如果你使用的是建立在windows http组件上的东西,你会发现该组件挂在解析的ip上,作为一种性能优化。一旦它有一个名称/ip匹配,它将挂起它的字面上几天。它完全忽略了TTL。
您使用空闲延迟克服此问题的唯一原因是因为组件在您的特定使用中被回收。
这是一个已知的问题。MS程序经理“某种程度上”承认了这一点。但是,它从来没有被修复过。
我们写了我们自己的替代品。
https://stackoverflow.com/questions/3893230
复制相似问题