Programmering

Arbeider med applikasjonsdomener i .Net

Et applikasjonsdomene er en lett prosess og fungerer som en logisk grense som gir en isolasjonsgrense for kode, applikasjonssikkerhet, pålitelighet og versjonering.

Prosessgrenser har vært i bruk i lang tid for å isolere applikasjoner som kjøres i samme system. Merk at en prosess er et program som kjører. Denne isolasjonen hjelper å ha applikasjoner som ligger i minnet og utføres i forskjellige prosessgrenser. Så to tråder i det samme applikasjonsdomenet kan kommunisere med hverandre, men to tråder som tilhører to forskjellige applikasjonsdomener kan ikke.

En tråd er den minste utførelsesenheten i en prosess. Du kan ha flere applikasjonsdomener som ligger i en enkelt prosess og mer enn en tråd i et applikasjonsdomene. Et applikasjonsdomene (ofte kalt AppDomains) er en logisk enhet for isolasjon som gjør at du kan kjøre flere applikasjoner i samme prosess, samtidig som du sørger for at krasj av et bestemt applikasjonsdomene ikke påvirker funksjonen til et annet applikasjonsdomene.

Hvorfor trenger vi applikasjonsdomener?

Det vanlige språket kjøretidsmiljø sørger for at kode som kjører i ett program, ikke får tilgang til koden eller ressursene til et annet program som kjører i sammenheng med det administrerte miljøet. Hvordan oppnås dette? Administrert kode eller kode som kjøres inne i det administrerte miljøet, må gjennom en bekreftelsesprosess. Denne verifiseringen er gjort CLR (common language runtime) for å sikre typesikkerhet. Applikasjonsdomener hjelper CLR til å gi det nødvendige isolasjonsnivået slik at flere applikasjoner kan kjøres i sammenheng med en enkelt prosess uten mye ytelse for å øke skalerbarheten.

MSDN uttaler: "Applikasjonsdomener gir en sikrere og allsidig prosesseringsenhet som det vanlige språkets kjøretid kan bruke for å gi isolasjon mellom applikasjoner. Du kan kjøre flere applikasjonsdomener i en prosess med samme isolasjonsnivå som ville eksistere prosesser, men uten å pådra seg den ekstra kostnaden for å foreta samtaleprosesser eller bytte mellom prosesser. "

Opprette applikasjonsdomener programmatisk

Før vi oppretter et nytt applikasjonsdomene programmatisk, la oss utforske hvordan vi kan hente metadataene til det nåværende applikasjonsdomenet og utføre montering ved hjelp av C #. Følgende kodebit illustrerer hvordan du kan vise applikasjonsdomenet og monteringsnavnene til den nåværende utførende enheten.

bruker System;

bruker System.Threading;

bruker System.Reflection;

namespace ApplicationDomains

{

klasse Program

    {

statisk tomrom Main (streng [] args)

        {

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

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

Console.ReadLine ();

        }

    }

}

På samme måte kan du hente metadatainformasjonen til verten og underordnede domener ved å bruke de statiske medlemmene av AppDomain-klassen.

bruker System;

namespace ApplicationDomains

{

klasse Program

    {

statisk tomrom Main (streng [] args)

        {

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

Console.WriteLine ("Vertens domenenavn er:" + AppDomain.CurrentDomain.FriendlyName);

Console.WriteLine ("Vertens domene-id er:" + AppDomain.CurrentDomain.Id.ToString ());

Console.WriteLine ("Barnet domenenavn er:" + childApplicationDomain.FriendlyName);

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

Console.ReadKey ();

        }

    }

}

Du kan opprette et nytt applikasjonsdomene ved hjelp av en av de overbelastede CreateDomain-metodene i System.AppDomain-klassen. Merk at alle disse metodene er statiske, og du kan derfor påberope dem uten behov for å starte AppDomain-klassen. Her er listen over de overbelastede CreateDomain-metodene i System.AppDomain-klassen.

offentlig statisk AppDomain CreateDomain (streng appDomainName)

offentlig statisk AppDomain CreateDomain (String appDomainName, Evidence securityInformation)

offentlig statisk AppDomain CreateDomain (streng appDomainName,

Bevis sikkerhetInformasjon, AppDomainSetup appDomainSetupInformation)

offentlig statisk AppDomain CreateDomain (strengnavn,

Bevis sikkerhetInformasjon, String appBasePath, String appRelativeSearchPath,

bool shadowCopyFiles)

Du kan opprette et applikasjonsdomene ved hjelp av en av disse overbelastede CreateDomain-metodene - du kan bare sende navnet på applikasjonsdomenet du vil opprette som en parameter til denne metoden. Du kan også overføre sikkerhetspolicyene hvis du vil som en ekstra parameter. Metoden ExecuteAssembly brukes til å laste inn og utføre en samling i et applikasjonsdomene.

Følgende kodeliste viser hvordan du kan opprette et nytt applikasjonsdomene og deretter laste inn og utføre en samling i det nylig opprettede applikasjonsdomenet.

bruker System;

namespace ApplicationDomains

{

klasse Program

    {

statisk tomrom Main (streng [] args)

        {

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

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

Console.WriteLine ("Trykk på hvilken som helst tast for å laste ned applikasjonsdomenet ...");

Console.ReadKey ();

System.AppDomain.Unload (applicationDomain);

        }

    }

}

Når det ovennevnte programmet kjøres, opprettes et nytt applikasjonsdomene kalt "AppDomain", og deretter blir en samling (kalt "TestCode.exe") lastet inn i applikasjonsdomenet og utført. Applikasjonsdomenet som er opprettet, blir lastet ut når en tast er trykket.