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しないようです。そのため、catchブロックを介してその状態を検出し、ローカルキャッシュに戻す方法はありません。私はWebClientの非同期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 に答える