我只是想知道在什么情况下,当您可以使用ChannelFactory调用调用时,您更喜欢从WCF服务生成代理?
这样,您就不必生成代理并担心在服务器更新时重新生成代理了?
谢谢
发布于 2011-01-27 22:45:07
我在使用MetadataResolver.Resolve方法的同时使用ChannelFactory。客户机配置很麻烦,所以我从服务器获取ServiceEndpoint。
当您使用ChannelFactory(Of T)时,T是您可以从项目中的引用中获得的原始合同,也可以是生成的合同实例。在某些项目中,我从服务引用生成代码,因为我无法添加对契约dll的引用。您甚至可以生成一个带有服务引用的异步约定,并将该约定接口与ChannelFactory一起使用。
对我来说,使用ChannelFactory的主要目的是去掉客户端配置信息。在下面的示例代码中,您可以看到如何在没有配置的情况下实现WCF客户端。
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()
在我的最终项目中,检查availableBindings以使用net.tcp或net.pipe (如果可用)。这样,我就可以使用最好的可用绑定来满足我的需求。我只依赖于服务器上存在元数据端点这一事实。
我希望这能帮到你
顺便说一句,这是使用.NET 3.5完成的。然而,它也适用于4.0。
发布于 2009-11-09 07:21:31
为了使用ChannelFactory<T>
,您必须愿意在服务和客户端之间共享契约程序集。如果您对此没有意见,那么ChannelFactory<T>
可以为您节省一些时间。
发布于 2009-11-09 09:19:30
代理将构建异步函数,这对它来说是很好的。
https://stackoverflow.com/questions/1698275
复制相似问题