Comment : inscrire et configurer un moniker de service
Avant d'utiliser le moniker de service Windows Communication Foundation (WCF) dans une application COM avec un contrat typé, vous devez inscrire les types avec attributs requis avec COM et paramétrer l'application COM et le moniker avec la configuration de liaison requise.
Pour inscrire les types avec attributs requis avec COM
Utilisez l'Outil Service Model Metadata Tool (Svcutil.exe) pour récupérer le contrat de métadonnées à partir du service WCF. Cette opération génère le code source d'un assembly client WCF et un fichier de configuration d'application cliente.
Vérifiez que les types dans l'assembly sont marqués comme
ComVisible
. Pour cela, ajoutez l'attribut suivant au fichier AssemblyInfo.cs dans votre projet Visual Studio.[assembly: ComVisible(true)]
Compilez le client WCF managé comme un assembly avec nom fort. Cette procédure requiert une signature à l'aide d'une paire de clés de chiffrement. Pour plus d'informations, consultez Signature d'un assembly avec un nom fort dans le Guide du développeur de .NET (page pouvant être en anglais).
Utilisez l'outil Assembly Registration Tool (Regasm.exe) avec l'option /tlb pour inscrire les types dans l'assembly avec COM.
Utilisez l'outil Global Assembly Cache Tool (Gacutil.exe) pour ajouter l'assembly au Global Assembly Cache.
Remarque : La signature de l'assembly et son ajout au Global Assembly Cache sont deux étapes facultatives, mais elles peuvent simplifier le processus de chargement de l'assembly à partir de l'emplacement approprié au moment de l'exécution.
Pour configurer l'application COM et le moniker à l'aide des paramètres de liaison requis
Placez les définitions de liaison (générées par l'Outil Service Model Metadata Tool (Svcutil.exe) dans le fichier de configuration d'application cliente généré) dans le fichier de configuration de l'application cliente. Par exemple, pour un fichier exécutable Visual Basic 6.0 nommé CallCenterClient.exe, la configuration doit être placée dans un fichier nommé CallCenterConfig.exe.config, dans le même répertoire que le fichier exécutable. L'application cliente peut maintenant utiliser le moniker. Notez que la configuration de liaison n'est pas requise si vous utilisez l'un des types de liaison standard fournis par WCF.
Le type suivant est inscrit.
using System.ServiceModel; ... [ServiceContract] public interface IMathService { [OperationContract] public int Add(int x, int y); [OperationContract] public int Subtract(int x, int y); }
L'application est exposée à l'aide d'une liaison wsHttpBinding. Pour une configuration de type et d'application donnée, les exemples de chaînes de moniker suivants sont utilisés.
service4:address=https://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1
or
service4:address=https://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1, contract={36ADAD5A-A944-4d5c-9B7C-967E4F00A090}
Vous pouvez utiliser l'une ou l'autre de ces chaînes de moniker à partir de l'application Visual Basic 6.0, après avoir ajouté une référence à l'assembly qui contient les types IMathService, tel qu'indiqué dans l'exemple de code suivant.
Dim MathProxy As IMathService Dim result As Integer Set MathProxy = GetObject( _ "service4:address=https://localhost/MathService, _ binding=wsHttpBinding, _ bindingConfiguration=Binding1") result = MathProxy.Add(3, 5)
Dans cet exemple, la définition de la configuration de liaison
Binding1
est stockée dans un fichier de configuration judicieusement nommé pour l'application cliente, par exemple vb6nomapp.exe.config.Remarque : Vous pouvez utiliser un code semblable dans une application C#, C++ ou d'un autre langage .NET. Remarque : Si le moniker est incorrect ou si le service n'est pas disponible, l'appel à GetObject retourne une erreur de type « Syntaxe non valide ». Si vous recevez cette erreur, assurez-vous que le moniker que vous utilisez est correct et que le service est disponible. Bien que cette rubrique porte sur l'utilisation du moniker de service à partir du code VB 6.0, vous pouvez utiliser un moniker de service à partir d'autres langages. Lors de l'utilisation d'un moniker à partir du code C++, l'assembly généré par Svcutil.exe doit être importé avec le paramètre « no_namespace named_guids raw_interfaces_only », tel qu'indiqué dans le code suivant.
#import "ComTestProxy.tlb" no_namespace named_guids
Cela modifie les définitions d'interface importées afin que toutes les méthodes retournent un HResult. Toutes les autres valeurs de retour sont converties en paramètres de sortie. L'exécution globale des méthodes reste la même. Cela vous permet de déterminer la cause d'une exception lorsque vous appelez une méthode sur le proxy. Cette fonctionnalité n'est disponible qu'à partir du code C++.