Programmering

Arbejde med applikationsdomæner i .Net

Et applikationsdomæne er en letvægtsproces og fungerer som en logisk grænse, der giver en isolationsgrænse for kode, applikationssikkerhed, pålidelighed og versionering.

Procesgrænser har været i brug i lang tid for at isolere applikationer, der udføres i det samme system. Bemærk, at en proces er den kørende forekomst af et program. Denne isolation hjælper med at få applikationer til at opholde sig i hukommelsen og udføre i forskellige procesgrænser. Så to tråde i det samme applikationsdomæne kan kommunikere med hinanden, men to tråde, der hører til to forskellige applikationsdomæner, kan ikke.

En tråd er den mindste eksekveringsenhed inden for en proces. Du kan have flere applikationsdomæner inde i en enkelt proces og mere end en tråd inde i et applikationsdomæne. Et applikationsdomæne (almindeligvis kaldet AppDomains) er en logisk isolationsenhed, der giver dig mulighed for at udføre flere applikationer inden for den samme proces, samtidig med at det sikres, at nedbrud af et bestemt applikationsdomæne ikke påvirker funktionen af ​​et andet applikationsdomæne.

Hvorfor har vi brug for applikationsdomæner?

Det fælles sprog runtime-miljø sikrer, at kode, der kører i en applikation, ikke kan få adgang til koden eller ressourcerne til en anden applikation, der kører inden for det administrerede miljø. Hvordan opnås dette? Administreret kode eller kode, der udføres inde i det administrerede miljø, skal gennemgå en verificeringsproces. Denne verifikation er udført CLR (common language runtime) for at sikre typesikkerhed. Applikationsdomæner hjælper CLR med at tilvejebringe det krævede niveau for isolering, så flere applikationer kan udføres inden for rammerne af en enkelt proces uden meget ydeevne for at øge skalerbarheden.

MSDN siger: "Applikationsdomæner giver en mere sikker og alsidig behandlingsenhed, som det almindelige sprog runtime kan bruge til at tilvejebringe isolering mellem applikationer. Du kan køre flere applikationsdomæner i en enkelt proces med det samme isolationsniveau, der ville eksistere i separate processer, men uden at pådrage sig den ekstra omkostning ved at foretage opkald på tværs af processer eller skifte mellem processer. "

Oprettelse af applikationsdomæner programmatisk

Før vi opretter et nyt applikationsdomæne programmatisk, lad os undersøge, hvordan vi kan hente metadataene for det aktuelle applikationsdomæne og udføre samling ved hjælp af C #. Følgende kodestykke illustrerer, hvordan du kan få vist applikationsdomænet og forsamlingsnavne på den aktuelt udførte samling.

ved hjælp af System;

ved hjælp af System.Threading;

ved hjælp af System.Reflection;

namespace ApplicationDomains

{

klasse Program

    {

statisk ugyldigt Main (streng [] args)

        {

Console.WriteLine (Thread.GetDomain (). FriendlyName);

Console.WriteLine (Assembly.GetEntryAssembly (). FullName);

Console.ReadLine ();

        }

    }

}

På samme måde kan du hente metadataoplysningerne for værten og underordnede domæner ved hjælp af de statiske medlemmer af AppDomain-klassen.

ved hjælp af System;

namespace ApplicationDomains

{

klasse Program

    {

statisk ugyldigt Main (streng [] args)

        {

AppDomain childApplicationDomain = AppDomain.CreateDomain ("ApplicationDomain");

Console.WriteLine ("Værtsdomænenavnet er:" + AppDomain.CurrentDomain.FriendlyName);

Console.WriteLine ("Værtsdomæne-id'et er:" + AppDomain.CurrentDomain.Id.ToString ());

Console.WriteLine ("Underordnet domænenavn er:" + childApplicationDomain.FriendlyName);

Console.WriteLine ("Underordnet domæne-id er:" + childApplicationDomain.Id.ToString ());

Console.ReadKey ();

        }

    }

}

Du kan oprette et nyt applikationsdomæne ved hjælp af en af ​​de overbelastede CreateDomain-metoder i System.AppDomain-klassen. Bemærk, at alle disse metoder er statiske, så du kan påberåbe dem uden behov for at starte AppDomain-klassen. Her er listen over de overbelastede CreateDomain-metoder i System.AppDomain-klassen.

offentlig statisk AppDomain CreateDomain (String appDomainName)

offentlig statisk AppDomain CreateDomain (String appDomainName, Evidence securityInformation)

offentlig statisk AppDomain CreateDomain (String appDomainName,

Bevis sikkerhedInformation, AppDomainSetup appDomainSetupInformation)

offentlig statisk AppDomain CreateDomain (strengnavn,

Bevis sikkerhedInformation, String appBasePath, String appRelativeSearchPath,

bool shadowCopyFiles)

Du kan oprette et applikationsdomæne ved hjælp af en af ​​disse overbelastede CreateDomain-metoder - du kan bare videregive navnet på det applikationsdomæne, du gerne vil oprette, som en parameter til denne metode. Du kan også overføre sikkerhedspolitikkerne, hvis du ønsker det som en ekstra parameter. Metoden ExecuteAssembly bruges til at indlæse og udføre en samling i et applikationsdomæne.

Følgende kodeliste viser, hvordan du kan oprette et nyt applikationsdomæne og derefter indlæse og udføre en samling inde i det nyoprettede applikationsdomæne.

ved hjælp af System;

namespace ApplicationDomains

{

klasse Program

    {

statisk ugyldigt Main (streng [] args)

        {

AppDomain applicationDomain = System.AppDomain.CreateDomain ("AppDomain");

applicationDomain.ExecuteAssembly (@ "D: \ Projects \ TestCode.exe");

Console.WriteLine ("Tryk på en vilkårlig tast for at aflæse applikationsdomænet ...");

Console.ReadKey ();

System.AppDomain.Unload (applicationDomain);

        }

    }

}

Når ovenstående program udføres, oprettes et nyt applikationsdomæne med navnet "AppDomain" og derefter en samling (med navnet "TestCode.exe") indlæst i applikationsdomænet og udført. Det applikationsdomæne, der er oprettet, vil blive aflæst, når der trykkes på en tast.