【问题标题】:Class not included in WCF referenceWCF 参考中未包含的类
【发布时间】:2013-10-03 16:16:03
【问题描述】:

我正在为我正在进行的项目使用 WCF 和 SignalR 的组合。

WCF 服务有许多 DTO,因为它们是 [OperationContract] 的一部分(作为参数或返回类型)。

但是,我有两个类(MachineStatusDtoDeviceStatusDto)仅用作通过 SignalR 从服务器广播的返回类型:

machine.On<MachineStatusDto>("Update", m => UpdateMachineRecord(m)); //On client side

我显然可以在我的 WCF 服务上创建一个使用这些类型的方法,但我觉得应该有一种方法可以通知 WCF 服务包含特定类型,即使它们不是 [OperationContract] 的一部分。

编辑:

最后,如果您只是将[ServiceKnownType(typeof(SomeDto))] 添加到您的 WCF ServiceContract 接口,它会知道发送那些除了服务合同中明确使用的类之外​​的类。就这么简单。

【问题讨论】:

  • 通常我只是将这些类分离到一个单独的共享“域”项目中,这样所有项目都具有相同的类视图,而不是 wcf 服务引用的视图。
  • 这些类已经全部位于服务解决方案中的一个共享“域”项目中(如果我导入了一个 DLL 而不是使用服务引用,那么这些类就会存在)。当我可以更新服务引用时,我只是想避免传递 DLL。
  • 根据我的经验,您必须将其附加到 [OperationContract] 才能使其显示在您的客户端。我尝试了多种解决方法,但最终这就是我一直在做的事情。
  • 在我看来,我宁愿将我的类型放在 dll 中,也不愿依赖它们通过服务引用可用。这样,当您更改 DTO 中的任何内容时,您永远不需要更新服务引用,并且您拥有对象外观的一个来源,而不是两个来源。
  • WCF 允许数据契约版本控制来解决这个问题,我认为更新服务引用比传递特定版本的 DLL 更不容易出错,尤其是当多个团队涉及他们自己的单独的应用程序。我想这只是 SignalR 在胖应用中的缺点之一

标签: c# wcf serialization signalr


【解决方案1】:

这已经讨论过很多次了。 herehere

【讨论】:

  • 我搜索了一个解决方案,但这些都围绕ServiceKnownType(不完全是最直观的搜索词)。我将编辑我的原始问题,以便更清楚地了解对我有用的解决方案。
猜你喜欢
  • 2015-11-25
  • 2010-10-15
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 2021-04-26
  • 2017-04-25
相关资源
最近更新 更多