私は、HTTP、FTP、場合によってはローカルファイル(file://)の両方を介して多くの異なるコンテンツソースにアクセスする必要があるC#アプリケーションを開発しています。
さまざまなプロトコルを介してこれらのファイルにアクセスするための統一された方法が必要だったため、これを行うためにWebClientを選択しました。
MSDNに記載されているさまざまなプロトコル(FTP、HTTP、ローカルファイルなど)すべてでうまく機能しますが、問題が発生します...いくつかのリクエストが成功した後、ローカルファイルのURIを使用してファイルにアクセスできません( file:// c:\ some_dir \ somefile.ext)。
URIが正しいことをすでに確認しました。ブラウザに入力すると、ファイルが簡単に開きます。私は1つの本当に興味深いことを認識しました-それはローカルファイルに対しても最初はうまく機能します。WebClientを使用してローカルファイルのコンテンツを読み込もうとすると、最初はすべてうまく機能します。
私のプログラムは次のようになります。
- メインスレッド開始
- メインスレッドでの初期化
- さまざまなソースからコンテンツをダウンロードする複数のスレッド
- すべてのスレッドが終了するのを待ちます
- シングルスレッド処理のダウンロードされたもの
前に説明したように、最初のステップでWebClient.DownloadData(url)呼び出しを配置すると正常に機能しますが、3番目のステップのいずれかのスレッドで完全に同じURIにアクセスしようとすると、取得に失敗します。 「file://」で始まるURIを持つローカルファイル。
非常に単純なコードを使用して、ローカルファイルをダウンロード/取得します。
WebClient wc = new WebClient();
data = wc.DownloadData(url);
何がうまくいかないのだろうか...前の手順で、または並行スレッドでローカルファイルにアクセスできないように設定したのではないでしょうか。前の手順では、FTPサーバーからHTTPを介してコンテンツをダウンロードしますが、それが問題の原因になる可能性がありますか?メインスレッドの最初で試してみると、どのローカルファイルにも簡単にアクセスできます。FTPコンテンツにアクセスするときは、クレデンシャルも設定します。多分これは私の後の要求に影響を与えるものですか?