c#应用程序在我更改网络后抛出“远程名称无法解析”异常

本文关键字:程名 异常 应用程序 网络 | 更新日期: 2023-09-27 18:08:54

我的应用程序在将网络更改为公司网络后抛出"远程名称无法解析"异常

应用程序是用c#和WebClient编写的。WebClient实例每3秒计时器创建一次,并使用UploadValues从服务器获取数据。

办公室网络是这样设置的,我们有几个WiFi网络(让我们称之为A, B, C, D)。A -是公司的VPN网络。

当我们运行应用程序时,无论当前网络连接如何,它都能正常工作。如果我们改变B, C之间的连接,D app可以正常工作。如果我们在连接A网络时运行app,然后切换到B, C或D,它仍然可以正常工作,没有问题。但是,如果我们启动应用程序,而我们连接到B,С或D,然后切换到A(企业VPN之一)应用程序抛出«远程名称无法解析»在每个计时器滴答,如果我们切换回B,C或D, UploadValues开始工作很好。在从B, C, D网络切换到A后,使应用程序正常运行的唯一方法是重新启动应用程序,(如果重新启动后我们切换到B, C, D并返回到A应用程序将再次开始崩溃"远程名称无法解析"。我试图通过浏览器(Chrome, IE 10)访问相同的资源,它工作得很好。

我尝试用Dns获取IP。GetHostAddresses和它总是返回«没有这样的主机是已知的»在A网络,但在B, C或D网络工作得很好。nslookup命令在网络中返回«不存在的域»,但在B, C或d中工作良好。同时,无论当前网络如何,我都可以通过Chrome或IE访问资源而不会出现问题。

ipconfig/flushdns, ipconfig/registerdns和ipconfig/renew不工作

是什么导致了这个问题?在这一点上,我完全迷失了,我没有主意了。

c#应用程序在我更改网络后抛出“远程名称无法解析”异常

问题的根源是代理。没有代理就无法访问该服务。由于未知原因,当用户切换网络时代理无法工作。为了使连接正常工作,您必须在web客户端初始化时指定代理,如下所示:

webClient.Proxy = WebRequest.GetSystemWebProxy();

如果uri可以直接从系统访问,您可以像这样使用系统代理:

using (var client = new HttpClient(new HttpClientHandler() { Proxy = WebRequest.GetSystemWebProxy() })) ...