我有一个使用 WCF HTTPS 连接的服务器和客户端应用程序。它们都使用证书,因此客户端需要使用 DNS 来连接到服务器。
在“C:\Windows\System32\drivers tc”下的系统主机文件中,正确存在将 DNS 名称映射到服务器 IP 地址的条目。
客户端应用程序是一对多的,这意味着它允许用户输入服务器的 IP 地址并创建连接。客户端应用程序隐式更新系统主机文件中与此 DNS 相关的行以包含此 IP 地址,并将 DNS 传递到连接。
这一切在不同系统上的任何服务器上都可以正常工作,首次启动应用程序时也不会出现问题。它将更新主机文件并正确连接到任何服务器。
我遇到的问题是,当断开连接然后重新连接到不同的 IP 地址时,连接将继续在客户端连接到此客户端应用程序实例的第一个 IP 地址上建立。
主机文件正在更新,新 IP 地址没有出现问题,但由于某种原因,连接仍然连接到原始 IP 地址。 再一次,当重新启动客户端并输入不同的 IP 地址时,这一切都会起作用。当尝试在客户端的单个实例下断开/重新连接时,似乎正在为 WCF 连接缓存某些内容。
有人遇到过这个问题吗?有谁知道如何刷新 WCF 连接可能存在的任何类型的缓存?
尝试以下操作:
1.您可以尝试禁用WCF的keepalive。这样,您就不会重复使用已建立的连接。这段代码放在WCF配置代码上。
HttpTransportBindingElement httpTransport = new HttpTransportBindingElement();
httpTransport.KeepAliveEnabled = false;
2.设置DNS缓存的过期时间
<system.net>
<settings>
<servicePointManager expect100Continue="false" useNagleAlgorithm="false" dnsRefreshTimeout="10000" />
</settings>
</system.net>
3.使用控制台清除缓存。
ipconfig /flushdns