WCF bezeroak zerbitzaria zintzilikatzen du konexioaren akatsa izan arte

Beheko testua galdera honi kolorea zabaltzeko eta gehitzeko ahalegina da:

Nola saihestu dezaket gaizki jokatzen duen bezero batek zerbitzu osoa kentzea?

Eszenatoki hau dut funtsean: WCF zerbitzu bat martxan dago bezeroaren atzera-itzultze batekin, komunikazio sinplea eta zuzenekoa izanik, ez oso honen desberdina:

public interface IMyClientContract
{
  [OperationContract(IsOneWay = true)]
  void SomethingChanged(simpleObject myObj);
}

Metodo honi potentzialki milaka aldiz segundora deitzen diot. zerbitzutik, azkenean, aldi berean konektatutako 50 bezero inguru izango dira, ahalik eta latentzia txikienarekin ( batean eten puntua ezarri nuen arte eta, ondoren, zerbitzua zintzilik gelditzen da agian 2-5 segundo igaro ondoren, eta beste bezeroetako inork ez du 30 inguruko daturik jasotzen segundo edo gutxi gorabehera zerbitzuak konexio akatsen gertaera bat erregistratu eta bezero arau-hauslea deskonektatu arte. Horren ondoren, beste bezero guztiek beren bide onean jarraitzen dute mezuak jasotzen.

Ikerketa egin dut zerbitzua mugatzeari, aldiberekotasunari egokitzeari buruz, hari multzoen gutxieneko hariak ezartzeari, WCF saltsa sekretuei eta 9 metro osoari buruz, baina egunaren amaieran hau artikulua MSDN - WCF funtsezkoak, norabide bakarreko deiak, deiak itzultzea eta gertaerak zehazki deskribatzen dut benetan gomendiorik egin gabe izaten ari naizen arazoa.

Zerbitzuak zerbitzuari segurtasunez deitzeko aukera ematen dion hirugarren irtenbidea. bezeroak dei-itzulerako kontratu eragiketak noranzko bakarreko eragiketa gisa konfiguratuta edukitzea da. Hori eginez gero, zerbitzuak atzera deitzea ahalbidetzen du, aldi berean hari bakarrean ezarrita dagoenean, ez baitago blokeoa lortzeko erantzun mezurik egongo.

baina lehenago artikuluan ikusten ari naizen arazoa deskribatzen da, soilik bezeroaren ikuspegitik

Norabide bakarreko deiak zerbitzura iristen direnean, baliteke aldi berean ez bidaltzea eta zerbitzuaren aldetik ilaran egotea banan-banan bidaltzeko, guztia zerbitzuak konfiguratutako aldiberekotasunaren portaeraren arabera. eta saio modua. Zerbitzuak ilara egiteko zenbat mezu (noranzko bakarrekoak edo eskaera-erantzunak izan) konfiguratutako kanalaren eta fidagarritasun moduko produktuak dira. Ilaran dauden mezu kopuruak ilarako ahalmena gainditu badu, orduan bezeroak blokeatu egingo du, noranzko bakarreko dei bat ematean ere

Alderantzizkoa dela bakarrik pentsa dezaket, bezeroari ilaran dauden mezuen kopurua gainditu egin da ilarako edukiera eta hari multzoa orain blokeatuta dauden bezero honi deitzen saiatzeko hariekin betetzen da.

Zein da hori kudeatzeko modu egokia? Bezero bakoitzeko zerbitzu komunikazio geruzan zenbat mezu dauden ilaran ikusteko eta konexioak bertan behera uzteko modua ikertu behar al dut muga jakin bat lortu ondoren?

Badirudi ia WCF zerbitzua bera ilara batean blokeatzen ari bada, orduan zerbitzuaren barruan inplementa ditzakezun async / oneway / fire-and-ahaztutako estrategia guztiak blokeatuta geratuko direla bezero baten ilara betetzen denean.

6
задан Mr. Graves 11 July 2011 в 15:43
поделиться