Uso ChannelFactory insieme al metodo MetadataResolver.Resolve. La configurazione del client è un problema, quindi ottengo il mio ServiceEndpoint dal server.
Quando si utilizza ChannelFactory (Of T), T è il contratto originale che è possibile ottenere da un riferimento nel progetto o da un'istanza del contratto generata. In alcuni progetti, ho generato il codice da un riferimento di servizio perché non è stato possibile aggiungere un riferimento alla dll del contratto. È anche possibile generare un contratto asynch con il riferimento del servizio e utilizzare l'interfaccia del contratto con ChannelFactory.
Il punto principale dell'utilizzo di ChannelFactory per me è stato quello di eliminare le informazioni di configurazione del client WCF.Nel seguente codice di esempio, è possibile vedere come ottenere un client WCF senza configurazione.
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()
Nel mio progetto finale, i availableBindings sono controllati da usare net.tcp o net.pipe se disponibile. In questo modo, posso utilizzare la migliore associazione disponibile per le mie esigenze. Mi baso solo sul fatto che sul server esiste un endpoint di metadati.
Spero che questo aiuta
BTW, questo viene fatto utilizzando .NET 3.5. Tuttavia funziona anche con 4.0.
fonte
2011-01-27 14:45:07
@MurHaf No: questa risposta è interamente opera mia. Attribuisco SEMPRE i contributi degli altri. Ho scritto questa risposta sulla base di anni di lavoro con i servizi SOAP in .Net in vari lavori. L'articolo a cui ti colleghi è del marzo 2013, mentre la mia risposta è stata scritta nell'aprile 2010 - 3 anni prima! Se si è verificato un plagio, mi ha copiato. Dovresti controllare le date prima di fare accuse in quanto è molto facile da fare. – Keith
@MurHaf non arriviamo nemmeno alle stesse conclusioni: quell'articolo consiglia di generare automaticamente un proxy (opzione 1) come "semplice". Lo descrivo come facile da configurare, ma disordinato e difficile da mantenere. Non parla nemmeno di scrivere il tuo proxy (opzione 3). – Keith
Penso che anche SvcUtil dovrebbe essere menzionato, in quanto questo è uno dei modi più comuni per "scrivere" un client. –