【发布时间】:2012-01-11 19:06:42
【问题描述】:
看着
WCF ChannelFactory vs generating proxy
似乎创建 WCF 客户端的最佳做法是创建代理(不是自动生成的)。
我在网上找了一段时间,没有找到完整的例子(代理类,web.config)
您能否提供示例或资源链接?
【问题讨论】:
看着
WCF ChannelFactory vs generating proxy
似乎创建 WCF 客户端的最佳做法是创建代理(不是自动生成的)。
我在网上找了一段时间,没有找到完整的例子(代理类,web.config)
您能否提供示例或资源链接?
【问题讨论】:
我相信这篇文章正是您要问的:
WCF the Manual Way... The Right Way
虽然分享了这一点,但手动创建代理可能并不总是最好的利用时间。这篇文章介绍了这样做的一些重要原因 - 您肯定会有更多的控制权,您的客户可能会更轻松,等等。但总的来说,像这样手动执行操作将需要您更多的时间,并向您的用户解释服务具体如何使用您提供的代理可能会很痛苦。
WCF 允许元数据交换和发现是有原因的,VS 会自动为您创建代理。
不管怎样,这是一篇很酷的文章和值得学习的技术。
【讨论】:
我就是这样做的。
获取服务合同和数据合同
如果我可以访问服务代码,我就拥有所有合同。如果没有,我可以使用 svcutil 或 Add Service Reference 来生成它们。
进行配置
我使用 Add Service Reference 只是为了获取 app.config 文件。然后我删除它生成的所有其他内容。根据需要编辑 app.config。
定义工厂
假设我有服务合同IFooService:
interface IFooServiceChannel : IFooService, IClientChannel { }
字面意思就是这样。没有会员。
创建工厂
fooServiceFactory = new ChannelFactory<IFooServiceChannel>(
"NetTcpBinding_IFooService");
字符串“NetTcpBinding_IFooService”是app.config中binding元素的name属性。
创建频道
fooService = fooServiceFactory.CreateChannel();
使用它
fooService.DoSomething();
最棘手的部分是正确设置 app.config。您需要了解绑定和端点。这是一个学习曲线,但并不激烈。
【讨论】:
以下是基本步骤。
其实就是这么简单。没有自动生成的代码,没有服务引用。使用异步调用和 Silverlight 会稍微复杂一些,但不会太多。
【讨论】: