【问题标题】:Adding WCF service reference adds DataContract types too添加 WCF 服务引用也会添加 DataContract 类型
【发布时间】:2010-03-14 08:40:39
【问题描述】:

我使用 Visual Studio 的 Add Service Reference 功能添加了一个服务(实际上它是一个工作流服务,在 WF4 RC1 中创建,但我认为这没有任何区别),它还添加了 DataContracts服务用途。起初这似乎很好,因为我在 DataContracts 中拥有的只是属性,没有实现。但是现在我在一个数据合约的构造函数中添加了代码,该代码初始化创建了一个属性的实例,该实例公开了其他 DC 的列表,并且当我通过 VS (2010 RC1) 更新了服务引用时,实现没有更新。

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

感谢您抽出宝贵时间, 视频

【问题讨论】:

    标签: .net wcf


    【解决方案1】:

    是的,这就是它的工作方式——如果你想一想,当你有一个独立的、自治的服务时,这确实是它可以工作的唯一方式。

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

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

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

    但是您需要非常小心:数据协定应该只包含 数据 - 绝不能包含任何行为!所以要格外小心,不要将任何基于行为的东西放入您的 DataContracts。 WCF 中客户端和服务之间传递的消息是纯文本的序列化消息 - 您无法在两者之间传递任何代码,真的 - 记住这一点!

    【讨论】:

    • +1。该问题的解决方案实际上是摆脱DataContract中的代码,并将其用作愚蠢的DTO。 WCF 与远程或分布式对象无关。
    • 非常感谢 marc_s。这正好回答了我的问题。抱歉,我对在 StackOverflow 上提问的规则一无所知。我非常感谢社区的帮助以及他们所做的所有贡献。我的坏:(再次感谢哥们。
    【解决方案2】:

    ma​​rc_s,如果我的客户在 Silverlight 中,我如何创建这个单独的程序集“MyContracts”?我当然不能将此程序集创建为 .NET 程序集,因为在这种情况下,无法从我的 SL 项目中引用它。是的,我可以将此程序集创建为“SL 类库”,甚至可以从我的 WCF 项目中引用它,但是我无法在 Studio 中执行“更新服务引用”!我收到错误消息“无法加载文件或程序集‘System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e’或其依赖项之一。系统找不到指定的文件”。请注意,v.2.0.5.0 是此 DLL 的 SILVERLIGHT 版本,而不是 .NET 版本!似乎它需要这个 DLL 来理解“MyContracts”程序集中存在的 DataContract/DataMember 属性。如果我将此 DLL 放在服务器上(托管我的 WCF 服务) - 问题就消失了,但是那些不使用“MyContracts”程序集并在自身内部包含 DataContracts 的服务会出现另一个问题:“Type '...'无法序列化。请考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您希望对其进行序列化的所有成员。请参阅 Microsoft .NET Framework 文档以了解其他支持的类型”。似乎它无法理解要使用哪个 System.Runtime.Serialization.dll - SL 或 .NET 之一。有什么想法吗?!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2015-04-15
    • 2013-04-13
    相关资源
    最近更新 更多