前回 はホスティングサービスが提供するサーバーにアプリケーションを設置する例をお見せしました。
今回は、アプリケーションルートが何を提供してくれるのか説明します。
アイコンの説明をずっと放置していました。歯車のアイコンがアプリケーションルートで、フォルダに地球が付いたアイコンが仮想ディレクトリです。
アプリケーションルート | |
仮想ディレクトリ |
アプリケーションルートの直下に以下を設置可能です。
アプリケーションルート単位で以下の設定が可能です。
アプリケーションルートをまたぐ(歯車が二つ関係するページ遷移をする)と、Session 変数に格納した値にアクセスできなくなります。Session 情報は Web アプリケーションごとに(歯車アイコン単位で)管理されているのです。
異なるドメン間でショッピングカートを渡すには - Insider.NET
この掲示板では http と https を切り替えるから Session 情報が失われるとか、ドメイン(例えば、yoursite.co.jp と ssl.hostingservice.com)をまたぐから Session 情報が失われるとか、Cookie がどうとか色々と書いてあります。それぞれ間違いは書いていません。
しかし、厳密に、かつ一言でズバリの記述をするなら、「アプリケーションルートをまたぐページ遷移をした場合に Session 情報が引き継げない」となります。
もう少し具体的に説明します。
上の図で .aspx ページが 3 つ有るとします。
b.aspx で格納した Session 変数の値を、a.aspx からアクセス可能です。(a.aspx と b.aspx は同じ歯車 test2 に所属しているから)
しかし、c.aspx では読むことが出来ません。(c.aspx のみ test4 アプリケーションに所属しているから)
ここまでOK?
直接関係無いけど、むかーし、Visual Studio .NET 2003 の頃、.aspx ページごとにプロジェクト(.csproj だっけか?)作成していて、その結果 IIS に無数の歯車が存在しているスゴイのがあったな・・・(笑)セッション変数が使えないということです
昔話続けてすまんが Visual Studio の使い方、Web アプリプロジェクトとクラスライブラリプロジェクトの使い方がなってない現場が多くて、面白かった・・・被害者でもあったっちゅうことですよ(泣)
.dll を格納する bin ディレクトリは 歯車の直下に設置しなければなりません。bin ディレクトリのすぐ上が歯車になってないと、「.dll が読み込めない」エラーになります。
bin ディレクトリを使う web アプリをこんな感じで作ります。test20061217 ウェブアプリが test20061217lib クラスライブラリをプロジェクト参照しています。アプリ自体は UserAgent 文字列をページに表示するだけの単純なものです。直接関係ないですけど、クラスライブラリの中から各種情報(Request や Response)にアクセスするには、HttpContext.Current を使います。
アプリをサーバーに配置します。
アプリケーション構成せず(歯車でない)の状態だと アセンブリが見つからないのでエラーになります。
自 .aspx からサイトルート方向に歯車を探し、最初に見つかった歯車の直下の bin ディレクトリからアセンブリ読み取りを試みます。この例の場合、最初に見つかる歯車は test20061217 ではなくサイトルートです。で、サイトルート直下の bin ディレクトリからアセンブリ読み取りを試みるのですが、そこにはアセンブリを配置していない(そもそもサイトルートに bin フォルダを設けていない)のでエラーになるというわけです。
test20061217 を 歯車にすると、bin ディレクトリに存在するアセンブリを認識して、アプリが正常動作します。画像は面倒なので省略します。
7月6日 に取り上げていますが、下のエラーメッセージが出た場合は、アプリケーション構成し忘れ(アイコンが歯車になっていない)です。
アプリケーション レベルを超えて allowDefinition='MachineToApplication' として登録されているセクションを使うことはできません。このエラーは、仮想ディレクトリが IIS でアプリケーションとして構成されなかった場合に発生します。 |
その1、その2、この文書で言いたかったのはですねぇ・・・IIS 触らないとわからないことは沢山あるよ、VWD + XP Home じゃだめだよっちゅうことです。せめて、XP Pro. 買って IIS 5.1 を触りましょうよと。Vista が出た今、XP Pro. って買えるのか?
どうやら新しいステージに進まれるようです。おめでとうございます。
Windows とか Active Directory とか IIS とかどうでもいいよね、重要なのは DB だよね、と常々思う自分がここにいる。