2009-06-25 48 views
1

我有一个自我托管的基于TCP的WCF服务。我现在正在构建一个消耗该服务的项目,但似乎至少有两种方法可以为项目添加服务引用,并且这两种方法都会生成截然不同的代理。首先,我使用了项目菜单中的“添加服务引用”,但是这生成了相当多的文件,甚至是核心.Net类型的一些XML模式。然后,我尝试了只生成两个文件,一个代理和一个配置文件,其中包含服务参考和绑定参数的SvcUtil,这是好得多,但...创建WCF服务引用的正确方法?

在这两种情况下,VS工具似乎重现了类型定义尽管我已经提供了包含该服务及其使用的所有类型的程序集的引用。例如,我的一些服务方法返回实体类的泛型集合。所有的实体类都是在我从消费项目直接引用的程序集中定义的,所以为什么要重新定义这些类型呢?

如果有些机构可以提供一些关于使用WCF服务返回Entity类型和任何最佳实践的建议,我将不胜感激。

回答

2

我们发现添加服务引用会创建大量不需要的代码,这些代码的获取方式不仅仅是帮助。

我们已经走了过来,以设置它的手动方式,有一个介绍,这个方法在这里:

http://perseus.franklins.net/dnrtvplayer/player.aspx?ShowNum=0103

+1

是 - 但是 - 即*仅*以往​​的作品中,你控制*通信的双向*端,并使用.NET和WCF两端的场景。如果是这种情况 - 这样做的好方法!但请记住 - 这是“真实世界”中非常有限的情景。 – 2009-06-25 14:31:47

2

是的,在你的具体情况下,这似乎是重复 - 但考虑到这:WCF也被设计为可互操作,并且在大多数情况下,尤其是如果您有一个非.NET客户端调用您的代码时,您将不具有合约和可用接口的程序集。

所以没有什么,但创建一个完整的代理,其中包含所有的信息,以便在所有可能的情况下工作。

现在,如果你真的想避免重复数据合约等,你可以将它们编译成它们自己的程序集,然后在调用svcutil时使用/ r:(程序集名称)开关来告诉它重新使用代码和合同在该大会。

马克