Megosztás a következőn keresztül:


Az erőforrás-felhasználás szabályozása és a teljesítmény javítása

Ez a témakör a Windows Communication Foundation (WCF) architektúra különböző területeinek különböző tulajdonságait ismerteti, amelyek az erőforrás-felhasználás szabályozásán és a teljesítménymetrikák befolyásolásán dolgoznak.

Az erőforrás-felhasználást a WCF-ben korlátozó tulajdonságok

A Windows Communication Foundation (WCF) bizonyos típusú folyamatokra biztonsági vagy teljesítménybeli korlátozásokat alkalmaz. Ezek a korlátozások két fő formában, kvóták és szabályozások formájában jönnek. A kvóták olyan korlátok, amelyek elérése vagy túllépése azonnali kivételt vált ki a rendszer egy bizonyos pontján. A szabályozások olyan korlátok, amelyek nem okoznak azonnal kivételt. Ehelyett a szabályozás korlátjának elérésekor a feldolgozás folytatódik, de az adott szabályozási érték által meghatározott korlátokon belül. Ez a korlátozott feldolgozás máshol kivételt okozhat, de ez az alkalmazástól függ.

A kvóták és a szabályozások közötti különbségtétel mellett néhány korlátozási tulajdonság a szerializálási szinten, néhány a szállítási szinten, néhány pedig az alkalmazás szintjén található. A kvóta TransportBindingElement.MaxReceivedMessageSizepéldául , amelyet az összes rendszer által biztosított átviteli kötési elem implementál, alapértelmezés szerint 65 536 bájtra van beállítva, hogy megakadályozza a rosszindulatú ügyfeleket abban, hogy szolgáltatásmegtagadásos támadásokat hajtsanak végre egy szolgáltatás ellen a túlzott memóriahasználat okozásával. (Általában ennek az értéknek a csökkentésével növelheti a teljesítményt.)

A szerializálási kvóta például a DataContractSerializer.MaxItemsInObjectGraph tulajdonság, amely meghatározza, hogy a szerializáló hány objektumot szerializál vagy deszerializál egyetlen ReadObject metódushívásban. Az alkalmazásszintű szabályozásra példa a ServiceThrottle.MaxConcurrentSessions tulajdonság, amely alapértelmezés szerint 10-re korlátozza az egyidejű munkamenet-alapú csatornakapcsolatok számát. (A kvótákkal ellentétben, ha ezt a szabályozási értéket eléri, az alkalmazás folytatja a feldolgozást, de nem fogad el új munkamenet-alapú csatornákat, ami azt jelenti, hogy az új ügyfelek csak a többi munkamenet-alapú csatorna egyikének befejezéséig csatlakozhatnak.)

Ezek a vezérlők úgy vannak kialakítva, hogy beépített kockázatcsökkentést nyújtsanak bizonyos típusú támadások ellen, vagy javíthassák a teljesítménymetrikákat, például a memóriaigényt, az indítási időt stb. Az alkalmazástól függően azonban ezek a vezérlők akadályozhatják a szolgáltatásalkalmazás teljesítményét, vagy egyáltalán megakadályozhatják az alkalmazás működését. Egy videó streamelésére tervezett alkalmazás például könnyedén túllépheti az alapértelmezett TransportBindingElement.MaxReceivedMessageSize tulajdonságot. Ez a témakör áttekintést nyújt az alkalmazásokra a WCF minden szintjén alkalmazott különböző vezérlőkről, ismerteti a különböző módszereket, amelyekkel további információkat kaphat arról, hogy egy beállítás akadályozza-e az alkalmazást, és ismerteti a különböző problémák megoldásának módjait. A legtöbb szabályozás és kvóták az alkalmazás szintjén érhetők el, még akkor is, ha az alaptulajdonság szerializálási vagy átviteli kényszer. Beállíthatja például a tulajdonságot a DataContractSerializer.MaxItemsInObjectGraphServiceBehaviorAttribute.MaxItemsInObjectGraph szolgáltatásosztály tulajdonságával.

Feljegyzés

Ha egy adott probléma merül fel, először olvassa el a WCF hibaelhárítási rövid útmutatóját , amelyből megtudhatja, hogy a probléma (és a megoldás) szerepel-e a listán.

