Vorgehensweise: Verwenden eines Dienstmonikers mit WSDL-Verträgen
Es gibt Situationen, in denen Sie sich möglicherweise einen vollständig unabhängigen COM Interop-Client wünschen. Der Dienst, den Sie aufrufen möchten, stellt vielleicht keinen MEX-Endpunkt bereit, oder die WCF-Client-DLL ist nicht für COM-Interop registriert. In diesen Fällen können Sie eine WSDL-Datei erstellen, die den Dienst beschreibt, und die Datei an den WCF-Dienstmoniker übergeben. In diesem Thema wird beschrieben, wie das Beispiel für Erste Schritte mit WCF zur Verwendung eines WSDL-Monikers in WCF aufgerufen wird.
Verwenden des WSDL-Dienstmonikers
Öffnen und erstellen Sie die GettingStarted-Beispiellösung.
Öffnen Sie einen Browser, und navigieren Sie zu
http://localhost/ServiceModelSamples/Service.svc
, um sicherzustellen, dass der Dienst funktioniert.Fügen Sie in der Datei Service.cs der CalculatorService-Klasse das folgende Attribut hinzu:
[ServiceBehavior(Namespace = "http://Microsoft.ServiceModel.Samples")] // This service class implements the service contract. public class CalculatorService : ICalculator { public double Add(double n1, double n2) { return n1 + n2; } public double Subtract(double n1, double n2) { return n1 - n2; } public double Multiply(double n1, double n2) { return n1 * n2; } public double Divide(double n1, double n2) { return n1 / n2; } }
Fügen Sie dem Dienst App.config einen Bindungsnamespace hinzu:
Erstellen Sie eine WSDL-Datei, die von der Anwendung gelesen wird. Da die Namespaces in den Schritten 3 und 4 hinzugefügt wurden, können Sie einen Browser verwenden, um die gesamte WSDL-Beschreibung des Diensts abzufragen, indem Sie zu
http://localhost/ServiceModelSamples/Service.svc?wsdl
navigieren. Sie können die Datei dann als serviceWSDL.xml speichern. Wenn Sie die Namespaces nicht in den Schritten 3 und 4 angeben, ist das von der Abfrage der obigen URL zurückgegebene WSDL-Dokument nicht vollständig. Das zurückgegebene WSDL-Dokument enthält verschiedene Importanweisungen, die andere WSDL-Dokumente importieren. Sie müssen dann die einzelnen Importanweisungen durchgehen und das vollständige WSDL-Dokument erstellen, wobei Sie das vom Dienst zurückgegebene WSDL mit dem importierten WSDL kombinieren.Öffnen Sie Visual Basic 6.0, und erstellen Sie eine neue Standard-EXE-Datei. Fügen Sie dem Formular eine Schaltfläche hinzu, und doppelklicken Sie darauf, um dem Click-Handler den folgenden Code hinzuzufügen.
' Open the WSDL contract file and read it all into the wsdlContract string. Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\serviceWsdl.xml", ForReading) wsdlContract = objFile.ReadAll objFile.Close ' Create a string for the service moniker including the content of the WSDL contract file. wsdlMonikerString = "service4:address='http://localhost/ServiceModelSamples/service.svc'" wsdlMonikerString = wsdlMonikerString + ", wsdl='" & wsdlContract & "'" wsdlMonikerString = wsdlMonikerString + ", binding=WSHttpBinding_ICalculator, bindingNamespace='http://Microsoft.ServiceModel.Samples'" wsdlMonikerString = wsdlMonikerString + ", contract=ICalculator, contractNamespace='http://Microsoft.ServiceModel.Samples'" ' Create the service moniker object. Set wsdlServiceMoniker = GetObject(wsdlMonikerString) ' Call the service operations using the moniker object. MsgBox "WSDL service moniker: 145 - 76.54 = " & wsdlServiceMoniker.Subtract(145, 76.54)
Hinweis
Ist der Moniker nicht ordnungsgemäß formatiert oder der Dienst nicht verfügbar, wird nach dem
GetObject
-Aufruf ein Syntaxfehler zurückgegeben. Vergewissern Sie sich bei Auftreten dieses Fehlers, dass der verwendete Moniker korrekt und der Dienst verfügbar ist.Führen Sie die Visual Basic-Anwendung aus. Ein Meldungsfeld wird mit den Ergebnissen des Aufrufs Subtract(145, 76.54) angezeigt.