質問

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プロジェクトで入手できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top