- - PR -
HttpContext.Currentがないの場合の仮想パス→物理パスの変換方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-11-03 22:52
ASP.NETで仮想パスを物理パスに変換する方法は、通常、
HttpContext.Current.Server.MapPath を使用すると思いますが、HttpContext.Currentがない場合には何かよい方法はありませんでしょうか? というのも、ウェブアプリ内部でタスクスケジューラのようなことをやっており、 そのタスク実行用のクラスの中で仮想パスを物理パスに変更したいのです。 具体的には、IISのアクセスログを定時に一次処理するのですが、そのログの置き場を ~/App_Data/の下にしています。 タスク実行用クラスは定期的に作成するスレッド中でインスタンス化され、そこでログを読み込もうとします。 しかし、スレッド内部ではHttpContext.Currentがないようで、パスの変換ができません。 パスを固定に書いてもよいのですが、できれば汎用性を確保したいので何かよい方法がありましたらアドバイスいただけますでしょうか。 よろしくお願いします。 |
|
投稿日時: 2008-11-04 00:04
Windows アプリケーションから、IIS の仮想ディレクトリ情報を取得したいということですよね。だとしたら、このあたりを調べたらどうだろう。
http://blogs.wankuma.com/naoko/archive/2007/01/11/55632.aspx http://msdn.microsoft.com/ja-jp/library/cc338291.aspx ※ 権限に注意 _________________ かるあ のメモ と スニペット |
|
投稿日時: 2008-11-04 00:09
あっ、質問読んでなかった(汗
ASP.NETから起動されるThreadの方で読みたいんですよね。 だとしたら、パラメータで起動するときに渡してあげないとダメな気がする。 _________________ かるあ のメモ と スニペット |
|
投稿日時: 2008-11-04 10:54
(string)AppDomain.CurrentDomain.GetData("DataDirectory")
保証はない。 --追記 もうちょっとまじめにやるなら HostingEnvironment.MapPath とか [ メッセージ編集済み 編集者: なちゃ 編集日時 2008-11-04 10:58 ] |
|
投稿日時: 2008-11-04 21:41
かるあさん、なちゃさん、アドバイスどうもありがとうございます。
試してみたところ、お二人のいずれの方法でも変換ができました。 かるあさんの方法では、スレッドの管理をするスケジューラ用クラスを ウェブアプリケーションの起動時に呼び出すため、 Global.asaxのApplication_Startメソッド内で、 仮想パスを物理パスに変換してからパラメータとして渡しました。 なちゃさんの方法は、HttpContext.Current.Server.MapPathの置き換えだけで できるので変更部分が少なくてよいですね。 最初はWeb.configとかに書いておくしかないのかな?とも考えていたのですが、 仮想パスってHttpContextとあんまり関係なさそうなので、別の手法もあるのでは? と思って質問してみたのですが、聞いてみてよかったです。 他にも使えそうなクラスやメソッドも知ることができましたし、 保守性も高まって大変助かりました。 どうもありがとうございました。 |
1