Procedure: Een service-moniker registreren en configureren
Voordat u de WCF-service moniker (Windows Communication Foundation) in een COM-toepassing met een getypt contract gebruikt, moet u de vereiste toegewezen typen registreren bij COM en de COM-toepassing en de moniker configureren met de vereiste bindingsconfiguratie.
Registreer de vereiste toegewezen typen bij COM
Gebruik het hulpprogramma ServiceModel Metadata Utility (Svcutil.exe) om het metagegevenscontract op te halen uit de WCF-service. Hiermee wordt de broncode gegenereerd voor een WCF-clientassembly en een clienttoepassingsconfiguratiebestand.
Zorg ervoor dat de typen in de assembly zijn gemarkeerd als
ComVisible
. Voeg hiervoor het volgende kenmerk toe aan het AssemblyInfo.cs-bestand in uw Visual Studio-project.[assembly: ComVisible(true)]
Compileer de beheerde WCF-client als een sterk benoemde assembly. Hiervoor moet u zich aanmelden met een cryptografisch sleutelpaar. Zie Een assembly ondertekenen met een sterke naam voor meer informatie.
Gebruik het hulpprogramma Assembly Registration (Regasm.exe) met de
-tlb
optie om de typen in de assembly te registreren bij COM.Gebruik het hulpprogramma Global Assembly Cache (Gacutil.exe) om de assembly toe te voegen aan de algemene assemblycache.
Notitie
Het ondertekenen van de assembly en het toevoegen aan de Global Assembly Cache zijn optionele stappen, maar ze kunnen het proces van het laden van de assembly vanaf de juiste locatie tijdens runtime vereenvoudigen.
De COM-toepassing en de moniker configureren met de vereiste bindingsconfiguratie
Plaats de bindingsdefinities (gegenereerd door het hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) in het gegenereerde configuratiebestand van de clienttoepassing) in het configuratiebestand van de clienttoepassing. Voor een uitvoerbaar visual Basic 6.0-bestand met de naam CallCenterClient.exe moet de configuratie bijvoorbeeld worden geplaatst in een bestand met de naam CallCenterConfig.exe.config in dezelfde map als het uitvoerbare bestand. De clienttoepassing kan nu de moniker gebruiken. Houd er rekening mee dat de bindingconfiguratie niet vereist is als u een van de standaardbindingstypen van WCF gebruikt.
Het volgende type is geregistreerd.
using System.ServiceModel; [ServiceContract] public interface IMathService { [OperationContract] public int Add(int x, int y); [OperationContract] public int Subtract(int x, int y); }
De toepassing wordt weergegeven met behulp van een
wsHttpBinding
binding. Voor het opgegeven type en de toepassingsconfiguratie worden de volgende voorbeeldtekenreeksen gebruikt.service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1
or
service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1, contract={36ADAD5A-A944-4d5c-9B7C-967E4F00A090}
U kunt een van deze moniker-tekenreeksen gebruiken vanuit een Visual Basic 6.0-toepassing nadat u een verwijzing hebt toegevoegd naar de assembly die de
IMathService
typen bevat, zoals wordt weergegeven in de volgende voorbeeldcode.Dim mathProxy As IMathService Dim result As Integer Set mathProxy = GetObject( _ "service4:address=http://localhost/MathService, _ binding=wsHttpBinding, _ bindingConfiguration=Binding1") result = mathProxy.Add(3, 5)
In dit voorbeeld wordt de definitie voor de bindingsconfiguratie
Binding1
opgeslagen in een geschikt configuratiebestand met de naam voor de clienttoepassing, zoals vb6appname.exe.config.Notitie
U kunt vergelijkbare code gebruiken in een C#, een C++- of een andere .NET-taaltoepassing.
Notitie
Als de moniker ongeldig is of als de service niet beschikbaar is, retourneert de aanroep om
GetObject
een fout 'Ongeldige syntaxis' te retourneren. Als u deze fout ontvangt, controleert u of de moniker die u gebruikt juist is en of de service beschikbaar is.Hoewel dit onderwerp is gericht op het gebruik van de service moniker van Visual Basic 6.0-code, kunt u een service moniker uit andere talen gebruiken. Wanneer u een moniker uit C++-code gebruikt, moet de Svcutil.exe gegenereerde assembly worden geïmporteerd met 'no_namespace named_guids raw_interfaces_only', zoals wordt weergegeven in de volgende code.
#import "ComTestProxy.tlb" no_namespace named_guids
Hiermee worden de geïmporteerde interfacedefinities gewijzigd, zodat alle methoden een
HResult
. Eventuele andere retourwaarden worden geconverteerd naar parameters. De algehele uitvoering van de methoden blijft hetzelfde. Hiermee kunt u de oorzaak van een uitzondering bepalen bij het aanroepen van een methode op de proxy. Deze functionaliteit is alleen beschikbaar via C++-code.