WebClient UploadFileエラー
-
06-07-2019 - |
質問
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に切り替えたために失敗しました(SA FileUpで従来のASPを使用していました)。クライアント側は、新しいURLに対応するように変更されましたが、それ以外はほとんど同じです。
解決
例外&quot;リクエストは中止されました:リクエストはキャンセルされました。&quot;ファイル転送中にWebClientがタイムアウトした場合にスローされます。ファイル転送が行われていない場合は、「操作がタイムアウトしました」というメッセージが表示されます。代わりに。
クライアントでタイムアウトが発生しています。 WebClientではタイムアウトを設定できません。HttpWebRequestのデフォルト(WebClientが使用するもの)は100秒です。 HttpWebRequestを使用する場合、進行状況を取得する方法を理解する必要があると思います。また、ASP.Netファイル転送が従来のASPでSAFileUpを使用するよりも遅い理由を把握する必要があります。
UPDATE:WebClientに取って代わるWebHelperクラスを作成しましたが、基になるWebRequestの必要な機能へのより多くのアクセスを提供します。また、WebClientを介した多数の追加機能も提供します。興味がある場合は、CodePlexの BizArkプロジェクトで入手できます。