Freigeben über


Vorgehensweise: Registrieren und Konfigurieren eines Dienstmonikers

Vor der Verwendung des WCF-Dienstmonikers (Windows Communication Foundation) in einer COM-Anwendung mit einem typisierten Vertrag müssen die erforderlichen attributierten Typen bei COM registriert werden. Des Weiteren müssen die COM-Anwendung sowie der Moniker mit der erforderlichen Bindungskonfiguration konfiguriert werden.

Registrieren der erforderlichen attributierten Typen bei COM

  1. Verwenden Sie das ServiceModel Metadata Utility-Tool (Svcutil.exe), um den Metadatenvertrag aus dem WCF-Dienst abzurufen. Dadurch werden der Quellcode für eine WCF-Clientassembly sowie eine Konfigurationsdatei für die Clientanwendung generiert.

  2. Stellen Sie sicher, dass die Typen in der Assembly als ComVisible markiert sind. Fügen Sie hierzu der Datei AssemblyInfo.cs in Ihrem Visual Studio-Projekt das folgende Attribut hinzu:

    [assembly: ComVisible(true)]
    
  3. Kompilieren Sie den verwalteten WCF-Client als Assembly mit starkem Namen. Dies erfordert die Signierung mit einem kryptografischen Schlüsselpaar. Weitere Informationen dazu finden Sie unter Signing an Assembly with a Strong Name (Signieren einer Assembly mit starkem Namen).

  4. Verwenden Sie das Assemblyregistrierungstool (Regasm.exe) mit der -tlb-Option, um die Typen in der Assembly bei COM zu registrieren.

  5. Fügen Sie die Assembly mithilfe des Tools für den globalen Assemblycache (Gacutil.exe) dem globalen Assemblycache hinzu.

    Hinweis

    Das Signieren sowie das Hinzufügen der Assembly zum globalen Assemblycache sind optionale Schritte, vereinfachen aber den Prozess des Ladens der Assembly aus dem korrekten Speicherort zur Laufzeit.

Konfigurieren der COM-Anwendung und des Monikers mit der erforderlichen Bindungskonfiguration

  • Platzieren Sie die Bindungsdefinitionen (die vom ServiceModel Metadata Utility-Tool (Svcutil.exe) in der generierten Konfigurationsdatei der Clientanwendung generiert wurden) in der Konfigurationsdatei der Clientanwendung. Beispiel: Für eine ausführbare Visual Basic 6.0-Datei mit dem Namen CallCenterClient.exe muss die Konfiguration in eine Datei mit dem Namen CallCenterConfig.exe.config platziert werden, und diese Datei muss sich im gleichen Verzeichnis befinden wie die ausführbare Datei. Der Moniker kann nun von der Clientanwendung verwendet werden. Hinweis: Die Bindungskonfiguration ist nicht erforderlich, wenn einer der von WCF bereitgestellten Standardbindungstypen verwendet wird.

    Der folgende Typ wird registriert:

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

    Die Anwendung wird mit einer wsHttpBinding-Bindung verfügbar gemacht. Für den angegebenen Typ und die Anwendungskonfiguration werden die folgenden Beispielmonikerzeichenfolgen verwendet:

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

    oder

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

    Nachdem ein Verweis auf die Assembly mit den IMathService-Typen hinzugefügt wurde (siehe folgendes Codebeispiel), kann jede dieser Monikerzeichenfolgen in einer Visual Basic 6.0-Anwendung verwendet werden.

    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 diesem Beispiel wird die Definition für die Bindungskonfiguration Binding1 in einer Konfigurationsdatei für die Clientanwendung mit geeignetem Namen (beispielsweise vb6appname.exe.config) gespeichert.

    Hinweis

    Für C#-, C++- oder andere .NET-Anwendung kann ein ähnlicher Code verwendet werden.

    Hinweis

    Ist der Moniker nicht wohlgeformt oder der Dienst nicht verfügbar, wird nach dem GetObject-Aufruf ein Syntaxfehler zurückgegeben. Vergewissern Sie sich bei Auftreten dieses Fehlers, dass der verwendete Moniker korrekt und der Dienst verfügbar ist.

    In diesem Thema wird zwar hauptsächlich die Verwendung des Dienstmonikers in Visual Basic 6.0-Code behandelt, Dienstmoniker können aber auch in anderen Sprachen verwendet werden. Bei Verwendung eines Monikers in C++-Code muss die von Svcutil.exe generierte Assembly gemäß dem folgenden Beispiel mit "no_namespace named_guids raw_interfaces_only" importiert werden:

    #import "ComTestProxy.tlb" no_namespace named_guids
    

    Dadurch wird die importierte Schnittstellendefinitionen geändert, sodass von allen Methoden HResult zurückgegeben wird. Alle anderen Rückgabewerte werden zu out-Parametern umgewandelt. An der Ausführung der Methoden ändert das nichts. Dies ermöglicht es Ihnen, beim Aufrufen einer Methode auf dem Proxy die Ursache einer Ausnahme zu bestimmen. Diese Funktion ist ausschließlich in C++-Code verfügbar.

Siehe auch