Freigeben über


Zugreifen auf Dienste mithilfe eines WCF-Clients

Nach dem Erstellen eines Diensts ist der nächste Schritt das Erstellen eines WCF-Clients. Eine Clientanwendung verwendet den WCF-Client, um mit dem Dienst zu kommunizieren. Clientanwendungen importieren normalerweise Metadaten eines Dienstes zum Generieren von WCF-Clientcode, mit dem der Dienst aufgerufen werden kann.

Nachfolgend werden die grundlegenden Schritte zum Erstellen eines WCF-Clients aufgeführt:

  1. Kompilieren Sie den Dienstcode.

  2. Verwenden Sie das ServiceModel Metadata Utility-Tool (Svcutil.exe) zum Erstellen des WCF-Clients.

ServiceModel Metadata Utility Tool

Das ServiceModel Metadata Utility-Tool (Svcutil.exe) ist ein Befehlszeilentool zum Generieren von Code aus Metadaten. Die folgende Verwendung ist ein Beispiel für einen grundlegenden Svcutil.exe-Befehl.

Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address> 

Alternativ können Sie Svcutil.exe mit WSDL (Web Services Description Language) und XSD (XML Schema Definition Language)-Dateien im Dateisystem verwenden.

Svcutil.exe <list of WSDL and XSD files on file system>

Das Ergebnis ist ein Code, der WCF-Clientcode enthält, mit dem die Clientanwendung den Dienst aufrufen kann.

Sie können das Tool auch zum Generieren von Konfigurationsdateien verwenden.

Svcutil.exe <file1 [,file2]>

Wenn nur ein Dateiname angegeben wird, ist das der Name der Ausgabedatei. Werden zwei Dateinamen angegeben, ist die erste Datei eine Eingabekonfigurationsdatei, deren Inhalt mit der generierten Konfiguration zusammengeführt und in die zweite Datei geschrieben wird. Weitere Informationen über zur Konfiguration finden Sie unter Konfigurieren von Bindungen für Windows Communication Foundation-Dienste.

ms734691.Important(de-de,VS.100).gif Hinweis:
Nicht gesicherte Metadatenanforderungen stellen genau wie nicht gesicherte Netzwerkanforderungen ein gewisses Risiko dar: Wenn Sie sich nicht sicher sind, ob der Endpunkt, mit dem Sie kommunizieren, der vorgegebenen Identität entspricht, stammen die abgerufenen Informationen unter Umständen von einem bösartigen Dienst.

Beispiel

Im folgenden Codebeispiel wird ein für einen Dienst erstellter Dienstvertrag gezeigt.

// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    // Other methods are not shown here.
}
' Define a service contract.
<ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
    <OperationContract()>  _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double 
    ' Other methods are not shown here.
End Interface 

Das ServiceModel Metadata Utility Tool generiert die folgende WCF-Clientklasse. Die Klasse erbt von der generischen ClientBase-Klasse und implementiert die ICalculator-Schnittstelle. Das Tool generiert auch die ICalculator-Schnittstelle (wird hier nicht gezeigt).

public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
    public CalculatorClient(){}
    
    public CalculatorClient(string configurationName) : 
            base(configurationName)
    {}
    
    public CalculatorClient(System.ServiceModel.Binding binding) : 
            base(binding)
    {}
    
    public CalculatorClient(System.ServiceModel.EndpointAddress address,
    System.ServiceModel.Binding binding) : 
            base(address, binding)
    {}
    
    public double Add(double n1, double n2)
    {
        return base.InnerChannel.Add(n1, n2);
    }
}
Partial Public Class CalculatorClient
    Inherits System.ServiceModel.ClientBase(Of ICalculator)
    Implements ICalculator
    
    Public Sub New()
        MyBase.New
    End Sub
    
    Public Sub New(ByVal configurationName As String)
        MyBase.New(configurationName)
    End Sub
    
    Public Sub New(ByVal binding As System.ServiceModel.Binding)
        MyBase.New(binding)
    End Sub
    
    Public Sub New(ByVal address As _
    System.ServiceModel.EndpointAddress, _
    ByVal binding As System.ServiceModel.Binding)
        MyBase.New(address, binding)
    End Sub
    
    Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As _
    Double Implements ICalculator.Add
        Return MyBase.InnerChannel.Add(n1, n2)
    End Function 
End Class

Verwenden des WCF-Clients

Erstellen Sie zum Verwenden des WCF-Clients eine Instanz des WCF-Clients, und rufen Sie dann seine Methoden auf, wie im folgenden Code gezeigt.

// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
' Create a client object with the given client endpoint configuration.
Dim calcClient As CalculatorClient = _
New CalculatorClient("CalculatorEndpoint")

' Call the Add service operation.
Dim value1 As Double = 100.00D
Dim value2 As Double = 15.99D
Dim result As Double = calcClient.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

Debuggen der von einem Client ausgelösten Ausnahmen

Viele von einem WCF-Client ausgelöste Ausnahmen werden von einer Ausnahme des Diensts verursacht. Im Folgenden finden Sie einige Beispiele:

  • SocketException: Vom Remotehost wurde die Schließung einer bestehenden Verbindung erzwungen.

  • CommunicationException: Die zugrunde liegende Verbindung wurde unerwartet geschlossen.

  • CommunicationObjectAbortedException: Die Socketverbindung wurde abgebrochen. Mögliche Ursache: Ein Fehler beim Verarbeiten der Nachricht, eine Zeitüberschreitung durch den Remotehost beim Empfang oder ein Problem mit einer zugrunde liegenden Netzwerkressource.

Tritt eine Ausnahme dieses Typs auf, aktivieren Sie die Ablaufverfolgung auf der Dienstseite, und ermitteln Sie die dort aufgetretene Ausnahme. Weitere Informationen über über die Ablaufverfolgung finden Sie unter Ablaufverfolgung und Verwenden der Ablaufverfolgung zum Beheben von Anwendungsfehlern.

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines Windows Communication Foundation-Clients
Vorgehensweise: Zugreifen auf Dienste mit einem Duplexvertrag
Vorgehensweise: Asynchrones Aufrufen von WCF-Dienstvorgängen
Vorgehensweise: Zugreifen auf WCF-Dienste mit unidirektionalen und Anforderung-Antwort-Verträgen
Vorgehensweise: Zugriff auf einen WSE3.0-Dienst über einen WCF-Client
Vorgehensweise: Verbessern der Startzeit von WCF-Clientanwendungen mit dem XmlSerializer

Konzepte

Grundlagen des generierten Clientcodes
Angeben des Clientlaufzeitverhaltens
Konfigurieren von Clientverhalten