Forums: Open Discussion (Thread #30162)

【For.NET】ファイルアップロードタイムアウトについて (2011-08-18 20:36 by Anonymous #59187)

「TERASOLUNA Server/Client Framework for .NET2.0」を使用して開発をしておりますが、
ファイルアップロードの機能について問い合わせさせて頂きます。

「FC-02 ファイルアップロード機能」のページ295の「リスト 7 リクエストタイムアウト時間を変更する場合の実装例」
に従って、ファイルアップロードのタイムアウトを実装しました。

// Itemsにリクエストタイムアウト時間 (300000ms)を設定する
eventController1.Items["RequestTimeout"] = 300000;
// イベントコントローラの実行
ExecutionResult result = eventController1.Execute();


ただ、5分後タイムアウトになりましたが、ファイルアップロードが継続して、最終的にファイルがサーバにアップロードされた事象が発生しています。

ここで質問ですが、ファイルアップロードリクエストタイムアウト後、何か処理しないとファイルアップロードが中断しない事でしょうか?

Reply to #59187×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: 【For.NET】ファイルアップロードタイムアウトについて (2011-08-19 10:39 by Anonymous #59189)

リクエストタイムアウトはクライアント側の要求に対するサーバの応答を待機する時間なので、
リクエストタイムアウトが発生してもクライアント側が待機するのをやめるだけでサーバ側の処理は続行されるのではないでしょうか。
ファイル転送自体は完了していて、その後のサーバ側処理の間にクライアントでリクエストタイムアウトが発生してもサーバ側はそのまま処理を進めると思います。

>ここで質問ですが、ファイルアップロードリクエストタイムアウト後、何か処理しないとファイルアップロードが中断しない事でしょうか?
アップロード処理を非同期にして、独自にタイムアウト処理を実装、タイムアウト直前にサーバ側処理をキャンセルさせる等のギミックが必要になるのではないでしょうか。
Reply to #59187

Reply to #59189×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: 【For.NET】ファイルアップロードタイムアウトについて (2011-08-19 10:54 by Anonymous #59190)

ご回答ありがとうございます。

実際に非同期処理にしてみましたが、タイムアウトした後、Cancelを発行したが、やはり送信が続いています。
Reply to #59187

Reply to #59190×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: 【For.NET】ファイルアップロードタイムアウトについて (2011-08-19 15:09 by tatsumihr #59192)

MSDNを見ると、HttpWebRequestのTimeoutプロパティは、
「GetResponse メソッドで行った後続の同期要求が応答を待機する時間を表すミリ秒数です。」と書いてあります。

TERASOLUNAの通信クラスのコードを見ると、RequestStreamにデータを書き込んだ後に、GetResponseでレスポンスを取得しています。
タイムアウトとは、このGetResponseの待機時間が過ぎたというだけですので、
この時点では、すでにデータの送信“要求”は完了しているのではないかと思います。
実際に送信が完了しているかどうかは分かりませんが。

先のコメントにもありましたが、タイムアウトはクライアント側がサーバへのGetResponseの応答を待たないだけですので、
サーバ側の処理は継続されているものと思います。

どうしてもファイルを削除したい場合は、クライアント側のタイムアウト発生後、クライアント側のビジネスロジックから、
再度サーバにリクエストを送ってファイルを削除するしかないのではないでしょうか。
Reply to #59190

Reply to #59192×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: 【For.NET】ファイルアップロードタイムアウトについて (2011-08-19 20:53 by Anonymous #59197)

タイムアウトはクライアント側がサーバへのGetResponseの応答待たない事は理解しました。
ありがとうございます。

今回の場合、ファイルを削除する目的ではなく、ネットワーク帯域が占有される事が問題です。

大きいファイルのアップロードを行っており、タイムアウトが発生してもファイル送信が継続し
ネットワーク帯域が占有され続ける事が問題となっています。
ネットワーク帯域を占有しないように、ファイル送信を途中で止める方法はございませんか?

又、非同期処理も実装してみました。
独自のタイマーを使って、タイムアウトになったら、ExecuteAsyncCancel()でファイル送信を中止しようとしましたが、
やはりファイル送信が継続して、ネットワーク負荷がかかった状態です。
Reply to #59187

Reply to #59197×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: 【For.NET】ファイルアップロードタイムアウトについて (2011-08-20 12:12 by Anonymous #59210)

クライアント側では制御できないと思うので、
サーバ側(IIS?)の接続タイムアウトを設定してみたらどうでしょうか?
Reply to #59187

Reply to #59210×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login