使用 WebRequest.BeginGetResponse 的 WebException

Posted

技术标签:

【中文标题】使用 WebRequest.BeginGetResponse 的 WebException【英文标题】:WebExcpetion usind WebRequest.BeginGetResponse 【发布时间】:2013-03-05 11:31:17 【问题描述】:

有个问题困扰了我很久。

我使用的是 Windows Phone 8 和 c#。

从网络下载文件时,我有时会收到此异常:

A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.ni.dll
A first chance exception of type 'System.Net.WebException' occurred in System.Windows.ni.dll
A first chance exception of type 'System.Net.WebException' occurred in System.Windows.ni.dll
ExceptionMessage:The remote server returned an error: NotFound.

然后我再次运行程序,它工作正常。不知道为什么有时候找不到远程服务器,真的是服务器的问题吗? 它认为它在我的代码中,我使用这些函数:

WebRequest request = WebRequest.Create("http...);
IAsyncResult res = request.BeginGetResponse(new AsyncCallback(DownloadComplete), null);

如果您有任何建议,我将不胜感激,因为此异常不断弹出,我无法解决。

【问题讨论】:

【参考方案1】:

它并没有说它找不到远程服务器,而是服务器拒绝了请求的文件,因为它在那个远程服务器上当时不存在。很难知道您的确切情况,但撇开网络问题不谈,它可能只是 当时该文件不存在这样简单的事情。

这个文件多久更新一次?想一想,在您请求文件时,该文件已被删除并会立即被重写。

网络本身并不可靠,只是看起来可靠;这方面有很多技术,但我的意思是,在你的情况下,在一段时间后失败后重试可能会更糟糕一些“恢复”逻辑。

只是一种可能。

【讨论】:

感谢您的回答。我已经安装了一些逻辑,如果第一次失败,它将重试下载。但是当这些异常不是我的错时,我该如何隐藏它们呢?有什么办法可以阻止它们显示在我的调试器窗口中?【参考方案2】:

当我忘记手机在模拟器中运行并将网络引用更改为本地主机时,我会得到这个。然后本地主机将在电话本身上进行解释,显然网络服务没有在电话上运行。如果您在进行本地调试,请确保使用您机器的 IP 地址,而不是 localhost 或 127.0.0.1。

【讨论】:

以上是关于使用 WebRequest.BeginGetResponse 的 WebException的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)