Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
In diesem Thema werden verschiedene Spezifische Probleme für Clientanwendungen der mittleren Ebene erläutert, die Windows Communication Foundation (WCF) verwenden.
Erhöhung der Leistung des Middle-Tier Clients
Im Vergleich zu früheren Kommunikationstechnologien, z. B. Webdiensten mit ASP.NET, kann die Erstellung einer WCF-Clientinstanz aufgrund des umfangreichen Featuresatzes von WCF komplexer sein. Wenn beispielsweise ein ChannelFactory<TChannel> Objekt geöffnet wird, kann es eine sichere Sitzung mit dem Dienst einrichten, eine Prozedur, die die Startzeit für die Clientinstanz erhöht. In der Regel wirken sich diese zusätzlichen Featurefunktionen nicht erheblich auf Clientanwendungen aus, da der WCF-Client mehrere Aufrufe sendet und dann geschlossen wird.
Clientanwendungen auf mittlerer Ebene können jedoch schnell viele WCF-Clientobjekte erstellen, was zu erhöhten Initialisierungsanforderungen führt. Es gibt zwei Hauptansätze zur Steigerung der Leistung von Anwendungen auf mittlerer Ebene beim Aufrufen von Diensten:
Speichern Sie das WCF-Clientobjekt zwischen, und verwenden Sie es nach Möglichkeit für nachfolgende Aufrufe wieder.
Erstellen Sie ein ChannelFactory<TChannel> Objekt, und verwenden Sie dieses Objekt, um neue WCF-Clientkanalobjekte für jeden Aufruf zu erstellen.
Probleme, die bei der Verwendung dieser Ansätze berücksichtigt werden sollten, sind:
Wenn der Dienst einen Client-spezifischen Zustand mithilfe einer Sitzung verwaltet, können Sie den WCF-Client der mittleren Ebene nicht mit mehreren Anforderungen von der Client-Ebene wiederverwenden, da der Status des Diensts an den Status der mittleren Ebene gebunden ist.
Wenn der Dienst eine Authentifizierung pro Client durchführen muss, müssen Sie für jede eingehende Anforderung auf der mittleren Ebene einen neuen Client erstellen, anstatt den WCF-Client der mittleren Ebene (oder das WCF-Clientkanalobjekt) erneut zu verwenden, da die Clientanmeldeinformationen der mittleren Ebene nicht geändert werden können, nachdem der WCF-Client (oder ChannelFactory<TChannel>) erstellt wurde.
Während Kanäle und Clients, die von den Kanälen erstellt wurden, threadsicher sind, unterstützen sie möglicherweise nicht das gleichzeitige Schreiben von mehr als einer Nachricht an das Kabel. Wenn Sie große Nachrichten senden, insbesondere beim Streaming, kann der Sendevorgang das Warten auf einen anderen Sendevorgang blockieren. Dies führt zu zwei Arten von Problemen: die fehlende Parallelität und die Möglichkeit eines Deadlocks, wenn der Kontrollfluss zum Dienst zurückkehrt, der den Kanal wiederverwendet (d.h. der gemeinsame Client ruft einen Dienst auf, dessen Codepfad zu einem Rückruf an den gemeinsamen Client führt). Dies gilt unabhängig vom Typ des WCF-Clients, den Sie wiederverwenden.
Fehler in Channels müssen unabhängig davon behoben werden, ob der Channel freigegeben ist. Wenn Kanäle jedoch wiederverwendet werden, kann ein fehlerhafter Kanal mehr als eine ausstehende Anforderung oder Übermittlung zurücknehmen.
Ein Beispiel, das bewährte Methoden zum Erneuten Verwenden eines Clients für mehrere Anforderungen veranschaulicht, finden Sie unter "Datenbindung" in einem ASP.NET-Client.
Darüber hinaus können Sie die Startleistung für Clients erhöhen, die serialisierbare Datentypen verwenden, indem Sie den XmlSerializer Generierungs- und Kompilierungscode für diese Datentypen zur Laufzeit generieren und kompilieren, was zu einer langsamer Startleistung führen kann. Das ServiceModel Metadata Utility Tool (Svcutil.exe) kann die Startleistung für diese Anwendungen verbessern, indem der erforderliche Serialisierungscode aus den kompilierten Assemblys für die Anwendung generiert wird. Weitere Informationen finden Sie unter So verbessern Sie die Startzeit von WCF-Clientanwendungen mit dem XmlSerializer.