Delen via


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

  1. 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.

  2. 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)]
    
  3. 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.

  4. Gebruik het hulpprogramma Assembly Registration (Regasm.exe) met de -tlb optie om de typen in de assembly te registreren bij COM.

  5. 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.

Zie ook