System.Net.WebClient
それぞれ3〜15MBの範囲のいくつかのファイルをダウンロードするために使用する単純なC#システムトレイアプリがあります。WebClient は HTTPS 経由でダウンロードしており、ダウンロード元のサーバーを制御しています。ファイルはダイレクト パス経由で Web ブラウザーから正常にダウンロードされ、WebClient は.DownloadString()
このサーバーからメソッドを完全に処理 (つまり、短いテキスト ファイルを文字列にダウンロード) できます。
奇妙なことに、24 時間以内に 3 つのことが起こりました。私はある種のマシン固有の構成またはキャッシングを疑っていWebClient
ますが、推測を危険にさらす可能性のある の内部について他の人が何を知っているのだろうかと思います。
- 開発マシン #1 は、このコードをデバッグ モードで実行し、ファイル (MegabyteFile1 および MegabyteFile2 と呼びます) を金曜日までダウンロードすることに問題はありませんでした。ダウンロードには最大で 3 ~ 5 秒かかりました。
- 突然、金曜日の午後、開発マシン #1 が MegabyteFile1 のダウンロードを停止しました。動作は次のとおりです。
WebClient.DownloadFile()
無期限にハングする- のファイル
targetFileFullPath
は作成されますが、0 バイトです。 - メインスレッドは無期限にブロックされます。
- アプリケーションを終了する必要があります。
- 同一の OS 構成を持つ他の開発マシンは、コードを正常に実行し、正常にダウンロードします。
- DevelopmentMachine1 で Chrome または Internet Explorer を使用してこれらのファイルを手動でダウンロードすると、クエリ パラメーターの有無にかかわらず問題なく動作します。
- Fiddler が実行されている場合 (Fiddler HTTPS 証明書の詐欺師がインストールされていなくても)、DevelopmentMachine1はファイルをダウンロードします。つまり、このマシンでワイヤーを盗聴しようとすると、すべて正常に動作します。
ダウンロード コードの関連セクションは次のとおりです。
using (WebClient client2 = new WebClient())
{
client2.DownloadFile(String.Format("{0}?{1}", thePath, queryParams), targetFileFullPath);
}
このボックスで通常のシステム管理者のことを試しました。再起動し、Internet Explorer のキャッシュと一時ディレクトリをクリアするなどです。
ハングしたダウンロードに対処するための戦略を変更する必要があることはわかっています。現実の世界でダウンロードがハングすることは確実だからです。しかし、この特定の障害モードの原因を理解していない場合、すべてのまれなケースを考える自信はありません。WebClient
このマシンが「特別」である理由を推測する危険を冒すために、何が起こっているのかを十分に知っている人はいますか?
ありがとう!-ジェームズ