Klientské aplikace střední vrstvy

Toto téma popisuje různé problémy specifické pro klientské aplikace střední vrstvy, které používají službu Windows Communication Foundation (WCF).

Zvýšení výkonu klientů střední vrstvy

V porovnání s předchozími komunikačními technologiemi, jako jsou webové služby využívající ASP.NET, může být vytváření instance klienta WCF složitější díky bohaté sadě funkcí WCF. Například když ChannelFactory<TChannel> je objekt otevřen, může vytvořit zabezpečenou relaci se službou, procedura, která zvyšuje dobu spuštění instance klienta. Tyto další funkce obvykle nemají velký vliv na klientské aplikace, protože klient WCF provádí několik volání a poté se zavře.

Klientské aplikace střední vrstvy ale můžou rychle vytvářet mnoho klientských objektů WCF a v důsledku toho mají vyšší požadavky na inicializaci. Při volání služeb existují dva hlavní přístupy ke zvýšení výkonu aplikací střední vrstvy:

  • Ukládat objekt klienta WCF do mezipaměti a opakovaně ho používat pro následná volání, pokud je to možné.

  • ChannelFactory<TChannel> Vytvořte objekt a pak tento objekt použijte k vytvoření nových objektů klientského kanálu WCF pro každé volání.

Mezi problémy, které je potřeba vzít v úvahu při použití těchto přístupů, patří:

  • Pokud služba udržuje stav specifický pro klienta pomocí relace, nemůžete znovu použít klienta WCF střední vrstvy s více klienty, protože stav služby je svázaný s klientem střední vrstvy.

  • Pokud služba musí provádět ověřování pro jednotlivé klienty, musíte vytvořit nového klienta pro každý příchozí požadavek na střední vrstvě místo opakovaného použití klienta WCF střední vrstvy (nebo objektu kanálu klienta WCF), protože po vytvoření klienta WCF (nebo ChannelFactory<TChannel>) nelze změnit přihlašovací údaje klienta střední vrstvy.

  • I když jsou kanály a klienti vytvořené kanály bezpečné pro přístup z více vláken, nemusí podporovat souběžné zápis více zpráv do drátu. Pokud odesíláte velké zprávy, zejména pokud streamujete, operace odesílání může blokovat čekání na dokončení jiného odeslání. To způsobuje dva druhy problémů: nedostatek souběžnosti a možnost zablokování, pokud se tok řízení vrátí do služby, která znovu používá kanál (to znamená, že sdílený klient volá službu, jejíž cesta kódu vede ke zpětnému volání sdíleného klienta). To platí bez ohledu na typ klienta WCF, který znovu používáte.

  • Chybné kanály musíte zpracovávat bez ohledu na to, jestli kanál sdílíte. Když se ale kanály znovu použijí, může chybující kanál převzít více než jeden čekající požadavek nebo odeslat.

Příklad, který ukazuje osvědčené postupy pro opakované použití klienta pro více požadavků, najdete v tématu Datové vazby v klientovi ASP.NET.

Kromě toho můžete zvýšit výkon spouštění pro klienty, kteří používají datové typy, které jsou serializovatelné pomocí XmlSerializer kódu generování a kompilace serializace pro tyto datové typy za běhu, což může vést k pomalému spuštění výkonu. Nástroj ServiceModel Metadata Utility (Svcutil.exe) může zlepšit výkon spouštění pro tyto aplikace generováním potřebné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.

Viz také