3

C# の WebClient を介してアップロード プロセスを一時停止または再開する方法を探しています。

疑似コード:

WebClient Client = new WebClient();
Client.UploadFileAsync(new Uri("http://mysite.com/receiver.php"), "POST", "C:\MyFile.jpg");

多分何かのような..

Client.Pause();

何か案が?

4

4 に答える 4

6

WebClientHttpWebRequestこの種の機能はありません-私の知る限り、わずかに低いレベルでさえありません。何が起こるかを正確に制御できる HTTP ライブラリを使用する必要があります(もちろん、より多くのコードが必要になることは間違いありません)。のポイントはWebClient、非常に単純な状況で使用するための非常に単純な API を提供することです。

于 2009-06-26T10:29:41.203 に答える
3

Jon Skeetが述べたように、これはHttpWebRequestクラスではなくWebclientでは使用できません。

ただし、サーバーを制御している場合は、サーバーがアップロードを受け取ります。おそらく、WebClientを使用してファイルの小さなチャンクをアップロードし、すべてが受信されたときにサーバーにチャンクをアセンブルさせることができます。そうすれば、一時停止/再開機能を作成するのがいくらか簡単になります。

サーバーを制御できない場合は、単なる制御を提供するAPIを使用する必要があります。その後、心配することが多くなります。それでも、一時停止が長すぎると、サーバーからタイムアウトが発生する場合があります。

于 2009-06-26T10:40:44.553 に答える
2

わかりました。コード例を示すことなく、何ができるかを説明します。

アップロード用の WCF サービスを作成します。そのサービスはストリーミングを使用する必要があります。

覚えておくべきこと:

  • クライアントとサーバーは、Guid の使用を提案する方法でファイルを識別する必要があるため、サーバーは追加データを追加するファイルも認識します。
  • クライアントは、ストリーミングを再開した後にストリーミングを開始する場所を把握できるように、配列内の位置を追跡する必要があります。(サーバーにクライアントにデータの量を伝えることもできますが、クライアントも知っていることを確認してください)。
  • サーバーは、既にダウンロードしたデータの量とまだ不足しているデータの量を追跡する必要があります。ファイルにはサーバー上で存続期間がある必要があります。半分アップロードされて忘れられたファイルがサーバーに永久に保存されることは望ましくありません。
  • 呼び出し全体が 1 つの httprequest にすぎないため、ストリーミングでは認証が許可されないことに注意してください。ssl を使用できますが、オーバーヘッドが追加されることに注意してください。
  • メッセージ レベルの標準的な方法でサービス コントラクトを作成する必要があります。

私は現在、まさにそのテーマについてブログ投稿を書いています。今週、それを機能させる方法のコード サンプルとともに投稿される予定です。

マイブログで確認できます

これにはコード サンプルが含まれていないことはわかっていますが、ブログにはいくつかのコード サンプルがありますが、全体として、これはサーバーへのファイル アップロードの停止と再開を行う 1 つの方法です。

于 2009-09-21T11:30:29.417 に答える
0

このようなことを行うには、実際のhttppostを段階的に実行する独自のワーカースレッドを作成する必要があります。

を送信する前に、操作が一時停止されているかどうかを確認し、再開されるまでファイルコンテンツの送信を停止する必要があります。

ただし、サーバーによっては、接続が一定期間アクティブでないと接続を閉じることができ、これはほんの数秒である可能性があります。

于 2009-06-26T10:41:39.340 に答える