Używam ChannelFactory razem z MetadataResolver.Resolve metoda. Konfiguracja klienta jest kłopotliwa, więc dostaję mój ServiceEndpoint z serwera.
Podczas korzystania z ChannelFactory (Of T), T jest oryginalną umową, którą można uzyskać z referencji w projekcie lub wygenerowanej instancji kontraktu. W niektórych projektach wygenerowałem kod z Service Reference, ponieważ nie mogłem dodać odwołania do biblioteki kontraktowej. Można nawet wygenerować umowę asynchroniczną z referencją do usługi i użyć tego interfejsu umowy z ChannelFactory.
Głównym celem używania ChannelFactory było pozbycie się informacji o konfiguracji klienta WCF.W przykładowym kodzie poniżej możesz 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 ostatecznym projekcie dostępneBindings są sprawdzane pod kątem użycia net.tcp lub net.pipe, jeśli są dostępne. W ten sposób mogę wykorzystać najlepsze dostępne oprawy do moich potrzeb. Opieram się tylko na tym, że na serwerze istnieje punkt końcowy metadanych.
Mam nadzieję, że to pomoże
BTW, to odbywa się za pomocą .NET 3.5. Jednak działa również z 4.0.
@MurHaf Nope - ta odpowiedź jest całkowicie moją własną pracą. ZAWSZE przypisuję wkład innych osób. Napisałem tę odpowiedź na podstawie lat pracy z usługami SOAP w .Net na różnych stanowiskach. Ten artykuł, do którego zamieszczasz linki, pochodzi z marca 2013 r., Podczas gdy moja odpowiedź została napisana w kwietniu 2010 r. - 3 lata wcześniej! Jeśli wystąpił plagiat, on mnie skopiował. Powinieneś sprawdzić daty przed oskarżeniami, ponieważ jest to bardzo łatwe. – Keith
@MurHaf nawet nie dochodzimy do tych samych wniosków - artykuł ten zaleca automatyczne generowanie proxy (opcja 1) jako "proste". Opisuję to jako łatwe do ustawienia, ale niechlujny i trudny do utrzymania. Nie omawia nawet pisania własnego serwera proxy (opcja 3). – Keith
Myślę, że SvcUtil należy również wspomnieć, ponieważ jest to jeden z najczęstszych sposobów "pisania" klienta. –