A szerializálási folyamatokat korlátozó tulajdonságok az adatok biztonsági szempontjai között szerepelnek. A szállításokhoz kapcsolódó erőforrások felhasználását korlátozó tulajdonságok a szállítási kvóták között szerepelnek. Az alkalmazásrétegben az erőforrások felhasználását korlátozó tulajdonságok az ServiceThrottle osztály tagjai.

Az előző értékek alapértelmezett értékeit úgy választottuk ki, hogy az alapvető alkalmazásfunkciókat az alkalmazástípusok széles körében engedélyezhessék, miközben alapvető védelmet nyújtanak a gyakori biztonsági problémák ellen. A különböző alkalmazástervek azonban meghaladhatják az egy vagy több szabályozási beállítást, bár az alkalmazás egyébként biztonságos, és a tervezett módon működik. Ezekben az esetekben meg kell határoznia, hogy mely szabályozási értékeket lépi túl és milyen szinten, és meg kell határoznia az alkalmazás átviteli sebességének növeléséhez szükséges megfelelő lépéseket.

Az alkalmazás írása és hibakeresése során általában a ServiceDebugBehavior.IncludeExceptionDetailInFaults tulajdonságot true a konfigurációs fájlban vagy programozott módon állítja be. Ez arra utasítja a WCF-et, hogy a szolgáltatáskivételi verem nyomkövetéseit adja vissza az ügyfélalkalmazásnak megtekintésre. Ez a funkció a legtöbb alkalmazásszintű kivételt úgy jelenti, hogy megjelenítse, hogy mely kvótabeállítások lehetnek érintettek, ha ez a probléma.

Egyes kivételek az alkalmazásréteg láthatósága alatt, futtatáskor történnek, és a rendszer nem ezzel a mechanizmussal adja vissza őket, és előfordulhat, hogy azokat nem egy egyéni System.ServiceModel.Dispatcher.IErrorHandler implementáció kezeli. Ha olyan fejlesztői környezetben van, mint a Microsoft Visual Studio, a kivételek többsége automatikusan megjelenik. Bizonyos kivételeket azonban elfedhetnek a fejlesztői környezet beállításai, például a Just My Code Visual Studio.

A fejlesztési környezet képességeitől függetlenül használhatja a WCF nyomkövetési és üzenetnaplózási funkcióit az összes kivétel hibakereséséhez és az alkalmazások teljesítményének finomhangolásához. További információ: Az alkalmazás hibaelhárítása nyomkövetéssel.

Teljesítményproblémák és XmlSerializer

Azok a szolgáltatások és ügyfélalkalmazások, amelyek futtatáskor szerializálható adattípusokat használnak az XmlSerializer adott adattípusok szerializálási kódjának generálása és fordítása használatával, ami lassú indítási teljesítményt eredményezhet.

Feljegyzés

Az előre létrehozott szerializációs kód csak ügyfélalkalmazásokban használható, szolgáltatásokban nem.

A ServiceModel metadata segédprogram (Svcutil.exe) javíthatja az alkalmazások indítási teljesítményét azáltal, hogy létrehozza a szükséges szerializálási kódot az alkalmazás lefordított szerelvényekből. További információ : Útmutató: A WCF-ügyfélalkalmazások indítási idejének javítása az XmlSerializer használatával.

Teljesítményproblémák a WCF-szolgáltatások ASP.NET

Ha egy WCF-szolgáltatást IIS és ASP.NET üzemeltet, az IIS és a ASP.NET konfigurációs beállításai hatással lehetnek a WCF szolgáltatás átviteli sebességére és memóriaigényére. A ASP.NET teljesítményével kapcsolatos további információkért lásd: ASP.NET teljesítményének javítása. Az egyik olyan beállítás, amelynek nem szándékos következményei lehetnek, az ProcessModelSectiona MinWorkerThreads. Ha az alkalmazás rögzített vagy kis számú ügyféllel rendelkezik, a 2-es értékre állítás MinWorkerThreads átviteli sebességnövekedést eredményezhet egy többprocesszoros gépen, amelynek cpu-kihasználtsága megközelíti a 100%-ot. Ez a teljesítménynövekedés költséggel jár: a memóriahasználat növekedését is okozhatja, ami csökkentheti a méretezhetőséget.

Lásd még