Gör så här: Använda en tjänstmoniker med WSDL-kontrakt
Det finns situationer när du kanske vill ha en helt fristående COM Interop-klient. Tjänsten som du vill anropa kanske inte exponerar en MEX-slutpunkt och WCF-klient-DLL:n kanske inte är registrerad för COM-interop. I dessa fall kan du skapa en WSDL-fil som beskriver tjänsten och skicka den till WCF-tjänstens moniker. Det här avsnittet beskriver hur du anropar WCF-exemplet komma igång med en WSDL-moniker med WCF.
Använda WSDL-tjänstens moniker
Öppna och skapa exempellösningen GettingStarted.
Öppna en webbläsare och bläddra till
http://localhost/ServiceModelSamples/Service.svc
för att kontrollera att tjänsten fungerar.I filen Service.cs lägger du till följande attribut i klassen CalculatorService:
[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; } }
Lägg till ett bindningsnamnområde i tjänsten App.config:
Skapa en WSDL-fil som programmet ska läsa. Eftersom namnrymderna lades till i steg 3 och 4 kan du använda en webbläsare för att fråga efter hela WSDL-beskrivningen av tjänsten genom att bläddra till
http://localhost/ServiceModelSamples/Service.svc?wsdl
. Du kan sedan spara filen som serviceWSDL.xml. Om du inte anger namnrymderna i steg 3 och 4 är det WSDL-dokument som returneras från att fråga ovanstående URL inte den fullständiga WSDL:en. Det WSDL-dokument som returneras innehåller flera importinstruktioner som importerar andra WSDL-dokument. Du måste gå igenom varje importuttryck och skapa det fullständiga WSDL-dokumentet genom att kombinera WSDL som returneras från tjänsten med den importerade WSDL:n.Öppna Visual Basic 6.0 och skapa en ny Standard .exe-fil. Lägg till en knapp i formuläret och dubbelklicka på knappen för att lägga till följande kod i klickhanteraren:
' 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)
Kommentar
Om monikern är felaktigt formaterad eller om tjänsten inte är tillgänglig returnerar anropet till
GetObject
ett fel med texten "Ogiltig syntax". Om du får det här felet kontrollerar du att monikern du använder är korrekt och att tjänsten är tillgänglig.Kör Visual Basic-programmet. En meddelanderuta visas med resultatet av anropet Subtract(145, 76.54).