我有C#(。Net 4.5)Winforms应用程序与互联网上托管的网络服务器进行通信。
它完美无瑕,直到我打开VPN,这是限制性的,不支持拆分隧道。
只有按照以下步骤才能重现:
VPN连接后,webrequest停止在.NET应用程序中运行。 .NET应用程序开始获得通用"无法连接到远程服务器"在HttpWebRequest.GetResponse
:
System.Net.WebException: Unable to connect to the remote server --->
System.Net.Sockets.SocketException:
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond xxx.xxx.xxx.206:443
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean
connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address,
ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at DNSCacheTest.Form1.SendWebRequest(String url)
关闭VPN,应用程序开始工作,请求再次通过。
如果在应用程序启动之前VPN已经连接,则不会出现此问题。
这适用于任何公共服务器,甚至https://www.google.com。
我在NetStat
日志中密切关注所有这些情景,以及我观察到的内容:
我每次都会创建一个新的WebRequest
。我尝试了所有可能的方法来强制应用程序每次使用更新的地址,但无法这样做。
以下是我尝试过但没有做的一些事情:
请建议。
答案 0 :(得分:0)
问题似乎出现在.Net框架中,它不会获取更新的地址。
为了解决这个问题,我在提交每个请求之前添加了:
webRequest.Proxy = WebRequest.GetSystemWebProxy();
有了这个,框架明确地从IE网络选项中获取更新的代理设置。