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:
Kompilieren Sie den Dienstcode.
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.
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