Dela via


Gör så här: Registrera och konfigurera en tjänstmoniker

Innan du använder WCF-tjänstmonikern (Windows Communication Foundation) i ett COM-program med ett skrivet kontrakt måste du registrera de typer som krävs med COM och konfigurera COM-programmet och monikern med den obligatoriska bindningskonfigurationen.

Registrera de attributtyper som krävs med COM

  1. Använd verktyget ServiceModel Metadata Utility Tool (Svcutil.exe) för att hämta metadatakontraktet från WCF-tjänsten. Detta genererar källkoden för en WCF-klientsammansättning och en konfigurationsfil för klientprogram.

  2. Kontrollera att typerna i sammansättningen är markerade som ComVisible. Det gör du genom att lägga till följande attribut i filen AssemblyInfo.cs i Visual Studio-projektet.

    [assembly: ComVisible(true)]
    
  3. Kompilera den hanterade WCF-klienten som en stark namngiven sammansättning. Detta kräver signering med ett kryptografiskt nyckelpar. Mer information finns i Signera en sammansättning med ett starkt namn.

  4. Använd verktyget Sammansättningsregistrering (Regasm.exe) med -tlb alternativet att registrera typerna i sammansättningen med COM.

  5. Använd verktyget Global Assembly Cache (Gacutil.exe) för att lägga till sammansättningen i den globala sammansättningscacheminnet.

    Kommentar

    Att signera sammansättningen och lägga till den i den globala sammansättningscachen är valfria steg, men de kan förenkla processen med att läsa in sammansättningen från rätt plats vid körning.

Konfigurera COM-programmet och monikern med den bindningskonfiguration som krävs

  • Placera bindningsdefinitionerna (som genereras av Verktyget för ServiceModel-metadataverktyg (Svcutil.exe) i konfigurationsfilen för det genererade klientprogrammet) i klientprogrammets konfigurationsfil. För en körbar Visual Basic 6.0-fil med namnet CallCenterClient.exe ska konfigurationen till exempel placeras i en fil med namnet CallCenterConfig.exe.config i samma katalog som den körbara filen. Klientprogrammet kan nu använda monikern. Observera att bindningskonfigurationen inte krävs om du använder någon av de standardbindningstyper som tillhandahålls av WCF.

    Följande typ är registrerad.

    using System.ServiceModel;
    
    [ServiceContract]
    public interface IMathService
    {
        [OperationContract]
        public int Add(int x, int y);
        [OperationContract]
        public int Subtract(int x, int y);
    }
    

    Programmet exponeras med hjälp av en wsHttpBinding bindning. För den angivna typen och programkonfigurationen används följande exempel på monikersträngar.

    service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1
    

    eller

    service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1, contract={36ADAD5A-A944-4d5c-9B7C-967E4F00A090}
    

    Du kan använda någon av dessa monikersträngar från ett Visual Basic 6.0-program efter att ha lagt till en referens till sammansättningen som innehåller typerna IMathService , som du ser i följande exempelkod.

    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)
    

    I det här exemplet lagras definitionen för bindningskonfigurationen Binding1 i en lämpligt namngiven konfigurationsfil för klientprogrammet, till exempel vb6appname.exe.config.

    Kommentar

    Du kan använda liknande kod i en C#, ett C++- eller något annat .NET Language-program.

    Kommentar

    Om monikern är felaktigt formaterad eller om tjänsten inte är tillgänglig returnerar anropet till GetObject ett fel med "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.

    Även om det här avsnittet fokuserar på att använda tjänstmonikern från Visual Basic 6.0-koden kan du använda en tjänstmoniker från andra språk. När du använder en moniker från C++-kod ska den Svcutil.exe genererade sammansättningen importeras med "no_namespace named_guids raw_interfaces_only" enligt följande kod.

    #import "ComTestProxy.tlb" no_namespace named_guids
    

    Detta ändrar de importerade gränssnittsdefinitionerna så att alla metoder returnerar en HResult. Andra returvärden konverteras till out-parametrar. Den övergripande körningen av metoderna är densamma. På så sätt kan du fastställa orsaken till ett undantag när du anropar en metod för proxyn. Den här funktionen är endast tillgänglig från C++-kod.

Se även