したがって、私のアプリケーションは、インターネット接続が数秒間停止してから戻ってくるまで、サーバーと要求/応答を交換しています(問題はありません)。次に、次のようなコード:
response = (HttpWebResponse)request.GetResponse();
、などReceiveFailure
のステータスで例外をスローします。ConnectFailure
KeepAliveFailure
さて、インターネット接続が回復した場合、サーバーとの通信を継続できることが非常に重要です。そうしないと、最初からやり直す必要があり、それには長い時間がかかります。
インターネットが戻ってきたら、どうやってこのコミュニケーションを再開しますか?
現時点では、(少なくとも理論的には)可能になるまで、サーバーとの通信の可能性をチェックし続けています。私のコードの試みは次のようになります:
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
// We have a problem receiving stuff from the server.
// We'll keep on trying for a while
if (ex.Status == WebExceptionStatus.ReceiveFailure ||
ex.Status == WebExceptionStatus.ConnectFailure ||
ex.Status == WebExceptionStatus.KeepAliveFailure)
{
bool stillNoInternet = true;
// keep trying to talk to the server
while (stillNoInternet)
{
try
{
response = (HttpWebResponse)request.GetResponse();
stillNoInternet = false;
}
catch
{
stillNoInternet = true;
}
}
}
}
ただし、問題は、インターネットが復旧した場合でも、2番目のtry-catchステートメントが例外をスローし続けることです。
私は何が間違っているのですか?これを修正する別の方法はありますか?
ありがとう!