J'utilise ChannelFactory avec MetadataResolver.Résoudre méthode. La configuration du Client est une peine, si je reçois mon ServiceEndpoint à partir du serveur.
Lorsque vous utilisez ChannelFactory(T), T est le contrat original que vous pouvez obtenir à partir d'une référence dans votre projet ou un contrat d'instance. Dans certains projets, j'ai le code généré à partir d'un Service de Référence, parce que je ne pouvais pas ajouter une référence au contrat dll. Vous pouvez même générer un asynch contrat avec le service de référence et de l'utilisation de ce contrat d'interface avec ChannelFactory.
Le point principal de l'utilisation ChannelFactory pour moi a été de se débarrasser de la WCF client les informations de configuration. Dans l'exemple de code ci-dessous, vous pouvez voir comment réaliser un WCF client sans config.
Dim fixedAddress = "net.tcp://server/service.svc/mex"
Dim availableBindings = MetadataResolver.Resolve(GetType(ContractAssembly.IContractName), New EndpointAddress(fixedAddress))
factoryService = New ChannelFactory(Of ContractAssembly.IContractName)(availableBindings(0))
accesService = factoryService.CreateChannel()
Dans mon projet final, la availableBindings sont vérifiées pour utiliser net.tcp ou net.pipe si disponible. De cette façon, je peux utiliser le meilleur de liaison disponibles pour répondre à mes besoins. J'ai seulement compter sur le fait que d'un point de terminaison de métadonnées existent pas sur le serveur.
J'espère que cette aide
BTW, c'est fait à l'aide .NET 3.5. Cependant, il fonctionne également avec la version 4.0.