Clientanwendungen mittlerer EbeneMiddle-Tier Client Applications

In diesem Artikel werden verschiedene Probleme bezüglich Clientanwendungen mittlerer Ebene, die Windows Communication Foundation (WCF) verwenden.This topic discusses various issues specific to middle-tier client applications that use Windows Communication Foundation (WCF).

Verbessern der Leistung von Clients mittlerer EbeneIncreasing Middle-Tier Client Performance

Im Vergleich zu früheren Kommunikationstechnologien wie Webdiensten unter Verwendung ASP.NETASP.NET, die Erstellung einer Instanz der WCF-Client kann eine komplexere aufgrund der umfangreichen Funktionen von WCF.Compared to previous communications technologies, such as Web services using ASP.NETASP.NET, the creation of a WCF client instance can be more complex due to the rich feature set of WCF. Beispiel: Beim Öffnen eines ChannelFactory<TChannel>-Objekts kann von diesem Objekt eine sichere Sitzung mit dem Dienst hergestellt werden, was zu einer Verlängerung der Startzeit der Clientinstanz führt.For example, when a ChannelFactory<TChannel> object is opened it can establish a secure session with the service, a procedure that increases the startup time for the client instance. In der Regel wird wirken diese zusätzlichen Funktionen Clientanwendungen erheblich sich nicht, da die WCF-Client einige Aufrufe lediglich und dann schließt.Typically, these additional feature capabilities do not affect client applications greatly since the WCF client makes several calls, and then closes.

Clientanwendungen mittlerer Ebene, jedoch können viele WCF-Clientobjekten schnell und erstellen daher treten höhere initialisierungsanforderungen.Middle-tier client applications, however, can create many WCF client objects quickly and, as a result, experience increased initialization requirements. Für die Leistungsoptimierung von Anwendungen mittlerer Ebene beim Aufrufen von Diensten haben Sie die Wahl zwischen zwei grundsätzlichen Vorgehensweisen:There are two main approaches to increasing the performance of middle-tier applications when calling services:

  • Zwischenspeichern Sie des WCF-Clientobjekts und für nachfolgende Aufrufe wiederverwenden Sie, sofern möglich.Cache the WCF client object and reuse it for subsequent calls where possible.

  • Erstellen einer ChannelFactory<TChannel> Objekt, und verwenden Sie dieses Objekt zum Erstellen von neuen WCF-Clients kanalobjekten, bei jedem Aufruf.Create a ChannelFactory<TChannel> object and then use that object to create new WCF client channel objects for each call.

Bei diesen Vorgehensweisen sollten Sie Folgendes beachten:Issues to consider when using these approaches include:

  • Wenn der Dienst einen clientspezifischer Zustand mithilfe einer Sitzungs verwaltet, können nicht Sie die WCF-Clients mittlerer Ebene mit mehreren-Clientebene Anforderungen wiederverwenden, da der Zustand des Diensts an, die von den Clients mittlerer Ebene gebunden ist.If the service is maintaining a client-specific state by using a session, then you cannot reuse the middle-tier WCF client with multiple-client tier requests because the service's state is tied to that of the middle-tier client.

  • Wenn der Dienst auf einer pro-Client-Basis die Authentifizierung durchführen muss, müssen Sie einen neuen Client für jede eingehende Anforderung erstellen, auf der mittleren Ebene anstelle der WCF-Clients mittlerer Ebene (oder WCF-clientkanalobjekts) wiederverwenden, da die Anmeldeinformationen des Clients mittlerer Ebene kann nicht geändert werden, nachdem der WCF-Client (oder ChannelFactory<TChannel>) erstellt wurde.If the service must perform authentication on a per-client basis, you must create a new client for each incoming request on the middle tier instead of reusing the middle-tier WCF client (or WCF client channel object) because the client credentials of the middle tier cannot be modified after the WCF client (or ChannelFactory<TChannel>) has been created.

  • Channels und von den Channels erstellte Clients sind zwar threadsicher, unterstützen jedoch möglicherweise keine gleichzeitigen Schreibvorgänge mehrerer Nachrichten zur Übertragung.While channels and clients created by the channels are thread-safe, they might not support writing more than one message to the wire concurrently. Beim Senden umfangreicher Nachrichten (und besonders beim Streaming) wird der Sendevorgang möglicherweise blockiert, da auf den Abschluss eines anderen Sendevorgangs gewartet wird.If you are sending large messages, particularly if streaming, the send operation might block waiting for another send to complete. Daraus ergeben sich zwei Probleme: fehlende Parallelität und die Gefahr eines Deadlocks, wenn die Ablaufsteuerung wieder zu dem Dienst zurückkehrt, von dem der Channel wiederverwendet wird (oder mit anderen Worten: Wenn vom freigegebenen Client ein Dienst aufgerufen wird, dessen Codepfad einen Rückruf an den freigegebenen Client auslöst).This causes two sorts of problems: a lack of concurrency and the possibility of deadlock if the flow of control returns to the service reusing the channel (that is, the shared client calls a service whose code path results in a callback to the shared client). Dies gilt unabhängig vom Typ des WCF-Clients, die Sie wiederverwenden.This is true regardless of the type of WCF client you reuse.

  • Fehler in Channels müssen unabhängig davon behoben werden, ob der Channel freigegeben ist.You must handle faulted channels regardless of whether you share the channel. Beim Wiederverwenden von Channels kann ein fehlerhafter Channel dazu führen, dass gleich mehrere ausstehende Anforderungen oder Sendevorgänge nicht ausgeführt werden.When channels are reused, however, a faulting channel can take down more than one pending request or send.

Ein Beispiel für bewährte Methoden für die Wiederverwendung von einem Client mehrere Anforderungen finden Sie unter Binden von Daten in einem ASP.NET-Client.For an example that demonstrates best practices for reusing a client for multiple requests, see Data Binding in an ASP.NET Client.

Darüber hinaus können Sie die Leistung beim Starten von Clients verbessern, von denen serialisierbare Datentypen verwendet werden. Für die Serialisierung dieser Datentypen wird der Serialisierungscode von XmlSerializer zum Generieren und Kompilieren zur Laufzeit verwendet, was eine Beeinträchtigung der Leistung beim Start zur Folge haben kann.In addition, you can increase the startup performance for those clients that use data types that are serializable using the XmlSerializer generate and compile serialization code for those data types at runtime, which can result in slow start-up performance. Die ServiceModel Metadata Utility Tool (Svcutil.exe) können startleistung für diese Anwendungen durch Generieren der erforderlichen Serialisierungscode aus den kompilierten Assemblys für die Anwendung zu verbessern.The ServiceModel Metadata Utility Tool (Svcutil.exe) can improve start-up performance for these applications by generating the necessary serialization code from the compiled assemblies for the application. Weitere Informationen finden Sie unter wie: Verbessern der Start Time des WCF-Clientanwendungen mit dem XmlSerializer.For more information, see How to: Improve the Startup Time of WCF Client Applications using the XmlSerializer.

Siehe auchSee Also

Zugreifen auf Dienste mithilfe eines WCF-ClientsAccessing Services Using a WCF Client