Aplikacje klienckie warstwy środkowej
W tym temacie omówiono różne problemy specyficzne dla aplikacji klienckich warstwy środkowej korzystających z programu Windows Communication Foundation (WCF).
Zwiększanie wydajności klienta warstwy środkowej
W porównaniu z poprzednimi technologiami komunikacyjnymi, takimi jak usługi sieci Web korzystające z ASP.NET, tworzenie wystąpienia klienta WCF może być bardziej złożone ze względu na bogaty zestaw funkcji programu WCF. Na przykład po otwarciu ChannelFactory<TChannel> obiektu można ustanowić bezpieczną sesję z usługą, procedurę, która zwiększa czas uruchamiania wystąpienia klienta. Zazwyczaj te dodatkowe funkcje nie wpływają na aplikacje klienckie znacznie, ponieważ klient programu WCF wykonuje kilka wywołań, a następnie zamyka.
Aplikacje klienckie warstwy środkowej mogą jednak szybko tworzyć wiele obiektów klienta WCF i w rezultacie zwiększyć wymagania dotyczące inicjowania. Istnieją dwa główne podejścia do zwiększania wydajności aplikacji warstwy środkowej podczas wywoływania usług:
Buforuj obiekt klienta programu WCF i ponownie użyj go do kolejnych wywołań, jeśli to możliwe.
ChannelFactory<TChannel> Utwórz obiekt, a następnie użyj tego obiektu, aby utworzyć nowe obiekty kanału klienta WCF dla każdego wywołania.
Problemy, które należy wziąć pod uwagę podczas korzystania z tych metod, obejmują:
Jeśli usługa utrzymuje stan specyficzny dla klienta przy użyciu sesji, nie można ponownie użyć klienta WCF warstwy środkowej z żądaniami wielu warstw klienta, ponieważ stan usługi jest powiązany z klientem warstwy środkowej.
Jeśli usługa musi przeprowadzać uwierzytelnianie dla poszczególnych klientów, należy utworzyć nowego klienta dla każdego żądania przychodzącego w warstwie środkowej zamiast ponownego korzystania z klienta WCF warstwy środkowej (lub obiektu kanału klienta WCF), ponieważ poświadczenia klienta warstwy środkowej nie mogą być modyfikowane po utworzeniu klienta programu WCF (lub ChannelFactory<TChannel>).
Kanały i klienci utworzone przez kanały są bezpieczne wątkowo, ale mogą nie obsługiwać jednoczesnego zapisywania więcej niż jednego komunikatu do przewodu. W przypadku wysyłania dużych komunikatów, szczególnie w przypadku przesyłania strumieniowego, operacja wysyłania może blokować oczekiwanie na zakończenie innego wysłania. Powoduje to dwa rodzaje problemów: brak współbieżności i możliwość zakleszczenia, jeśli przepływ sterowania powróci do usługi ponownie za pomocą kanału (czyli udostępniony klient wywołuje usługę, której ścieżka kodu powoduje wywołanie zwrotne do udostępnionego klienta). Jest to prawda niezależnie od typu używanego klienta WCF.
Należy obsługiwać uszkodzone kanały niezależnie od tego, czy kanał jest udostępniany. Gdy jednak kanały są ponownie używane, kanał błędny może zdjąć więcej niż jedno oczekujące żądanie lub wysłać.
Przykład przedstawiający najlepsze rozwiązania dotyczące ponownego korzystania z klienta dla wielu żądań, zobacz Powiązanie danych w kliencie ASP.NET.
Ponadto można zwiększyć wydajność uruchamiania dla tych klientów, którzy używają typów danych, które można serializować przy użyciu XmlSerializer kodu generowania i kompilowania serializacji dla tych typów danych w czasie wykonywania, co może spowodować spowolnienie wydajności uruchamiania. Narzędzie ServiceModel Metadata Tool (Svcutil.exe) może zwiększyć wydajność uruchamiania tych aplikacji, generując niezbędny kod serializacji z skompilowanych zestawów dla aplikacji. Aby uzyskać więcej informacji, zobacz How to: Improve the Startup Time of WCF Client Applications using the XmlSerializer (Jak poprawić czas uruchamiania aplikacji klienckich WCF przy użyciu narzędzia XmlSerializer).