Używam ChannelFactory wraz z metodą MetadataResolver.Resolve. Konfiguracja klienta jest kłopotliwa, więc pobieram ServiceEndpoint z serwera.
W przypadku korzystania z ChannelFactory (Of T) T jest oryginalną umową, którą można uzyskać z odwołania w projekcie lub wygenerowaną instancją kontraktu. W niektórych projektach wygenerowałem kod z odwołania do usługi, ponieważ nie mogłem dodać odwołania do biblioteki DLL kontraktu. Możesz nawet wygenerować kontrakt asynchroniczny z odwołaniem do usługi i użyć tego interfejsu kontraktu z ChannelFactory.
Głównym celem korzystania z ChannelFactory było pozbycie się informacji o konfiguracji klienta WCF. W poniższym przykładowym kodzie można zobaczyć, jak osiągnąć klienta WCF bez konfiguracji.
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()
W moim ostatnim projekcie, availableBindings są sprawdzane pod kątem używania net.tcp lub net.pipe, jeśli są dostępne. W ten sposób mogę użyć najlepszego dostępnego wiązania dla moich potrzeb. Opieram się tylko na fakcie, że punkt końcowy metadanych istnieje na serwerze.
mam nadzieję, że to pomoże
Przy okazji, odbywa się to za pomocą platformy .NET 3.5. Jednak działa również z 4.0.