Utilizo ChannelFactory junto con el método MetadataResolver.Resolve. La configuración del cliente es una molestia, así que obtengo mi ServiceEndpoint del servidor.
Cuando usa ChannelFactory (Of T), T es el contrato original que puede obtener de una referencia en su proyecto o una instancia de contrato generada. En algunos proyectos, generé el código a partir de una referencia de servicio porque no pude agregar una referencia a la dll del contrato. Incluso puede generar un contrato asincrónico con la referencia de servicio y usar esa interfaz de contrato con ChannelFactory.
El punto principal de usar ChannelFactory para mí fue deshacerme de la información de configuración del cliente WCF. En el código de muestra a continuación, puede ver cómo lograr un cliente WCF sin 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()
En mi proyecto final, los enlaces disponibles están marcados para usar net.tcp o net.pipe si están disponibles. De esa manera, puedo utilizar la mejor encuadernación disponible para mis necesidades. Solo confío en el hecho de que existe un punto final de metadatos en el servidor.
espero que esto ayude
Por cierto, esto se hace usando .NET 3.5. Sin embargo, también funciona con 4.0.