アプリケーションドメイン

5631 ワード

アプリケーションドメイン


勉強しています.Netコンテンツの前に、アプリケーションドメインに関する内容を知る必要があります.処理asp.Netに関連するクラスの多くはSystemに定義されている.Webプログラムセット.はい.Netでは、管理プログラムセットの最小論理ユニットはアプリケーションドメイン(AppDomain)である.はい.Netプログラムは、アプリケーションドメインにプログラムセットを動的にロードすることができる.ただし、ロード後のプログラムセットは単独でアンインストールすることはできません.アプリケーションドメイン単位でのみアンインストールできます.
アプリケーションドメインの4つのメカニズム:
≪独立性|Isolate|emdw≫:異なるアプリケーション・ドメイン間では直接アクセスできません.アプリケーションドメイン間でアクセスするオブジェクトはSystemから派生する必要があります.MarshalByRefObject.
≪アンインストール|Unload|emdw≫:ロードされたプログラム・セットは、アプリケーション・ドメイン単位でのみアンインストールできます.
≪セキュリティ|Security|emdw≫:アプリケーション・ドメインを境界とするセキュリティ・メカニズム.
≪構成|Configuration|ldap≫:アプリケーション・ドメインを境界とするプログラム構成.
asp.Netは、Webサイトのアプリケーションを管理するために独立したアプリケーションドメインにホストします.システムを通ることができますが.AppDomainは、カスタムアプリケーションドメインを作成することもできますが、asp.Netはシステムにあります.Web.Hostingネーミングスペースでは、プログラマがWebサーバプログラムに関連するアプリケーションドメインをホストし、アプリケーションドメインに関するパラメータを設定するのに役立つ、より便利な補助クラスが定義されています.
私たちのアプリケーションドメインは、Webアプリケーションで異なるアプリケーションドメインで実行されるため、ドメイン間アクセスの問題に関連しています.はい.Netでは、ドメイン間でアクセスするクラスはSystemから派生する必要がある.MarshalByRefObject.このようにして、Webアプリケーションドメインにあるオブジェクトにアクセスするリモートオブジェクトのエージェントオブジェクトを得ることができます.

Webアプリケーションドメイン


 ApplicationHost.CreateApplicationHostスタティックメソッドは、Webアプリケーションに必要なアプリケーションドメインを簡単に作成し、必要なパラメータを設定できます.
namespace System.Web.Hosting
{
    // Summary:
    //     Enables hosting of ASP.NET pages outside the Internet Information Services
    //     (IIS) application. This class enables the host to create application domains
    //     for processing ASP.NET requests.
    public sealed class ApplicationHost
    {
        // Summary:
        //     Creates and configures an application domain for hosting ASP.NET.
        //
        // Parameters:
        //   hostType:
        //     The name of a user-supplied class to be created in the new application domain.
        //
        //   virtualDir:
        //     The virtual directory for the application domain; for example, /myapp.
        //
        //   physicalDir:
        //     The physical directory for the application domain where ASP.NET pages are
        //     located; for example, c:\mypages.
        //
        // Returns:
        //     An instance of a user-supplied class used to marshal calls into the newly
        //     created application domain.
        //
        // Exceptions:
        //   System.PlatformNotSupportedException:
        //     The Web host computer is not running the Windows NT platform or a Coriolis
        //     environment.
        public static object CreateApplicationHost(Type hostType, string virtualDir, string physicalDir);
    }
}

hostType:ドメイン間でアクセスするための通信オブジェクトを表し、Systemから派生する必要がある.MarshalByRefObject.
VirtualDir:Webアプリケーションのルートに対応する仮想ディレクトリを表します.
physicalDir:Webアプリケーションが存在するファイルシステムのファイルディレクトリを示します.
に注意
この方法では、hostTypeが再ロードされる新しいアプリケーションドメインを作成する必要があります.hostTypeタイプを定義するプログラムセットを次の順序で探します.
1.GAC
2.Webサイトの物理ファイルディレクトリの下にあるbinフォルダ.
したがって、hostTypeを定義するプログラムセットをデジタル署名してGACにロードしない場合は、Webアプリケーションが存在するフォルダの下にbinフォルダを作成し、hostTypeを定義するプログラムセットをbinフォルダにコピーする必要があります.
  System.Type hostType = typeof(Intelligencer);
            Intelligencer intelligencer = System.Web.Hosting.ApplicationHost.CreateApplicationHost(hostType, "/", System.Environment.CurrentDirectory) as Intelligencer;
            Console.WriteLine("current domain id:{0}",AppDomain.CurrentDomain.Id);
            Console.WriteLine(intelligencer.Report());
  public class Intelligencer : System.MarshalByRefObject
    {
        public string Report()
        {
            System.AppDomain appDomain = System.AppDomain.CurrentDomain;
            StringBuilder sb = new StringBuilder();
            //        
            sb.AppendFormat("Domain id:{0}\r
", appDomain.Id); // web , HostingEnviroment sb.AppendFormat("virtualpath:{0\r
}
", HostingEnvironment.ApplicationVirtualPath); sb.AppendFormat("ApplicationPhysicalPath:{0}\r
", HostingEnvironment.ApplicationPhysicalPath); return sb.ToString(); } }