Programiranje

Raziskovanje instanciranja, sočasnosti in dušenja v WCF

Pri delu v WCF se morate zavedati konceptov instanciranja, dušenja in sočasnosti za gradnjo storitev, ki so razširljive in lahko zagotavljajo boljšo pretočnost.

Regulacija v WCF se uporablja za omejevanje pretoka storitve, tako da je poraba virov (pomnilnik, procesor, disk, omrežje itd.) V sistemu na sprejemljivi ravni, tj. Zagotovite, da storitev ne porablja virov preko sprejemljivih meja. Razred ServiceThrottlingBehavior se lahko uporablja za nadzor uspešnosti storitev WCF.

Sočasnost

V WCF lahko pride do težav s sočasnostjo, ko dve ali več niti hkrati poskušata dostopati do istega vira. Upoštevajte, da lahko storitev WCF hkrati obravnava eno samo zahtevo. Sočasnost v WCF vam omogoča nadzor več aktivnih niti v InstanceContext v določenem trenutku. V bistvu vam pomaga konfigurirati število primerkov storitve, ki lahko postrežejo z več hkratnimi zahtevami. Tri možne vrste sočasnih načinov vključujejo naslednje:

Način enojne sočasnosti: V tem načinu ima lahko vsak kontekst primerka največ eno nit, ki lahko obdeluje zahtevo v določenem trenutku. Ko prispe naslednja zahteva, mora počakati, da je prva zahteva izpolnjena. To zahteva tudi sinhronizacijske ključavnice. Naslednji delček kode prikazuje, kako je mogoče uporabiti način enojne sočasnosti.

[ServiceBehavior (ConcurrencyMode = ConcurrencyMode.Single)]

storitev javnega razreda: IServiceContract

{

javni niz GetMessage ()

     {

vrnitev "Pozdravljen svet!";

     }

}

Večkratni način sočasnosti: V tem načinu storitev omogoča, da več niti istočasno dostopa do storitve. V načinu večkratne sočasnosti ima vsaka storitev WCF več niti, ki lahko istočasno obdelajo dohodne zahteve.

[ServiceBehavior (ConcurrencyMode = ConcurrencyMode.Multiple)]

storitev javnega razreda: IServiceContract

{

samo za branje objekt lockObj = nov objekt ();

javni niz GetMessage ()

    {

string sporočilo = string.Empty;

zaklepanje (lockObj)

        {

message = "Pozdravljen svet!";

        }

povratno sporočilo;

    }

}

Način sočasne preusmeritve: Čeprav lahko v načinu ponovnega vstopa posamezna nit dostopa do predmeta storitve, lahko nit še vedno zapusti storitev in nato pokliče drugo storitev. Naslednji delček kode prikazuje, kako lahko uporabite ta način.

[ServiceBehavior (ConcurrencyMode = ConcurrencyMode.Reentrant)]

storitev javnega razreda: IServiceContract

{

javni niz GetMessage ()

     {

vrnitev "Pozdravljen svet!";

     }

}

Lastnost InstanceContextMode se uporablja za določanje, kdaj bo ustvarjen primerek storitve in njegova trajnost. Upoštevajte, da sta InstanceContextMode in ConcurrencyMode podana s pomočjo ServiceBehaviorAttribute. Tri razpoložljive vrednosti kontekstnega načina primerka vključujejo: PerCall, PerSession in Single. V načinu PerCall je storitev enojna in brez državljanstva. Način PerSession je privzeti in se uporablja, kadar želite med klici, ki jih je poslal isti potrošnik, ohranjati informacije o stanju. Enotni način se uporablja, kadar mora vaša storitev vzdrževati podatke o stanju med odjemalci in vam v prihodnje ne bi bilo treba razširiti storitve.

Dušenje

Z uporabo dušilke lahko nadzorujete in optimizirate porabo virov ter dosežete način za uravnoteženje zmogljivosti storitve. Reguliranje v WCF je mogoče konfigurirati tako deklarativno kot programsko.

Lastnosti maxConcurrentCalls, maxConcurrentInsests, maxConcurrentSessions lahko konfigurirate deklarativno z uporabo oznake v konfiguracijski datoteki storitve, kot je prikazano v spodnjem delčku kode.

   

     

       

         

           

         

       

       

     

   

   

     

       

         

         

         

maxConcurrentInsistance

maxConcurrentSessions />

       

     

   

Lastnost maxConcurrentCalls se uporablja za omejitev skupnega števila klicev v vseh primerkih storitve. Privzeta vrednost je 16 na procesor. Lastnost maxConcurrentInsests se uporablja za določanje skupnega števila primerkov storitve, ki jih je mogoče dodeliti v določenem trenutku. Privzeta vrednost te lastnosti je Int32.MaxValue. Lastnost maxConcurrentSessions se uporablja za določanje skupnega števila sočasnih aktivnih sej, ki je dovoljeno za storitev v danem trenutku. Privzeta vrednost je 100 na procesor.

Zdaj, ko vemo, kako deklarativno nastaviti dušenje storitev v WCF, raziščimo, kako lahko programsko konfiguriramo dušenje storitev v WCF. Če želite programsko konfigurirati dušenje storitev v WCF, morate izkoristiti razred ServiceThrottlingBehavior. Naslednji seznam kod prikazuje, kako lahko izkoristite razred ServiceThrottlingBehavior za konfiguriranje sočasnih klicev, lastnosti seje in primerka.

ServiceHost serviceHost = nov ServiceHost (typeof (Service));

ServiceThrottlingBehavior throttleBehavior = serviceHost.Description.Behaviors.Find ();

če (throttleBehavior == null)

            {

throttleBehavior = novo ServiceThrottlingBehavior ();

throttleBehavior.MaxConcurrentCalls = 1000;

throttleBehavior.MaxConcurrentSessions = 250;

throttleBehavior.MaxConcurrentInsistance = 500;

serviceHost.Description.Behaviors.Add (throttleBehavior);

            }

V zgornjem delčku kode se ustvari primerek ServiceThrottlingBehaviour in njegove lastnosti nastavijo na ustrezne vrednosti. Nato se ta primerek doda zbirki vedenj primerka gostitelja storitve.

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