- PR -

【ASP.NET1.1】Response.Flushについて

1
投稿者投稿内容
トッティ
会議室デビュー日: 2006/10/19
投稿数: 16
投稿日時: 2006-10-19 18:37
はじめまして!トッティと申します。

ASP.NET初心者です。
独習ASP.NETという参考書をつかって勉強しています。

ループ処理の際に、時間がかかる場合にResponse.Flushをつかった
プログレスバーを本を参考に作ってみたのですがうまくいきません。
調査するべく下記のプログラムを書いてみました。

--------------------------------------------------------------------
・WebForm1.aspx
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 For i As Integer = 0 To 100
  Threading.Thread.Sleep(1000)
  Response.Write("今のインデックス値は:" & i)
  Response.Flush()
 Next

End Sub
--------------------------------------------------------------------

この場合、ブラウザが起動してもしばらく真っ白で、iの値が12のときに
まとめてどばっと表示され、それ以降、ひとつずつ表示されます。

これを最初からひとつづつ表示させるのにはなにか設定とか必要なのでしょうか?

初期表示のときは真っ白なので大丈夫なのですが、ボタンクリック等で
これを行うと、クリック前の画面が表示されっぱなしで困っています。

くだらない質問で申し訳ないのですが、よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-10-22 21:22
『独習 ASP.NET』には、なんと書いてありますか?

MSDN にも、その方法で載っていたと思います。

が、お勧めではありません。理由は、表示された HTML を見てください。HTML 要素の外に、「今のインデックスは」が書かれています。つまり、これは HTML ファイルではありません。


こんな感じで→ http://blogs.wankuma.com/jitta/archive/2005/11/18/19448.aspx
_________________
トッティ
会議室デビュー日: 2006/10/19
投稿数: 16
投稿日時: 2006-10-24 12:56
Jittaさん、回答ありがとうございました。

独習にはこう書いてありました。

---------------------------------------------------------------
[progress.aspx]
<%@ Page ContentType="text/html" Language="VB" %>
<%
For i As Integer=1 To 100
' 実際のバックグラウンド処理を記述
For j As Integer=1 To 1000000 : Next
Response.Write(".")
Response.Flush()
Next
%>
---------------------------------------------------------------

現在、職場の先輩にMSに問い合わせをしてもらっています。
(IE6の仕様?という線が浮かんできたらしいです)

Jittaさんのサンプルはc#で書かれていましたので
置き換えと理解に時間がかかってしまってまだ試せていません。
親切に教えて頂いたのに申し訳ないです。
(実はVB.NETも満足にかけない状況なのです・・・)

結果が出ましたら報告させて頂きます。
hebikuzure
ベテラン
会議室デビュー日: 2006/03/11
投稿数: 56
投稿日時: 2006-10-24 22:37
ContentType="text/html" を設定しているのだと、実際に受信しているデータが
本当に "text/html" かどうかチェックするのがIEの動作ですね。
http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/moniker/overview/appendix_a.asp
だからあるていど受信バッファにたまらないと、表示されないのでは?
トッティ
会議室デビュー日: 2006/10/19
投稿数: 16
投稿日時: 2006-10-31 12:52
トッティです。

先輩が問い合わせてくれた件でMSから回答が来ました。

パケットキャプチャの結果によるとIISはResponse.Flush実行時に即
クライアントにデータを送信しているそうです。
で、IEが6の場合、末端技術者Aさんのおっしゃるとおり200バイトほど
バッファに溜めた後、セキュリティチェックのようなことをするそうで
それが通って初めて出力を開始するようです。

しかし、200バイトというのは最低ラインの話で、状況によっては
ページ終了まで出力しなかったりするそうです。

結果としては、IE6で即出力は不可能で、ContentTypeを最低の200バイトで
認識させる方法も、セキュリティの仕様なので回答できないとの事です。

なので、ASP.NETとIE6でプログレスバーは難しいという結果に終わりました。
(方法はあるそうなのですが、有料になるそうです)

Jittaさん、末端技術者Aさん、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)