Share via


Grundlagen des generierten Clientcodes

Mit dem ServiceModel Metadata Utility Tool (Svcutil.exe) wird Clientcode und eine Clientanwendungs-Konfigurationsdatei zum Erstellen von Clientanwendungen generiert. Dieses Thema bietet Beispiele für generierten Code für standardmäßige Dienstvertragszenarien. Weitere Informationen zum Erstellen einer Clientanwendung mit dem generierten Code finden Sie unter Übersicht über den WCF-Client.

Übersicht

Wenn Sie Visual Studio zum Generieren von Windows Communication Foundation (WCF)-Clienttypen für Ihr Projekt verwenden, müssen Sie den generierten Clientcode normalerweise nicht untersuchen. Wenn Sie keine Entwicklungsumgebung verwenden, die die gleichen Dienste für Sie ausführt, können Sie mit einem Tool wie Svcutil.exe Clientcode generieren und dann mithilfe dieses Codes die Clientanwendung erstellen.

Da Svcutil.exe über mehrere Optionen zum Ändern der generierten Typinformationen verfügt, werden in diesem Thema nicht alle Szenarien erläutert. Die folgenden Standardaufgaben schließen jedoch die Suche nach generiertem Code ein:

  • Das Identifizieren von Dienstvertragsschnittstellen.
  • Das Identifizieren der WCF-Clientklasse.
  • Das Identifizieren von Datentypen.
  • Das Identifizieren von Rückrufverträgen für Duplexdienste.
  • Das Identifizieren der Hilfsdienstvertrag-Kanalschnittstelle.

Das Suchen von Dienstvertragschnittstellen.

Suchen Sie bei der Suche nach Schnittstellen für Dienstvertragmodelle mit dem System.ServiceModel.ServiceContractAttribute-Attribut markierte Schnittstellen. Die Suche nach diesem Attribute mit schnellem Lesen kann wegen des Vorhandenseins anderer Attribute und der für das Attribut selbst festgelegten expliziten Eigenschaften häufig schwierig sein. Beachten Sie, dass die Dienstvertragschnittstelle und die Clientvertragschnittstelle zwei verschiedene Typen sind. Im folgenden Codebeispiel wird der ursprüngliche Dienstvertrag gezeigt.

Im folgenden Codebeispiel wird der gleiche Dienstvertrag gezeigt, wie von Svcutil.exe generiert.

Sie können die generierte Dienstvertragschnittstelle zusammen mit der System.ServiceModel.ChannelFactory-Klasse zum Erstellen eines WCF-Kanalobjekts für das Aufrufen von Dienstvorgängen verwenden. Weitere Informationen finden Sie unter Gewusst wie: Verwenden der ChannelFactory.

Suchen von WCF-Clientklassen

Suchen Sie bei der Suche nach der WCF-Clientklasse, die den zu verwendenden Dienstvertrag implementiert, nach einer Erweiterung von System.ServiceModel.ClientBase, wobei der Typparameter die Dienstvertragschnittstelle ist, die Sie zuvor gefunden haben und die diese Schnittstelle erweitert. Im folgenden Codebeispiel wird die ClientBase-Klasse vom Typ ISampleService gezeigt.

Sie können diese WCF-Clientklasse verwenden, indem Sie eine neue Instanz davon erstellen und die Methoden aufrufen, die sie implementiert. Diese Methoden rufen den Dienstvorgang auf, der für die Interaktion mit ihr konzipiert und konfiguriert ist. Weitere Informationen finden Sie unter Übersicht über den WCF-Client.

Tipp

Wenn SvcUtil.exe eine WCF-Clientklasse generiert, wird ihr ein DebuggerStepThroughAttribute hinzugefügt, das die schrittweise Ausführung der WCF-Clientklasse durch Debugger verhindert.

Suchen von Datentypen

Die grundlegendste Methode zum Suchen von Datentypen im generierten Code ist die Identifizierung des in einem Vertrag angegebenen Typnamens und die Suche des Codes für diese Typdeklaration. Zum Beispiel gibt der folgende Vertrag an, dass SampleMethod einen SOAP-Fehler des Typs microsoft.wcf.documentation.SampleFault zurückgeben kann.

Durch die Suche nach SampleFault wird die folgende Typdeklaration gesucht.

In diesem Fall ist der Datentyp der durch eine bestimmte Ausnahme auf dem Client ausgelöste Detailtyp, eine FaultException, wobei der Detailtypparameter microsoft.wcf.documentation.SampleFault ist. Weitere Informationen zu Datentypen finden Sie unter Angeben von Datenübertragung in Dienstverträgen. Weitere Informationen zum Behandeln von Ausnahmen in Clients finden Sie unter Senden und Empfangen von Fehlern.

Suchen von Rückrufverträgen für Duplexdienste

Wenn Sie einen Dienstvertrag finden, bei dem die Vertragschnittstelle einen Wert für die System.ServiceModel.ServiceContractAttribute.CallbackContract-Eigenschaft angibt, dann gibt dieser Vertrag einen Duplexvertrag an. Duplexverträge erfordern, dass die Clientanwendung eine Rückrufklasse erstellt, die den Rückrufvertrag implementiert und eine Instanz dieser Klasse an System.ServiceModel.DuplexClientBase oder System.ServiceModel.DuplexChannelFactory zur Kommunikation mit dem Dienst übergibt. Weitere Informationen zu Duplexclients finden Sie unter Gewusst wie: Zugreifen auf Dienste mit einem Duplexvertrag.

Der folgende Vertrag gibt einen Rückrufvertrag vom Typ SampleDuplexHelloCallback an.

Durch die Suche nach diesem Rückrufvertrag wird die folgende Schnittstelle gesucht, die die Clientanwendung implementieren muss.

Suchen von Dienstvertrag-Kanalschnittstellen

Beim Verwenden der ChannelFactory-Klasse mit einer Dienstvertragschnittstelle muss diese in eine System.ServiceModel.IClientChannel-Schnittstelle umgewandelt werden, um den Kanal explizit zu öffnen, zu schließen oder abzubrechen. Zum Erleichtern der Arbeit generiert das Tool Svcutil.exe auch eine Hilfsschnittstelle, die die Dienstvertragschnittstelle und IClientChannel implementiert, wodurch die Interaktion mit der Clientkanalinfrastruktur ohne Umwandlung ermöglicht wird. Im folgenden Code wird die Definition eines Hilfsclientkanals, der den vorangehenden Dienstvertrag implementiert, veranschaulicht.

Siehe auch

Konzepte

Übersicht über den WCF-Client