Ich verwende ChannelFactory zusammen mit der MetadataResolver.Resolve-Methode. Die Client-Konfiguration ist problematisch, daher erhalte ich meinen ServiceEndpoint vom Server.
Wenn Sie ChannelFactory (Of T) verwenden, ist T entweder der ursprüngliche Vertrag, den Sie aus einer Referenz in Ihrem Projekt oder einer generierten Vertragsinstanz erhalten können. In einigen Projekten habe ich den Code aus einer Servicereferenz generiert, da ich der Vertrags-DLL keinen Verweis hinzufügen konnte. Sie können sogar einen asynchronen Vertrag mit der Servicereferenz erstellen und diese Vertragsschnittstelle mit ChannelFactory verwenden.
Der Hauptpunkt bei der Verwendung von ChannelFactory war für mich, die WCF-Client-Konfigurationsinformationen zu entfernen. Im folgenden Beispielcode sehen Sie, wie Sie einen WCF-Client ohne Konfiguration erreichen.
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()
In meinem letzten Projekt werden die verfügbaren Bindungen überprüft, um net.tcp oder net.pipe zu verwenden, falls verfügbar. Auf diese Weise kann ich die beste verfügbare Bindung für meine Bedürfnisse verwenden. Ich verlasse mich nur auf die Tatsache, dass auf dem Server ein Metadatenendpunkt vorhanden ist.
ich hoffe das hilft
Übrigens geschieht dies mit .NET 3.5. Es funktioniert jedoch auch mit 4.0.