Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Nachdem Sie einen Dienst erstellt haben, besteht der nächste Schritt darin, einen WCF-Clientproxy zu erstellen. Eine Clientanwendung verwendet den WCF-Clientproxy für die Kommunikation mit dem Dienst. Clientanwendungen importieren in der Regel die Metadaten eines Diensts, um WCF-Clientcode zu generieren, der zum Aufrufen des Diensts verwendet werden kann.
Die grundlegenden Schritte zum Erstellen eines WCF-Clients umfassen Folgendes:
Kompilieren sie den Dienstcode.
Generieren Sie den WCF-Clientproxy.
Instanziieren Sie den WCF-Clientproxy.
Der WCF-Clientproxy kann manuell mithilfe des ServiceModel Metadata Utility Tools (SvcUtil.exe) generiert werden. Für weitere Informationen siehe ServiceModel Metadata Utility Tool (Svcutil.exe). Der WCF-Clientproxy kann auch in Visual Studio mithilfe des Features " Dienstreferenz hinzufügen " generiert werden. Um den WCF-Clientproxy mithilfe einer der Methoden zu generieren, muss der Dienst ausgeführt werden. Wenn der Dienst selbst gehostet wird, müssen Sie den Server ausführen. Wenn der Dienst in IIS/WAS gehostet wird, müssen Sie nichts anderes tun.
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 einfachen Svcutil.exe-Befehl.
Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
Alternativ können Sie Svcutil.exe mit WSDL-Dateien (Web Services Description Language) und XML-Schemadefinitionssprachen (XSD) im Dateisystem verwenden.
Svcutil.exe <list of WSDL and XSD files on file system>
Das Ergebnis ist eine Codedatei, die WCF-Clientcode enthält, den die Clientanwendung zum Aufrufen des Diensts verwenden kann.
Sie können das Tool auch verwenden, um Konfigurationsdateien zu generieren.
Svcutil.exe <file1 [,file2]>
Wenn nur ein Dateiname angegeben wird, ist dies der Name der Ausgabedatei. Wenn zwei Dateinamen angegeben werden, handelt es sich bei der ersten Datei um eine Eingabekonfigurationsdatei, deren Inhalt mit der generierten Konfiguration zusammengeführt und in die zweite Datei geschrieben wird. Weitere Informationen zur Konfiguration finden Sie unter Konfigurieren von Bindungen für Dienste.
Von Bedeutung
Ungesicherte Metadatenanforderungen bergen bestimmte Risiken, ebenso wie jede ungesicherte Netzwerkanforderung: Wenn Sie nicht sicher sind, ob der Endpunkt, mit dem Sie kommunizieren, tatsächlich der ist, für den er sich ausgibt, könnten die von Ihnen abgerufenen Informationen Metadaten eines bösartigen Dienstes sein.
Dienstreferenz in Visual Studio hinzufügen
Wenn der Dienst ausgeführt wird, klicken Sie mit der rechten Maustaste auf das Projekt, das den WCF-Clientproxy enthält, und wählen Sie "Dienstverweis> aus. Geben Sie im Dialogfeld "Dienstreferenz hinzufügen" die URL zu dem Dienst ein, den Sie aufrufen möchten, und klicken Sie auf die Schaltfläche " Gehe zu". Im Dialogfeld wird eine Liste der dienste angezeigt, die an der von Ihnen angegebenen Adresse verfügbar sind. Doppelklicken Sie auf den Dienst, um die verfügbaren Verträge und Vorgänge anzuzeigen, geben Sie einen Namespace für den generierten Code an, und klicken Sie auf die Schaltfläche "OK ".
Beispiel
Das folgende Codebeispiel zeigt einen Dienstvertrag, der für einen Dienst erstellt wurde.
// 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 Hilfsprogramm "ServiceModel Metadata" und "Dienstverweis hinzufügen " in Visual Studio generiert die folgende WCF-Clientklasse. Die Klasse erbt von der generischen ClientBase<TChannel> Klasse und implementiert die ICalculator
Schnittstelle. Das Tool generiert auch die ICalculator
Schnittstelle (hier nicht dargestellt).
public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
public CalculatorClient()
{}
public CalculatorClient(string endpointConfigurationName) :
base(endpointConfigurationName)
{}
public CalculatorClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{}
public CalculatorClient(string endpointConfigurationName,
System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{}
public CalculatorClient(System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{}
public double Add(double n1, double n2)
{
return base.Channel.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 endpointConfigurationName As String)
MyBase.New(endpointConfigurationName)
End Sub
Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal endpointConfigurationName As String,
ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding,
ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(binding, remoteAddress)
End Sub
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
Implements ICalculator.Add
Return MyBase.Channel.Add(n1, n2)
End Function
End Class
Verwenden des WCF-Clients
Um den WCF-Client zu verwenden, erstellen Sie eine Instanz des WCF-Clients, und rufen Sie dann die 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 von Ausnahmen, die von einem Client ausgelöst werden
Viele Ausnahmen, die von einem WCF-Client ausgelöst werden, werden durch eine Ausnahme des Diensts verursacht. Einige Beispiele:
SocketException: Eine vorhandene Verbindung wurde vom Remote-Host zwangsweise geschlossen.
CommunicationException: Die zugrunde liegende Verbindung wurde unerwartet geschlossen.
CommunicationObjectAbortedException: Die Socketverbindung wurde abgebrochen. Dies kann durch einen Fehler bei der Verarbeitung Ihrer Nachricht, einem Empfangstimeout verursacht werden, das vom Remotehost oder einem zugrunde liegenden Netzwerkressourcenproblem überschritten wird.
Wenn diese Arten von Ausnahmen auftreten, besteht die beste Möglichkeit zum Beheben des Problems darin, die Ablaufverfolgung auf der Dienstseite zu aktivieren und zu bestimmen, welche Ausnahme dort aufgetreten ist. Weitere Informationen zur Ablaufverfolgung finden Sie unter "Ablaufverfolgung " und "Verwenden der Ablaufverfolgung zur Problembehandlung Ihrer Anwendung".
Siehe auch
- Anleitung zum Erstellen eines Clients
- So greifen Sie auf Dienste mit einem Duplexvertrag zu
- Vorgehensweise: Dienstvorgänge asynchron aufrufen
- Anleitung: Zugriff auf Dienste mit One-Way- und Request-Reply-Verträgen
- Vorgehensweise: Zugreifen auf einen WSE 3.0-Dienst
- Grundlegendes zum generierten Clientcode
- Vorgehensweise: Verbessern der Startzeit von WCF-Clientanwendungen mithilfe des XmlSerializers
- Angeben des Client-Run-Time Verhaltens
- Konfigurieren von Clientverhalten