自动生成的代理是实现异步WCF客户端的最佳方法吗?

时间:2010-10-10 19:43:13

标签: c# .net wcf

我正在为C#/ .NET 3.5项目设计架构,该项目将通过WCF在客户端和服务器之间进行通信。这通常是一个查询响应系统,例如,其中一个服务方法可能如下所示:

User GetUserByLastName(string lastName);

另一个规定是需要异步调用WCF客户端方法,这样它们不会对UI的响应性产生负面影响,因为在某些情况下这些方法可能需要很长时间才能执行。

我已经根据Microsoft的文档实现了概念验证,因此使用Visual Studio中的“添加服务引用”对话框自动生成客户端代理,并检查选项是否包含异步方法。

这可以很好地作为概念证明,但我遇到了许多博客文章和其他强烈建议不要在大型​​项目中使用自动生成代理的参考文献。其中一些来源提供了替代方案,包括手动创建代理或使用反射动态创建代理,但这些解决方案似乎总是只实现同步WCF调用。

异步WCF客户端的自动生成代理涉及相当多的样板代码,我不愿意为每个服务和方法手动实现和维护。

所以我的问题是:

将自动生成的代理用于异步WCF服务是不是一个坏主意,如果是这样,是否有一个很好的替代方案,不需要对锅炉板代码进行大量的手动维护?

1 个答案:

答案 0 :(得分:2)

这有几个原因很糟糕,我相信你已经在这些博文上阅读了所有内容。对我来说,主要的缺点是:

1)频道创建是一个混乱,丑陋和低效的

2)无法缓存ChannelFactory

3)与DI

不兼容

4)如果您重复使用客户端,通道可能会出错,您必须围绕它进行编码

5)代码生成,如果代码发生变化,则必须重新生成。

6)老实说,它并没有保存很多代码。如果使用web.config / app.config设置终点,则使用服务接口创建通道工厂(并缓存它)然后创建代理是几行代码。