2

System.Net.WebClient.UploadFile を使用して Web サーバーにファイルをアップロードしようとしていますが、WebException が引き続き発生します。具体的には、3 つのエラーが発生しています。同じエラーが発生しない理由はわかりませんが、オンラインで見つけたものに基づいて、それらはすべて関連しているようです。

  • リクエストは中止されました: リクエストはキャンセルされました。
  • 接続が閉じられました。再試行。
  • 既存の接続がリモート ホストによって強制的に閉じられました。

ややランダムに見えます(常に同じファイル、時間、または私が把握できる他のパターンとは限りません)。また、これは私の職場のネットワークでは発生しません (アップロードに 2 秒もかかりません) が、自宅から DSL 経由で発生します (アップロードには約 2 分かかります)。

私がオンラインで見つけたものから、これらのエラーはキープアライブと関係があります。残念ながら、WebClient はこれらをオフにする方法を提供していません (これはパフォーマンス機能であるため、とにかくオフにするかどうかはわかりません)。

タイムアウトと関係があるのではないかと思いますが、理由がわかりません。サーバーは ASP.Net MVC で、タイムアウトは 1 時間に設定されています。

    <httpRuntime
        maxRequestLength="10024" 
        executionTimeout="3600"
        /><!-- 10024 = 10MB, 3600 = 1hr -->

私はこの問題を解決する両方の方法に興味があり、それが起こらないようにする方法と、回復技術 (単にリクエストを再度行うだけでは効果がないようです) に興味があります。

これは、サーバーに写真をアップロードする WinForms アプリケーション用です。サーバーは ASP.Net MVC アプリケーションです。クライアントは長い間正常に動作していましたが、ASP.Net MVC に切り替えてから失敗しています (従来の ASP と SA FileUp を使用していました)。クライアント側は、新しい URL に対応するために変更されただけで、それ以外はほとんど同じです。

4

1 に答える 1

2

例外「リクエストは中止されました:リクエストはキャンセルされました。」ファイル転送中にWebClientがタイムアウトした場合にスローされます。ファイル転送が行われていない場合は、代わりに「操作がタイムアウトしました」というメッセージが表示されます。

クライアントでタイムアウトが発生しています。WebClientではタイムアウトを設定できず、HttpWebRequest(WebClientが使用するもの)のデフォルトは100秒です。HttpWebRequestを使用するときに進捗状況を取得する方法を理解する必要があると思います。また、ASP.Netファイル転送が従来のASPでSAFileUpを使用するよりも遅い理由を理解する必要があります。

更新:WebClientの代わりとなるWebHelperクラスを作成しましたが、基盤となるWebRequestの必要な機能へのより多くのアクセスを提供します。また、WebClientを介して多数の追加機能を提供します。興味がある場合は、CodePlexのBizArkプロジェクトで入手できます。

于 2009-11-13T02:24:44.153 に答える