- PR -

Application_OnEnd(Global.asax)

1
投稿者投稿内容
しましま
会議室デビュー日: 2003/04/01
投稿数: 14
投稿日時: 2003-11-28 18:10
こんにちは、しましまといいます。
現在、ASP.NETのGlobal.asax上に以下のようなコードを
記述し、アプリケーションの終了時にあるアプリケーション
状態の情報をファイルに書き込もうとしています。

Sub Application_OnEnd()
Dim sw As New StreamWriter(Server.MapPath("SAMPLE.txt"),False)
sw.WriteLine(Application("xxxx"))
sw.Close()
End Sub

が、IISを終了しても、サーバ自体を終了しても何も動作しません。
いったい、何が原因でしょうか?
お分かりになる方、ぜひお知恵を拝借させてください。
ヲヲヌキ
会議室デビュー日: 2002/09/26
投稿数: 3
投稿日時: 2003-11-28 20:38
ヲヲヌキです。

> Dim sw As New StreamWriter(Server.MapPath("SAMPLE.txt"),False)

IIS 5.0のApplication_OnEndイベントのドキュメントには、「Server.MapPathメソッドは利用できない」と記述してあります。

とりあえずファイル名をServer.MapPathメソッドで取得するのではなく、固定の文字列で試してみてはいかがでしょうか。
しましま
会議室デビュー日: 2003/04/01
投稿数: 14
投稿日時: 2003-11-28 20:45
残念ながら、絶対パスで記述してもダメでした。

ちなみに、global.asax内でServerオブジェクトが使用できないのは
ASPの場合だったと思うのですが、違うのでしょうか?ASP.NETでは
HttpApplication.Serverプロパティとして公開されているので、
問題なく使えると考えていたのですが...
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-11-28 20:53
しましまさん、こんばんは。

引用:

Dim sw As New StreamWriter(Server.MapPath("SAMPLE.txt"),False)
sw.WriteLine(Application("xxxx"))
sw.Close()


取り敢えず、このコードをボタンクリック等の別のイベントハンドラに記述して、デバッグ実行してみては如何でしょうか。
しましま
会議室デビュー日: 2003/04/01
投稿数: 14
投稿日時: 2003-11-28 21:26
ありがとうございます。

通常の「.aspx」ファイルでの動作ではまったく問題ありません。
しかし、Application_Endイベントはいつ発生しているのでしょう
か?とりあえずイベントログへの吐き出しのコードを記述してみた
のですが、Application_OnStartは記録されるのに、OnEndでは
記録されません。。。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-28 21:29
アプリケーションが終了されていない=オンメモリのまま、ということですかね。

スタティックな変数がない、単純なアプリケーションで、すべての接続がなくなり、IISが保持するクッキーやセッションの情報がなくなる時間待ってみたら、どうなりますかね?


↓↓↓↓↓じゃぁ、たぶん、ガベージコレクトされたんでしょう。↓↓↓↓↓

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-11-28 21:56 ]
しましま
会議室デビュー日: 2003/04/01
投稿数: 14
投稿日時: 2003-11-28 21:52
おぉ!行きました!!(なぜか...)

しかし、IISからサイトを停止したタイミングでアプリケーションも
終了されると思っていたのですが、タイムラグがあるものなのでしょ
うか...特にわたしの場合、アプリケーション内でクッキーもShared
変数も使用していなかったのですが。

いずれにせよ、解決です。ありがとうございました。
1

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