Programmēšana

Darbs ar lietojumprogrammu domēniem .Net

Lietojumprogrammas domēns ir viegls process un darbojas kā loģiska robeža, kas nodrošina koda, lietojumprogrammu drošības, uzticamības un versiju izolācijas robežu.

Procesu robežas jau ilgu laiku tiek izmantotas, lai izolētu lietojumprogrammas, kuras tiek izpildītas vienā un tajā pašā sistēmā. Ņemiet vērā, ka process ir programmas eksemplārs, kas darbojas. Šī izolācija palīdz lietojumprogrammām atrasties atmiņā un izpildīt dažādās procesa robežās. Tātad divi pavedieni vienā un tajā pašā lietojumprogrammas domēnā var sazināties savā starpā, bet divi pavedieni, kas pieder diviem dažādiem lietojumprogrammu domēniem, nevar.

Vītne ir mazākā izpildes vienība procesā. Jums var būt vairāki lietojumprogrammu domēni, kas atrodas vienā procesā, un vairāk nekā viena pavediens lietojumprogrammas domēnā. Lietojumprogrammas domēns (parasti to sauc par AppDomains) ir loģiska izolācijas vienība, kas ļauj vienā un tajā pašā procesā izpildīt vairākas lietojumprogrammas, vienlaikus nodrošinot, ka konkrēta lietojumprogrammas domēna avārija neietekmē citas lietojumprogrammas domēna darbību.

Kāpēc mums ir nepieciešami lietojumprogrammu domēni?

Kopējās valodas izpildlaika vide nodrošina, ka kods, kas darbojas vienā lietojumprogrammā, nevar piekļūt citas lietojumprogrammas kodam vai resursiem, kas darbojas pārvaldītās vides kontekstā. Kā tas tiek paveikts? Pārvaldītajam kodam vai kodam, kas tiek izpildīts pārvaldītās vides iekšienē, jāiziet verifikācijas process. Šī pārbaude tiek veikta CLR (kopīgas valodas izpildlaiks), lai nodrošinātu tipa drošību. Lietojumprogrammu domēni palīdz CLR nodrošināt nepieciešamo izolācijas līmeni, lai vairākas lietojumprogrammas varētu izpildīt viena procesa kontekstā, lai palielinātu mērogojamību, nav daudz veiktspējas.

MSDN norāda: "Lietojumprogrammu domēni nodrošina drošāku un daudzpusīgāku apstrādes vienību, kuru kopīgās valodas izpildlaiks var izmantot, lai nodrošinātu izolāciju starp lietojumprogrammām. Vienā procesā varat palaist vairākus lietojumprogrammu domēnus ar tādu pašu izolācijas līmeni, kāds būtu atsevišķos procesos. procesus, bet neradot papildu izmaksas, veicot starpprocesu zvanus vai pārslēdzoties starp procesiem. "

Programmiski izveidojiet lietojumprogrammu domēnus

Pirms programmatiski izveidojam jaunu lietojumprogrammas domēnu, izpētīsim, kā mēs varam izgūt pašreizējā lietojumprogrammas domēna metadatus un izpildīt montāžu, izmantojot C #. Šis koda fragments ilustrē, kā jūs varat parādīt lietojumprogrammas domēnu un pašreiz izpildāmās asamblejas montāžas nosaukumus.

izmantojot sistēmu;

izmantojot System.Threading;

izmantojot System.Reflection;

nosaukumvieta ApplicationDomains

{

klases programma

    {

static void Main (virkne [] args)

        {

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

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

Console.ReadLine ();

        }

    }

}

Līdzīgi jūs varat izgūt resursdatora un pakārtoto domēnu metadatu informāciju, izmantojot AppDomain klases statiskos locekļus.

izmantojot sistēmu;

nosaukumvieta ApplicationDomains

{

klases programma

    {

static void Main (virkne [] args)

        {

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

Console.WriteLine ("resursdatora domēna nosaukums ir:" + AppDomain.CurrentDomain.FriendlyName);

Console.WriteLine ("resursdatora domēna ID ir:" + AppDomain.CurrentDomain.Id.ToString ());

Console.WriteLine ("Bērna domēna nosaukums ir:" + childApplicationDomain.FriendlyName);

Console.WriteLine ("Bērna domēna ID ir:" + childApplicationDomain.Id.ToString ());

Console.ReadKey ();

        }

    }

}

Varat izveidot jaunu lietojumprogrammas domēnu, izmantojot vienu no pārslogotajām System.AppDomain klases metodēm. Ņemiet vērā, ka visas šīs metodes ir statiskas, tāpēc jūs varat tās izsaukt, lai nepieļautu AppDomain klases instancēšanu. Šeit ir saraksts ar System.AppDomain klases pārslogotajām metodēm CreateDomain.

publiskais statiskais AppDomain CreateDomain (virkne appDomainName)

publiskais statiskais AppDomain CreateDomain (virkne appDomainName, Evidence securityInformation)

publiskais statiskais AppDomain CreateDomain (virkne appDomainName,

Pierādījumu drošībaInformācija, AppDomainSetup appDomainSetupInformation)

publiskais statiskais AppDomain CreateDomain (virknes nosaukums,

Pierādījumu drošībaInformācija, String appBasePath, String appRelativeSearchPath,

bool shadowCopyFiles)

Lietojumprogrammas domēnu varat izveidot, izmantojot jebkuru no šīm pārslogotajām CreateDomain metodēm - šai metodei varat vienkārši nodot tās lietojumprogrammas domēna nosaukumu, kuru vēlaties izveidot kā parametru. Varat arī nodot drošības politikas kā papildu parametru. Metode ExecuteAssembly tiek izmantota, lai ielādētu un izpildītu montāžu lietojumprogrammas domēnā.

Šis kodu saraksts parāda, kā jūs varat izveidot jaunu lietojumprogrammas domēnu un pēc tam ielādēt un izpildīt montāžu jaunizveidotajā lietojumprogrammas domēnā.

izmantojot sistēmu;

nosaukumvieta ApplicationDomains

{

klases programma

    {

static void Main (virkne [] args)

        {

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

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

Console.WriteLine ("Nospiediet jebkuru taustiņu, lai izkrautu lietojumprogrammas domēnu ...");

Console.ReadKey ();

System.AppDomain.Unload (applicationDomain);

        }

    }

}

Kad tiek izpildīta iepriekš minētā programma, tiks izveidots jauns lietojumprogrammas domēns ar nosaukumu "AppDomain" un pēc tam lietojumprogrammas domēnā ielādēta un izpildīta asambleja (ar nosaukumu "TestCode.exe"). Izveidotais lietojumprogrammas domēns tiks izkrauts, tiklīdz tiks nospiests taustiņš.

$config[zx-auto] not found$config[zx-overlay] not found