Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma popisuje různé vlastnosti v různých oblastech architektury WCF (Windows Communication Foundation), které pracují na řízení spotřeby prostředků a ovlivňují metriky výkonu.
Vlastnosti, které omezují spotřebu prostředků ve WCF
Windows Communication Foundation (WCF) používá omezení pro určité typy procesů pro účely zabezpečení nebo výkonu. Tato omezení mají dvě hlavní formy: kvóty a řízení výkonu. Kvóty jsou omezení, která při dosažení nebo překročení aktivují okamžitou výjimku v určitém okamžiku v systému. Omezení jsou omezení, která okamžitě nezpůsobí vyvolání výjimky. Místo toho, když je dosaženo limitu škrcení, zpracování pokračuje, avšak v mezích nastavených touto hodnotou škrcení. Toto omezené zpracování může aktivovat výjimku jinde, ale to závisí na aplikaci.
Kromě rozlišování mezi kvótami a omezeními se některé vlastnosti omezení nacházejí na úrovni serializace, některé na úrovni přenosu a některé na úrovni aplikace. Například kvóta TransportBindingElement.MaxReceivedMessageSize, která je implementována všemi prvky přenosových vazeb poskytovaných systémem, je ve výchozím nastavení nastavena na 65 536 bajtů. To má zabránit škodlivým klientům v provádění útoků typu odmítnutí služby proti službě tím, že způsobí nadměrnou spotřebu paměti. (Obvykle můžete zvýšit výkon snížením této hodnoty.)
Příkladem kvóty serializace je DataContractSerializer.MaxItemsInObjectGraph vlastnost, která určuje maximální počet objektů, které serializátor serializuje nebo deserializuje v jednom ReadObject volání metody. Příkladem omezení na úrovni aplikace je vlastnost ServiceThrottle.MaxConcurrentSessions, která ve výchozím nastavení omezuje počet souběžných připojení kanálů relace na 10. (Na rozdíl od kvót platí, že pokud dojde k dosažení této hodnoty omezení, aplikace pokračuje ve zpracování, ale nepřijímá nové kanály s navázanou relací, což znamená, že se noví klienti nemůžou připojovat, dokud nebude ukončen některý z těch ostatních kanálů s navázanou relací.)
Tyto ovládací prvky jsou navržené tak, aby poskytovaly předem nastavené zmírnění rizik u určitých typů útoků nebo zlepšily metriky výkonu, jako jsou nároky na paměť, čas spuštění atd. V závislosti na aplikaci ale tyto ovládací prvky můžou bránit výkonu aplikace služby nebo zabránit tomu, aby aplikace vůbec fungovala. Například aplikace navržená pro streamování videa může snadno překročit výchozí TransportBindingElement.MaxReceivedMessageSize vlastnost. Toto téma obsahuje přehled různých ovládacích prvků použitých pro aplikace na všech úrovních WCF, popisuje různé způsoby, jak získat další informace o tom, zda nastavení brání vaší aplikaci, a popisuje způsoby, jak opravit různé problémy. Většina regulací a některé kvóty jsou k dispozici na úrovni aplikace, i když základní vlastnost je omezení spojené se serializací nebo přenosem. Vlastnost můžete například nastavit DataContractSerializer.MaxItemsInObjectGraph pomocí ServiceBehaviorAttribute.MaxItemsInObjectGraph vlastnosti třídy služby.
Poznámka:
Pokud máte konkrétní problém, měli byste si nejdřív přečíst rychlý start pro řešení potíží s WCF a zjistit, jestli tam je váš problém (a řešení).
Vlastnosti, které omezují procesy serializace, jsou uvedeny v aspektech zabezpečení pro data. Vlastnosti, které omezují spotřebu prostředků souvisejících s přenosy, jsou uvedeny v kvótách přenosu. Vlastnosti, které omezují spotřebu prostředků na aplikační vrstvě, jsou členy ServiceThrottle třídy.
Zjišťování problémů s aplikací a výkonem souvisejících s nastavením kvóty
Výchozí hodnoty předchozích hodnot byly zvoleny tak, aby umožňovaly základní funkce aplikací v široké škále typů aplikací a současně poskytovaly základní ochranu před běžnými problémy se zabezpečením. Různé návrhy aplikací však mohou překročit jedno nebo více nastavení omezení, i když je aplikace jinak zabezpečená a fungovala by podle návrhu. V těchto případech musíte určit, které hodnoty omezení se překročí a na jaké úrovni, a rozhodnout se, jaký postup je vhodný pro zvýšení propustnosti aplikace.
Při zápisu aplikace a jeho ladění obvykle nastavíte ServiceDebugBehavior.IncludeExceptionDetailInFaults vlastnost v true konfiguračním souboru nebo programově. Toto konfiguruje WCF tak, aby trasování zásobníku výjimek služby bylo vráceno klientské aplikaci pro zobrazení. Tato funkce hlásí většinu výjimek na úrovni aplikace tak, aby zobrazila, která nastavení kvóty mohou být zapojena v případě problému.
K některým výjimkám dochází při běhu programu pod povrchem aplikační vrstvy; nevrací se pomocí tohoto mechanismu a nemusí je zpracovat vlastní System.ServiceModel.Dispatcher.IErrorHandler implementace. Pokud jste ve vývojovém prostředí, jako je Microsoft Visual Studio, zobrazí se většina těchto výjimek automaticky. Některé výjimky ale můžou být maskovány nastavením vývojového prostředí, jako je například Just My Code Visual Studio.
Bez ohledu na možnosti vašeho vývojového prostředí můžete pomocí funkcí trasování WCF a protokolování zpráv ladit všechny výjimky a optimalizovat výkon vašich aplikací. Další informace najdete v tématu Použití trasování k řešení potíží s aplikací.
Problémy s výkonem a XmlSerializer
Služby a klientské aplikace, které používají datové typy serializovatelné pomocí XmlSerializer, generují a kompilují kód pro serializaci těchto datových typů při běhu programu, což může vést k pomalému výkonu při startu.
Poznámka:
Předgenerovaný kód serializace lze použít pouze v klientských aplikacích a ne ve službách.
Nástroj ServiceModel Metadata Utility (Svcutil.exe) může zlepšit výkon spouštění pro tyto aplikace generováním nezbytného serializačního kódu z kompilovaných sestavení pro aplikaci. Další informace naleznete v tématu Postupy: Zlepšení doby spuštění klientských aplikací WCF pomocí XmlSerializer.
Problémy s výkonem při hostování služeb WCF v ASP.NET
Pokud je služba WCF hostovaná ve službě IIS a ASP.NET, může nastavení konfigurace služby IIS a ASP.NET ovlivnit propustnost a paměťovou stopu služby WCF. Další informace o výkonu ASP.NET naleznete v tématu Zlepšení výkonu ASP.NET. Jedním z nastavení, které může mít nezamýšlené důsledky, je MinWorkerThreads, což je vlastnost ProcessModelSection. Pokud má vaše aplikace pevný nebo malý počet klientů, MinWorkerThreads nastavení na 2 může zvýšit propustnost u počítače s více procesory, který má využití procesoru blížící se 100%. Toto zvýšení výkonu přináší náklady: to také způsobí zvýšení využití paměti, což může snížit škálovatelnost.