ServerManager(Microsoft.Web.Administration.dll)を使用して、IIS 7.のWebサイト内にアプリケーションを作成します。このアプリケーション内にアプリケーションを作成するか、仮想ディレクトリをアプリケーション(iisマネージャー機能の右クリック->アプリケーションに変換など)これはどのようにして可能ですか?このlibに関するドキュメントはほとんど見つかりませんでしたが、この特定の機能に関するドキュメントはありませんでした。
これを行う方法は、サイト内のすべてのアプリケーションのフラット化されたツリーであるSite.Applications
コレクションを操作することです。
これらの例のために、コンテンツがローカルハードディスクのd:\mysite\www
にある「MySite」というサイトを想定します。サイトのIIS番号は3
であり、サイトは "MySite"とも呼ばれる独自のアプリケーションプールに存在します。
サイトの次のフォルダー構造も想定します
まず、アプリケーションを追加するサイトを取得するために、変数site
を全体的に使用します。
// Get my site
Site site = serverManager.Sites.First(s => s.Id == 3);
ルート "/"アプリケーション:
すべてのサイトには「ルート」アプリケーションがあります。 applicationHost.config
にある%systemroot%\windows\system32\inetsrv\config
を開き、サイトの<site>
ノードを見つけると、次のようになります。
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\mysite\www" />
</application>
</site>
各<site>
には<application>
のコレクションが含まれています。ルートアプリケーションを定義する少なくとも1つのアプリケーション/
が常に存在します。
applicationPool
属性は、使用するアプリケーションプールを指定します。
単一の子要素があることに注意してください:virtualDirectory
。
すべてのapplication
にはvirtualDirectory
要素の子コレクションがあり、通常、このコレクションには少なくとも1つの要素があります。
ルートアプリケーション内のデフォルトの<virtualDirectory>
は、次のことを示しています。
path="/"
)であり、d:\MySite\www
(physicalPath="d:\MySite\www"
)に物理的に配置されていること。各path
のvirtualDirectory
は、親path
パスで指定されたapplication
を基準にしています。
仮想ディレクトリの追加:
ファイルシステムのどこかにマップされた「サイトルート」に仮想ディレクトリを追加したい場合は、次のようにします。
Application rootApp = site.Applications.First(a => a.Path == "/");
rootApp.VirtualDirectories.Add("/vdir_1", @"D:\MySite\other_content");
serverManager.CommitChanges();
結果の構成は次のようになります。
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="D:\MySite\www" />
<virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
</application>
</site>
IIS Manager:
既存の仮想ディレクトリへの仮想ディレクトリの追加:
子仮想ディレクトリをvdir1
に追加する場合は、次のようにします。
root.VirtualDirectories.Add("/vdir_1/sub_dir1", @"d:\MySite\more_content");
この結果は:
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="D:\MySite\www" />
<virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
<virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
</application>
</site>
IISマネージャー:
仮想ディレクトリを追加するときは、次の2つの点に注意してください。
path
は常に親アプリケーションpath
に対して相対的です。path
の最後の部分。 /vdir_1
および.../sub_dir1
は仮想ディレクトリの名前になりますd:\MySite\www
)。つまり、path
はすでに存在するものをオーバーレイできる必要があります。そうしないと、仮想ディレクトリがIISマネージャに表示されません。その最後の点に関して、たとえば、/vdir_2
という物理フォルダーまたは仮想ディレクトリはありませんが、次のコードは完全に合法です。
root.VirtualDirectories.Add("/vdir_2/sub_dir1", @"d:\MySite\even_more_content");
IISマネージャに/vdir_2/sub_dir1
が表示されることはありませんが、合法であり、実際に閲覧することができます。applicationHost.config
にも表示されます。
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="D:\MySite\www" />
<virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
<virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
<virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
</application>
</site>
フォルダーをアプリケーションに変換:
ASP.NETアプリケーションをサイトの/app_1
フォルダーにアップロードし、これを独自のアプリケーションに変換したい場合は、次のようにします。
Application app = site.Applications.Add("/app_1", @"d:\MySite\www\app_1");
// set application pool, otherwise it'll run in DefaultAppPool
app.ApplicationPoolName = "MySite";
serverManager.CommitChanges();
applicationHost.config
では、新しい<application>
要素が追加されていることがわかります。
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="D:\MySite\www" />
<virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
<virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
<virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
</application>
<application path="/app_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
</application>
</site>
IISでは、
これは、「アプリケーションに変換」を右クリックするのと同じです。
既存のアプリケーションにアプリケーションを追加:
アプリケーションを既存のアプリケーションの子として追加するのは非常に簡単です。 /app_1/sub_app_1
を/app_1
のサブアプリケーションにしたいとします。
私たちは単にそうするでしょう:
Application app =
site.Applications.Add("/app_1/sub_app_1", @"d:\mysite\www\app_1\sub_app_1");
app.ApplicationPoolName ="MySite";
結果の構成は次のようになります。
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="D:\MySite\www" />
<virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
<virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
<virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
</application>
<application path="/app_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
</application>
<application path="/app_1/sub_app_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\mysite\www\app_1\sub_app_1" />
</application>
</site>
IISの場合:
アプリケーションに仮想ディレクトリを追加:
このアプリケーションに仮想ディレクトリを追加したい場合は、次のようにします。
Application app = site.Applications.First(a => a.Path == "/app_1");
app.VirtualDirectories.Add("/vdir_1", @"d:\MySite\other_content");
applicationHost.config
では、新しい<virtualDirectory>
要素が追加されていることがわかります。
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="D:\MySite\www" />
<virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
<virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
<virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
</application>
<application path="/app_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
<virtualDirectory path="/vdir_1" physicalPath="d:\MySite\other_content" />
</application>
</site>
IISでは、
ここでも、仮想パス/vdir1
は常に、含まれているアプリケーションのパスに相対的であることに注意することが重要です。
既存の仮想ディレクトリをアプリケーションに変換:
作成した仮想ディレクトリ(/app_1/vdir1
)をアプリケーションに変換したい場合はどうなるでしょうか。これは2つのステップで行う必要があります。
// Get the application
Application app_1 = site.Applications.First(a => a.Path == "/app_1");
// Find the virtual directory
VirtualDirectory vdir_1 = app_1.VirtualDirectories.First(v => v.Path == "/vdir_1");
// Remove it from app_1
app_1.VirtualDirectories.Remove(vdir_1);
// Create our application
Application vdir_1_app = site.Applications.Add("/app_1/vdir_1", vdir_1.PhysicalPath);
// set application pool, otherwise it'll run in DefaultAppPool
vdir_1_app.ApplicationPoolName = "MySite";
serverManager.CommitChanges();
結果のapplicationHost.config
は次のようになります。
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="D:\MySite\www" />
<virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
<virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
<virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
</application>
<application path="/app_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
</application>
<application path="/app_1/vdir_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\MySite\other_content" />
</application>
</site>
IIS Managerでは、
既存の仮想ディレクトリにアプリケーションを追加:
アプリケーションを仮想ディレクトリに追加したい場合はどうなりますか?この例では、先に作成した仮想ディレクトリ/vdir_1/sub_dir1
にアプリケーションを追加します。
Application app =
site.Applications.Add("/vdir_1/sub_dir1/app_2", @"d:\mysite\other_content");
app.ApplicationPoolName = "MySite";
serverManager.CommitChanges();
結果の構成は次のようになります。
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="D:\MySite\www" />
<virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
<virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
<virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
</application>
<application path="/app_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
</application>
<application path="/app_1/vdir_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\MySite\other_content" />
</application>
<application path="/vdir_1/sub_dir1/app_2" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\mysite\other_content" />
</application>
</site>
そしてIIS managerで見る:
既存の子フォルダをアプリケーションに変換:
最後の例として、/other_apps/sub_app_1
をアプリケーションに変換します。
コードは次のようになります。
Application app =
site.Applications.Add("/other_apps/sub_app_1", @"d:\mysite\other_content");
app.ApplicationPoolName="MySite";
serverManager.CommitChanges();
結果の構成:
<site name="MySite" id="3">
<application path="/" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="D:\MySite\www" />
<virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
<virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
<virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
</application>
<application path="/app_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
</application>
<application path="/app_1/vdir_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\MySite\other_content" />
</application>
<application path="/vdir_1/sub_dir1/app_2" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\mysite\other_content" />
</application>
<application path="/other_apps/sub_app_1" applicationPool="MySite">
<virtualDirectory path="/" physicalPath="d:\mysite\other_content" />
</application>
</site>
IISマネージャ:
これがサイト、アプリケーション、仮想ディレクトリの関係の説明に役立つことを願っています。