Použití monikeru služby WCF u klientů modelu COM
Ukázka modelu COM ukazuje, jak pomocí monikeru služby Wcf (Windows Communication Foundation) integrovat webové služby do vývojových prostředí založených na modelu COM, jako je systém Microsoft Office jazyk Visual Basic for Application (Office VBA) nebo Visual Basic 6.0. Tato ukázka se skládá z klienta windows Script Host (.vbs), podpůrné klientské knihovny (.dll) a knihovny služeb (.dll) hostované Internetová informační služba (IIS). Služba je služba kalkulačky a klient MODELU COM volá matematické operace – sčítání, odčítání, násobení a dělení – ve službě. Aktivita klienta je viditelná v oknech okna okna se zprávami.
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Služba implementuje ICalculator
kontrakt definovaný, jak je znázorněno v následujícím příkladu kódu.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
Ukázka ukazuje tři alternativní přístupy pro použití monikeru:
Typový kontrakt – kontrakt je registrován jako viditelný typ modelu COM v klientském počítači.
Kontrakt WSDL – Kontrakt je dodáván ve formě dokumentu WSDL.
Kontrakt výměny metadat – kontrakt se načte za běhu z koncového bodu Serveru metadat (MEX).
Typový kontrakt
Chcete-li použít moniker s typed contract use, musí být odpovídajícím způsobem přiřazeny typy pro servisní kontrakt musí být registrovány u modelu COM. Nejprve musí být klient generován pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe). Spuštěním následujícího příkazu z příkazového řádku v klientském adresáři vygenerujte zadaný proxy server.
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples http://localhost/servicemodelsamples/service.svc /out:generatedClient.cs
Tato třída musí být zahrnuta v projektu a projekt by měl být nakonfigurován tak, aby při kompilaci vygeneroval sestavení se podepsaným objektem COM. Následující atribut by měl být součástí souboru AssemblyInfo.cs.
[assembly: ComVisible(true)]
Po sestavení projektu zaregistrujte typy viditelné pomocí regasm
modelu COM, jak je znázorněno v následujícím příkladu.
regasm.exe /tlb:CalcProxy.tlb client.dll
Vytvořené sestavení by mělo být přidáno do globální mezipaměti sestavení. I když to není nezbytně nutné, zjednodušuje proces vyhledání sestavení za běhu. Následující příkaz přidá sestavení do globální mezipaměti sestavení.
gacutil.exe /i client.dll
Poznámka:
Moniker služby vyžaduje pouze registraci typu a nepoužívá proxy ke komunikaci se službou.
Klientská aplikace ComCalcClient.vbs používá GetObject
funkci k vytvoření proxy serveru pro službu pomocí syntaxe monikeru služby k určení adresy, vazby a kontraktu pro službu.
Set typedServiceMoniker = GetObject(
"service4:address=http://localhost/ServiceModelSamples/service.svc, binding=wsHttpBinding,
contractType={9213C6D2-5A6F-3D26-839B-3BA9B82228D3}")
Parametry používané monikerem určují:
Adresa koncového bodu služby.
Vazba, kterou má klient použít pro připojení k danému koncovému bodu. V tomto případě se systémově definovaný wsHttpBinding používá, i když se vlastní vazby dají definovat v konfiguračních souborech klienta. Pro použití s programem Windows Script Host je vlastní vazba definována v souboru Cscript.exe.config ve stejném adresáři jako Cscript.exe.
Typ kontraktu, který je podporován v koncovém bodu. Toto je typ, který byl vygenerován a registrován výše. Vzhledem k tomu, že skript jazyka Visual Basic neposkytuje prostředí modelu COM silného typu, musí být zadán identifikátor kontraktu. Tento identifikátor GUID je
interfaceID
z CalcProxy.tlb, který lze zobrazit pomocí nástrojů MODELU COM, jako je prohlížeč objektů OLE/COM (OleView.exe). Pro prostředí silného typu, jako je Office VBA nebo Visual Basic 6.0, přidejte explicitní odkaz na knihovnu typů a deklarování typu objektu proxy lze použít místo parametru kontraktu. Poskytuje také podporu Technologie IntelliSense během vývoje klientských aplikací.
Po vytvoření instance proxy pomocí monikeru služby může klientská aplikace volat metody na proxy serveru, což vede k tomu, že moniker infrastruktura služby volá odpovídající operace služby.
' Call the service operations using the moniker object
WScript.Echo "Typed service moniker: 100 + 15.99 = " & typedServiceMoniker.Add(100, 15.99)
Při spuštění ukázky se odpověď operace zobrazí v okně se zprávou hostitel skriptů systému Windows. To ukazuje klienta MODELU COM, který provádí volání modelu COM pomocí zadaného monikeru ke komunikaci se službou WCF. I přes použití modelu COM v klientské aplikaci se komunikace se službou skládá pouze z volání webové služby.
Kontrakt WSDL
Pokud chcete použít moniker s kontraktem WSDL, nevyžaduje se žádná registrace klientské knihovny, ale kontrakt WSDL pro službu musí být načten prostřednictvím vzdáleného mechanismu, jako je použití prohlížeče pro přístup ke koncovému bodu WSDL pro službu. Moniker pak může získat přístup k této smlouvě v době provádění.
Klientská aplikace ComCalcClient.vbs používá FileSystemObject
přístup k místně uloženému souboru WSDL a pak znovu použije GetObject
funkci k vytvoření proxy serveru pro službu.
' 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("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 + ", binding=WSHttpBinding_ICalculator, bindingNamespace='http://Microsoft.ServiceModel.Samples'"
wsdlMonikerString = wsdlMonikerString + ", wsdl='" & wsdlContract & "'"
wsdlMonikerString = wsdlMonikerString + ", contract=ICalculator, contractNamespace='http://Microsoft.ServiceModel.Samples'"
' Create the service moniker object
Set wsdlServiceMoniker = GetObject(wsdlMonikerString)
Parametry používané monikerem určují:
Adresa koncového bodu služby.
Vazba, kterou má klient použít pro připojení k danému koncovému bodu a oboru názvů, ve kterém je tato vazba definována. V tomto případě se
wsHttpBinding_ICalculator
použije.WSDL, který definuje kontrakt. V tomto případě se jedná o řetězec, který byl načten ze souboru serviceWsdl.xml.
Název a obor názvů kontraktu. Tato identifikace je nutná, protože WSDL může obsahovat více než jeden kontrakt.
Poznámka:
Služby WCF ve výchozím nastavení generují samostatné soubory WSDL pro každý obor názvů, který používá. Jsou propojeny s použitím konstruktoru importu WSDL. Vzhledem k tomu, že moniker očekává jednu definici WSDL, musí služba buď použít jeden obor názvů, jak je znázorněno v této ukázce, nebo samostatné soubory musí být ručně sloučeny.
Po vytvoření instance proxy pomocí monikeru služby může klientská aplikace volat metody na proxy serveru, což vede k tomu, že moniker infrastruktura služby volá odpovídající operace služby.
' Call the service operations using the moniker object
WScript.Echo "WSDL service moniker: 145 - 76.54 = " & wsdlServiceMoniker.Subtract(145, 76.54)
Při spuštění ukázky se odpověď operace zobrazí v okně se zprávou hostitel skriptů systému Windows. To ukazuje klienta MODELU COM, který provádí volání modelu COM pomocí monikeru se kontraktem WSDL ke komunikaci se službou WCF.
Kontrakt výměny metadat
Pokud chcete použít moniker se smlouvou MEX, stejně jako u kontraktu WSDL, není vyžadována žádná registrace klienta. Kontrakt pro službu se načte v době provádění prostřednictvím interního použití serveru Metadata Exchange.
Klientská aplikace ComCalcClient.vbs znovu používá GetObject
funkci k vytvoření proxy serveru pro službu.
' Create a string for the service moniker specifying the address to retrieve the service metadata from
mexMonikerString = "service4:mexAddress='http://localhost/servicemodelsamples/service.svc/mex'"
mexMonikerString = mexMonikerString + ", address='http://localhost/ServiceModelSamples/service.svc'"
mexMonikerString = mexMonikerString + ", binding=WSHttpBinding_ICalculator, bindingNamespace='http://Microsoft.ServiceModel.Samples'"
mexMonikerString = mexMonikerString + ", contract=ICalculator, contractNamespace='http://Microsoft.ServiceModel.Samples'"
' Create the service moniker object
Set mexServiceMoniker = GetObject(mexMonikerString)
Parametry používané monikerem určují:
Adresa koncového bodu výměny metadat služby.
Adresa koncového bodu služby.
Vazba, kterou má klient použít pro připojení k danému koncovému bodu a oboru názvů, ve kterém je tato vazba definována. V tomto případě se
wsHttpBinding_ICalculator
použije.Název a obor názvů kontraktu. Tato identifikace je nutná, protože WSDL může obsahovat více než jeden kontrakt.
Po vytvoření instance proxy pomocí monikeru služby může klientská aplikace volat metody na proxy serveru, což vede k tomu, že moniker infrastruktura služby volá odpovídající operace služby.
' Call the service operations using the moniker object
WScript.Echo "MEX service moniker: 9 * 81.25 = " & mexServiceMoniker.Multiply(9, 81.25)
Při spuštění ukázky se odpověď operace zobrazí v okně se zprávou hostitel skriptů systému Windows. To ukazuje klienta modelu COM, který provádí volání modelu COM pomocí monikeru se kontraktem MEX ke komunikaci se službou WCF.
Nastavení a sestavení ukázky
Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.
V příkazovém řádku pro vývojáře pro Visual Studio otevřete složku \client\bin ve složce specifické pro jazyk.
Poznámka:
Pokud používáte Systém Windows Vista, Windows Server 2008, Windows 7 nebo Windows Server 2008 R2, ujistěte se, že používáte příkazový řádek s oprávněními správce.
tlbexp.exe client.dll /out:CalcProxy.tlb
Zadejte, chcete-li exportovat knihovnu DLL do souboru tlb. Očekává se upozornění vývozce knihovny typů, ale nejedná se o problém, protože obecný typ není povinný.regasm.exe /tlb:CalcProxy.tlb client.dll
Zadejte typ pro registraci typů u modelu COM. Očekává se upozornění vývozce knihovny typů, ale nejedná se o problém, protože obecný typ není povinný.gacutil.exe /i client.dll
Zadejte, aby se sestavení přidalo do globální mezipaměti sestavení.
Spuštění ukázky na stejném počítači
Otestujte, že ke službě můžete přistupovat pomocí prohlížeče zadáním následující adresy:
http://localhost/servicemodelsamples/service.svc
. V odpovědi by se měla zobrazit potvrzovací stránka.Spusťte comCalcClient.vbs z \client ze složky specifické pro jazyk. Aktivita klienta se zobrazí v oknech okno se zprávami.
Pokud klient a služba nemůžou komunikovat, přečtěte si téma Řešení potíží Tipy pro ukázky WCF.
Spuštění ukázky napříč počítači
Na počítači služby vytvořte virtuální adresář s názvem ServiceModelSamples. Skript Setupvroot.bat, který je součástí ukázky, se dá použít k vytvoření adresáře disku a virtuálního adresáře.
Zkopírujte soubory programu služby z %SystemDrive%\Inetpub\wwwroot\servicemodelsamples do virtuálního adresáře ServiceModelSamples na počítači služby. Nezapomeňte zahrnout soubory do adresáře \bin.
Zkopírujte soubor klientského skriptu ze složky \client ve složce specifické pro jazyk do klientského počítače.
V souboru skriptu změňte hodnotu adresy definice koncového bodu tak, aby odpovídala nové adrese vaší služby. Nahraďte všechny odkazy na localhost plně kvalifikovaným názvem domény v adrese.
Zkopírujte soubor WSDL do klientského počítače. V souboru WSDL serviceWsdl.xml nahraďte všechny odkazy na "localhost" plně kvalifikovaným názvem domény v adrese.
Zkopírujte knihovnu Client.dll ze složky \client\bin ve složce specifické pro jazyk do adresáře v klientském počítači.
Z příkazového řádku přejděte do tohoto cílového adresáře v klientském počítači. Pokud používáte systém Windows Vista nebo Windows Server 2008, spusťte příkazový řádek jako Správa istrator.
tlbexp.exe client.dll /out:CalcProxy.tlb
Zadejte, chcete-li exportovat knihovnu DLL do souboru tlb. Očekává se upozornění vývozce knihovny typů, ale nejedná se o problém, protože obecný typ není povinný.regasm.exe /tlb:CalcProxy.tlb client.dll
Zadejte typ pro registraci typů u modelu COM. Před spuštěním příkazu se ujistěte, že je cesta nastavená na složku, která obsahujeregasm.exe
.gacutil.exe /i client.dll
Zadejte, aby se sestavení přidalo do globální mezipaměti sestavení. Před spuštěním příkazu se ujistěte, že je cesta nastavená na složku, která obsahujegacutil.exe
.Otestujte, že ke službě máte přístup z klientského počítače pomocí prohlížeče.
Na klientském počítači spusťte ComCalcClient.vbs.
Vyčištění po ukázce
Pro účely zabezpečení odeberte definici virtuálního adresáře a oprávnění udělená v krocích nastavení po dokončení s ukázkami.