0

我有一个简单的任务:从服务器读取数据,如果服务器无法访问(服务器关闭或网络不好),从本地磁盘缓存加载数据(可能是陈旧的)。

下面是 Java 代码的简单伪表示:

try {
    //read from server
} catch (IOException ioe) {
    //most likely a socket timeout exception

    //read from local disk
} finally {
    //free I/O resources
}

但是在 C# 中实现它似乎不起作用,因为WebClient即使主机上没有 Internet 访问,似乎也不会引发任何异常,因此无法通过 catch 块检测到这种情况并恢复到本地缓存。我知道WebClient's 的异步 API 及其相当有趣的回调链,但我认为这太尴尬了,不适合我的设计目标。有没有一种方法可以像上面显示的 Java 框架代码一样轻松地在 C# 中执行此操作?谢谢。

4

2 回答 2

1

WebClient 将超时,但仅在 100 秒后。

我建议您改用 HttpWebRequest 。这有一个可设置的超时属性。

请参阅http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx

于 2013-03-27T00:25:25.487 回答
1

除了 bobbymond 的回答之外,这是一个 WebClient 将返回的 WebException,所以这就是您要捕获的内容:

WebClient wc = new WebClient();
try
{
    wc.Credentials = new NetworkCredential("Administrator", "SomePasword", "SomeDomain");
    byte[] aspx = wc.DownloadData("http://SomeServer/SomeSub/SomeFile.aspx");
}
catch (WebException we)
{
    //Catches any error in the WebClient, including an inability to contact the remote server
}
catch (System.Exception ex)
{

}
于 2013-03-27T00:27:17.433 回答