Gewusst wie: Registrieren und Konfigurieren eines DienstmonikersHow to: Register and Configure a Service Moniker

Vor der Verwendung des Windows Communication Foundation (WCF)-dienstmonikers innerhalb COM-Anwendung mit einem typisierten Vertrag, müssen Sie die erforderlichen attributierten Typen bei COM registriert, und konfigurieren die COM-Anwendung und der Moniker mit der erforderlichen Bindung die Konfiguration.Before using the Windows Communication Foundation (WCF) service moniker within a COM application with a typed contract, you must register the required attributed types with COM, and configure the COM application and the moniker with the required binding configuration.

So registrieren Sie die erforderlichen attributierten Typen bei COMTo register the required attributed types with COM

  1. Verwenden der ServiceModel Metadata Utility Tool (Svcutil.exe) Tool, um den Vertrag für die Metadaten aus den WCF-Dienst abzurufen.Use the ServiceModel Metadata Utility Tool (Svcutil.exe) tool to retrieve the metadata contract from the WCF service. Dadurch wird der Quellcode für eine WCF-Clientassembly und eine clientanwendungs-Konfigurationsdatei generiert.This generates the source code for a WCF client assembly and a client application configuration file.

  2. Stellen Sie sicher, dass die Typen in der Assembly als ComVisible markiert sind.Ensure that the types in the assembly are marked as ComVisible. Fügen Sie hierzu der Datei AssemblyInfo.cs in Ihrem Visual Studio-Projekt das folgende Attribut hinzu:To do so, add the following attribute to the AssemblyInfo.cs file in your Visual Studio project.

    [assembly: ComVisible(true)]  
    
  3. Kompilieren Sie den verwalteten WCF-Client als eine Assembly mit starkem Namen.Compile the managed WCF client as a strong-named assembly. Dies erfordert die Signierung mit einem kryptografischen Schlüsselpaar.This requires signing with a cryptographic key pair. Weitere Informationen finden Sie unter Signieren einer Assembly mit einem starken Namen in .NET Developer's Guide.For more information, see Signing an Assembly with a Strong Name in the .NET Developer's Guide.

  4. Verwenden Sie das Assemblyregistrierungstool (Regasm.exe) mit der /tlb-Option, um die Typen in der Assembly bei COM zu registrieren.Use the Assembly Registration (Regasm.exe) tool with the /tlb option to register the types in the assembly with COM.

  5. Fügen Sie die Assembly mithilfe des Tools für den globalen Assemblycache (Gacutil.exe) dem globalen Assemblycache hinzu.Use the Global Assembly Cache (Gacutil.exe) tool to add the assembly to the global assembly cache.

    Hinweis

    Das Signieren sowie das Hinzufügen der Assembly zum globalen Assemblycache sind optionale Schritte, sie dienen jedoch zum Vereinfachen des Prozesses zum Laden der Assembly aus dem korrekten Speicherort im Laufzeitmodus.Signing the assembly and adding it to the Global Assembly Cache are optional steps, but they can simplify the process of loading the assembly from the correct location at runtime.

So konfigurieren Sie die COM-Anwendung und den Moniker mit der erforderlichen BindungskonfigurationTo configure the COM application and the moniker with the required binding configuration

  • Platzieren Sie die Bindungsdefinitionen (generiert durch die ServiceModel Metadata Utility Tool (Svcutil.exe) in der Konfigurationsdatei der generierte Client-Anwendung) in der Konfigurationsdatei der Clientanwendung.Place the binding definitions (generated by the ServiceModel Metadata Utility Tool (Svcutil.exe) in the generated client application configuration file) in the client application's configuration file. 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.For example, for a Visual Basic 6.0 executable named CallCenterClient.exe, the configuration should be placed in a file named CallCenterConfig.exe.config within the same directory as the executable. Der Moniker kann nun von der Clientanwendung verwendet werden.The client application can now use the moniker. Beachten Sie, die die Bindungskonfiguration nicht erforderlich, ist Wenn einer der Typen, die durch WCF bereitgestellte Bindung verwenden.Note that the binding configuration is not required if using one of the standard binding types provided by WCF.

    Der folgende Typ wird registriert:The following type is registered.

    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.The application is exposed using a wsHttpBinding binding. Für den angegebenen Typ und die Anwendungskonfiguration werden die folgenden Beispielmonikerzeichenfolgen verwendet:For the given type and application configuration, the following example moniker strings are used.

    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}  
    

    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.You can use either of these moniker strings from within a Visual Basic 6.0 application, after adding a reference to the assembly that contains the IMathService types, as shown in the following sample code.

    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 (wie vb6appname.exe.config) gespeichert.In this example, the definition for the binding configuration Binding1 is stored in a suitably named configuration file for the client application, such as vb6appname.exe.config.

    Hinweis

    Für C#-, C++- oder andere .NET-Anwendung kann ein ähnlicher Code verwendet werden.You can use similar code in a C#, a C++, or any other .NET Language application.

    Hinweis

    : Ist der Moniker nicht ordnungsgemäß formatiert oder der Dienst nicht verfügbar, wird nach dem GetObject-Aufruf ein Syntaxfehler zurückgegeben.: If the moniker is malformed or if the service is unavailable, the call to GetObject returns an error of "Invalid Syntax". Vergewissern Sie sich bei Auftreten dieses Fehlers, dass der verwendete Moniker korrekt und der Dienst verfügbar ist.If you receive this error, make sure the moniker you are using is correct and the service is available.

    Obgleich in diesem Thema hauptsächlich die Verwendung des Dienstmonikers in VB 6.0-Code behandelt wird, können Dienstmoniker auch in anderen Sprachen verwendet werden.Although this topic focuses on using the service moniker from VB 6.0 code, you can use a service moniker from other languages. 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:When using a moniker from C++ code the Svcutil.exe generated assembly should be imported with "no_namespace named_guids raw_interfaces_only" as shown in the following code.

    #import "ComTestProxy.tlb" no_namespace named_guids  
    

    Dadurch wird die importierte Schnittstellendefinitionen geändert, sodass von allen Methoden HResult zurückgegeben wird.This modifies the imported interface definitions so that all methods return an HResult. Alle anderen Rückgabewerte werden zu out-Parametern umgewandelt.Any other return values are converted into out parameters. An der Ausführung der Methoden ändert das nichts.The overall execution of the methods remains the same. Dies ermöglicht es Ihnen, beim Aufrufen einer Methode auf dem Proxy die Ursache einer Ausnahme zu bestimmen.This allows you to determine the cause of an exception when calling a method on the proxy. Diese Funktion ist ausschließlich in C++-Code verfügbar.This functionality is only available from C++ code.

Siehe auchSee Also

ServiceModel Metadata Utility-Tool (Svcutil.exe)ServiceModel Metadata Utility Tool (Svcutil.exe)