- PR -

Response.Endの後、Visual Studioのデバッグモードで動かない

1
投稿者投稿内容
AUST
会議室デビュー日: 2005/11/11
投稿数: 11
投稿日時: 2005-11-11 13:22
他スレッドを確認したのですが、同事象トラブルが見つからなかったため、投稿させていただきます。

ファイルダウンロード機能で使用している
HttpContext.Current.Response.Endですが、
Visual Studioのデバッグモードで動かしますと、
ThreadAbortExceptionエラーが発生します。

ところが、これをVisual Studioデバッグモードを使わずに起動しますと、
ファイルダウンロード・ダイアログが正常に動作するのです。

非常に解せない事象ですが、
どなたかこの回避方法について教えていただけないでしょうか?

なお、当掲示板にもありましたが、
http://support.microsoft.com/default.aspx?scid=kb;ja;312629
このとおりに、
Response.EndをHttpContext.Current.ApplicationInstance.CompleteRequest()
に置き換えてみて、VisualStudioデバッグモードでテストしました。
たしかに当該エラーは回避できましたが、
ファイルダウンロード・ダイアログは動きません。
そして、VisualStudioデバッグモードを使用しないで起動しますと、
正常に動作する(ファイルダウンロード・ダイアログが表示される)のです、、、、

なぜなのでしょうか、、、?
ご教授よろしくお願いいたします。

@@@@@@@@@@@@@
If FileDataBytes.Length > 0 Then
With HttpContext.Current.Response
.Clear()
.ClearHeaders()
.ClearContent()
If Not (ContentType = "") Then
.ContentType = ContentType
End If
strFileName = System.Web.HttpUtility.UrlEncode(strFileName)
.AppendHeader("Content-disposition", "attachment; filename=" & strFileName)
.BinaryWrite(FileDataBytes)
.End() '<-- ここです!
@@@@@@@@@@@@@@@@@@@
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-11-11 14:48
引用:

AUSTさんの書き込み (2005-11-11 13:22) より:
Visual Studioのデバッグモードで動かしますと、ThreadAbortExceptionエラーが発生します。

ところが、これをVisual Studioデバッグモードを使わずに起動しますと、ファイルダウンロード・ダイアログが正常に動作するのです。



「ところが」で接続するのはおかしいですよね。
ThreadAbortExceptionが出ることと、ダイアログが正常に動作することは相反しませんからね。
VisualStudioデバッグモードを使わずに起動した場合は、ThreadAbortExceptionが出でいて、そしてダイアログは正常に動作しているはずです。例外が出たことが見えていないだけです。
問題はThreadAbortExceptionが出でいることではなくて、VisualStudioデバッグモードを使った時に、使わない時と動きが異なる(ダイアログが正常に動作しない)ことです。

VisualStudioデバッグモードを使った時には、ThreadAbortExceptionが出た後ブラウザの画面の再描画がされたりするんですか?
それとも、ブラウザもそのまま、ダイアログも出ないという状況ですか?
AUST
会議室デビュー日: 2005/11/11
投稿数: 11
投稿日時: 2005-11-11 15:03
返信ありがとうございます。

一郎さんのおっしゃるとりですね。VisualStudioデバッグモードを使わずに起動した場合は、ThreadAbortExceptionが出でいて、そしてダイアログは正常に動作しています。例外が出たことが見えていないというご指摘のとおりだと思います。

次に、以下のご質問の件ですが、

『VisualStudioデバッグモードを使った時には、ThreadAbortExceptionが出た後ブラウザの画面の再描画がされたりするんですか?
それとも、ブラウザもそのまま、ダイアログも出ないという状況ですか? 』

後者のとおりになっています。つまり、ブラウザもそのままでファイルダウンロード・ダイアログが出てこないという状況です。

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-11-11 15:32
まさか、デバッガで処理を止めたままってことはないですよね。
VisualStudioの「開始」の右向き三角(青いやつ)は押せない状態になってますね?

VisualStudioデバッグモードで実行して、ブレークポイントなどで止めなかった場合はどうなります?

AUST
会議室デビュー日: 2005/11/11
投稿数: 11
投稿日時: 2005-11-11 15:53
ありがとうございます。

ご指摘の件、確認してみました。

>VisualStudioの「開始」の右向き三角(青いやつ)は押せない状態になってますね?

はい、押せない状態になっています。

>VisualStudioデバッグモードで実行して、ブレークポイントなどで止めなかった場合はどうなります?

な、なんと!!!ブレークポイントをすべて削除した後に、再度確認したところ、ファイルダウンロードダイアログが表示されました!色々と試してみますと、どうやらひとつでもブレークポイントでひっかかるとダイアログが表示されないようです。

なぜなんでしょうか???これですと、ブレークして確認することができないということになりますね、、、


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-11-12 09:06
 何を「問題」と考えているのか、いまいちわからないのですが、ThreadAbortException が発生するのは“仕様”です。ちゃんとリファレンスに書いてあるので、確認してください。
 また、その例外が特殊な例外であることも書いてあります。
___________________________________________________________________
□ written by Jitta on 2005/11/12
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006
_________________
1

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