添加WCF服务引用也会添加DataContract类型

Avi*_*lon 3 .net wcf

我已经使用Visual Studio的添加服务引用功能来添加服务(实际上它是一个工作流服务,在WF4 RC1中创建,但我认为这没有任何区别),并且它还添加了服务使用的DataContracts.起初这看起来很好,因为我在DataContracts中所拥有的只是属性,没有实现.但是现在我在一个数据协定的构造函数中添加了代码,初始化创建了一个暴露其他DC列表的属性的实例,当我通过VS(2010 RC1)更新服务引用时,实现没有更新.

我该怎么办?我应该使用我的DC而不是VS创建的DC,还是应该使用VS创建的?我注意到VS生成的DC中的属性包含一些额外的逻辑,用于检查setter中的相等性,并且它们也实现了一些接口(如IExtensibleDataObject和INotifyPropertyChanged),这可能会在将来得到方便(我不是在WCF知识渊博).

感谢您的时间,Avi

mar*_*c_s 6

是的,这就是它的工作方式 - 当你有一个独立的自主服务时,如果你考虑它,它就是唯一可行的方式.

如果您控制电线的两端,例如您同时编写服务和客户端,您当然可以做更多的事情:

  • 您可以将所有服务和数据协定放入单独的程序集中MyContracts,然后在服务和客户端添加对该程序集的引用

  • 当您这样做时,Visual Studio将不会重新创建它在引用的程序集中找到的那些类型,但它只会使用它们

但是你需要非常小心:数据契约应该只包含数据 - 从来没有任何行为!所以要特别注意不要将任何基于行为的东西放入DataContracts.在WCF中客户端和服务之间传递的消息是纯文本的序列化消息 - 您无法在两者之间传达任何代码,真的 - 记住这一点!

  • +1.该问题的解决方案实际上是摆脱DataContract中的代码,并将其用作愚蠢的DTO.WCF与远程处理或分布式对象无关. (2认同)