C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.68526 の関連記事表示

<< 0 >>
■68526  Response.close について
□投稿者/ kos -(2013/10/25(Fri) 15:07:51)

    分類:[.NET 全般] 

    2013/10/28(Mon) 15:50:33 編集(投稿者)
    2013/10/28(Mon) 15:09:04 編集(投稿者)
    2013/10/28(Mon) 15:00:33 編集(投稿者)

    【開発環境】VisualStudio 2005
    【開発言語】VB.NET, ASP.NET(VB)
    【開発OS】Windows 7

    現在、Windows2003とWindows2008r2で、上記環境で作成したプログラムを動作させているのですが
    Response.Closeの挙動が異なっており困っております。

    クライアントでデバッグ実行を行うと、send()の部分で以下の様な違いがあります。
    ・Windows2003に送信すると、Response.Close が実行されたタイミングで次の行に進む
    ・Windows2008r2に送信すると、10秒間のスリープの後に次の行に進む

    なぜこのような動作になるのか、もし心当たりのある方がいらっしゃいましたらご教示いただけますか?


    ※クライアント側のソース(exe)
    Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click

    Dim xmlhttp As New MSXML2.XMLHTTP
    Dim resbody As Byte()
    Dim resdata As String

    xmlhttp.open("POST", "http://(サーバのアドレス)/testsite/sleep.aspx", False)
    xmlhttp.send()
    resbody = xmlhttp.responseBody
    resdata = System.Text.Encoding.GetEncoding("Shift-JIS").GetString(resbody)

    End Sub

    ※サーバ側のソース(sleep.aspx)
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Response.Write("A")
    Response.Flush()
    Response.Close()

    System.Threading.Thread.Sleep(10000)

    Response.End()
    End Sub
親記事 /過去ログ116より / 関連記事表示
削除チェック/

■68527  Re[1]: Response.close について
□投稿者/ WebSurfer -(2013/10/25(Fri) 16:38:28)
    No68526 (kos さん) に返信
    > ※サーバ側のソース(sleep.aspx)
    > Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    >
    > Response.Write("A")
    > Response.Flush()
    > Response.Close()
    >
    > System.Threading.Thread.Sleep(10000)
    >
    > Response.End()
    > End Sub
    >

    直接の回答ではありませんが・・・

    これが問題の原因ではないかもしれませんが、そもそも Response.Flush の後、
    Response.Close するのは間違いだと思います。

    話は、そこのところを直してからにした方がよさそうです。

    Response.Flush メソッドを使うと chunked コーディングになります。

    Response.Close は "クライアントへのソケット接続を閉じます" ということなの
    で、提示されているコードでは chunked コーディングでデータの終了を示す 0 が
    送信されないまま終了してしまうはずです。(Fiddler 等で見てください)

    また、Response.End の使用も推奨されていません。理由は、End メソッドでスロ
    ーされる ThreadAbortException がパフォーマンスに悪影響を及ぼすからだそう
    です。MSDN ライブラリを読んでください。

    Response.Close、Response.End は両方必要なく、HTTP パイプラインの最後まで
    普通に完了させれば済むのではないですか。
記事No.68526 のレス /過去ログ116より / 関連記事表示
削除チェック/

■68530  Re[2]: Response.close について
□投稿者/ PANG2 -(2013/10/25(Fri) 17:37:15)
    そもそも論で言うと、Webフォーム(aspx)ではなくジェネリックハンドラ(ashx)で作成するのよいでは?
記事No.68526 のレス /過去ログ116より / 関連記事表示
削除チェック/

■68567  Re[2]: Response.close について
□投稿者/ kos -(2013/10/28(Mon) 16:16:17)
    No68527 (WebSurfer さん) に返信
    回答ありがとうございます。

    > Response.Close は "クライアントへのソケット接続を閉じます" ということなの
    > で、提示されているコードでは chunked コーディングでデータの終了を示す 0 が
    > 送信されないまま終了してしまうはずです。(Fiddler 等で見てください)

    別サイトですが、検索していたら以下の書き込みがありました。私がやりたかったことは、まさにこれでした。
    どうやら処理の流れを見直す必要がありそうですね。
    http://social.msdn.microsoft.com/Forums/ja-JP/067d7e39-c922-4529-b5a1-ebc32a22409b/responseclosechunked?forum=aspnetja

    また、ソースについての助言、ありがとうございます。これを機に修正してみようと思います。


    No68530 (PANG2 さん) に返信
    回答ありがとうございます。

    > そもそも論で言うと、Webフォーム(aspx)ではなくジェネリックハンドラ(ashx)で作成するのよいでは?
    お恥ずかしい限りですが、ashxの存在を知りませんでした。情報ありがとうございます。
    修正しようとしているのは昔から使用しているシステムで、URLを変更するのは他への影響が少しありそうなので
    次に機能を追加する機会がありましたら、こちらを使用してみようと思います。


    この件については別の方法で対応するようにします。
    どうもありがとうございました。
記事No.68526 のレス / END /過去ログ116より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -