ChannelFactory'yi MetadataResolver.Resolve yöntemi ile birlikte kullanıyorum. İstemci yapılandırması can sıkıcı, bu yüzden sunucudan ServiceEndpoint'imi alıyorum.
ChannelFactory (Of T) kullandığınızda, T, projenizdeki bir referanstan alabileceğiniz orijinal sözleşmedir veya oluşturulmuş bir sözleşme örneğidir. Bazı projelerde, sözleşme dll'sine referans ekleyemediğim için kodu bir Servis Referansından oluşturdum. Hatta hizmet referansı ile bir eşzamansız sözleşme oluşturabilir ve bu sözleşme arayüzünü ChannelFactory ile kullanabilirsiniz.
Benim için ChannelFactory'yi kullanmanın ana amacı WCF istemci yapılandırma bilgilerinden kurtulmaktı. Aşağıdaki örnek kodda, yapılandırma olmadan bir WCF istemcisine nasıl ulaşılacağını görebilirsiniz.
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()
Son projemde, availableBindings, varsa net.tcp veya net.pipe kullanmak için kontrol edilir. Bu şekilde, ihtiyaçlarım için mevcut en iyi ciltlemeyi kullanabilirim. Ben sadece sunucuda bir meta veri uç noktasının var olduğuna güveniyorum.
Umarım bu yardımcı olur
BTW, bu .NET 3.5 kullanılarak yapılır. Ancak 4.0 ile de çalışır.