Gewusst wie: Registrieren und Konfigurieren eines Dienstmonikers
Vor der Verwendung eines Windows Communication Foundation (WCF)-Dienstmonikers 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.
So registrieren Sie die erforderlichen attributierten Typen bei COM
Verwenden Sie das ServiceModel Metadata Utility Tool (Svcutil.exe)-Tool, um den Metadatenvertrag vom WCF-Dienst abzurufen. Dadurch werden der Quellcode für eine WCF-Clientassembly sowie eine Konfigurationsdatei für die Clientanwendung generiert.
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)]
Kompilieren Sie den verwalteten WCF-Client als Assembly mit starkem Namen. Dies erfordert die Signierung mit einem kryptografischen Schlüsselpaar. Weitere Informationen finden Sie unter Signieren einer Assembly mit einem starken Namen (möglicherweise in englischer Sprache) im .NET-Anwendungshandbuch.
Verwenden Sie das Assemblyregistrierungstool (Regasm.exe) mit der /tlb-Option, um die Typen in der Assembly bei COM zu registrieren.
Fügen Sie die Assembly mithilfe des Tools für den globalen Assemblycache (Gacutil.exe) dem globalen Assemblycache hinzu.
Tipp
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.
So konfigurieren Sie die COM-Anwendung und den Moniker 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 entsprechenden 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:
service:address=https://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1
or
service:address=https://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( _ "service:address=https://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.Tipp
Für C#-, C++- oder andere .NET-Anwendung kann ein ähnlicher Code verwendet werden.
Tipp
: Ist der Moniker nicht ordnungsgemäß formatiert 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.
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. 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.