【问题标题】:WCF - Reuse types from another service referenceWCF - 重用来自另一个服务引用的类型
【发布时间】:2015-04-05 03:19:27
【问题描述】:

我们有两个用java编写的webservice服务器:

  • 核心服务
  • 扩展服务。

ExtensionService 引用 CoreService 并重用类型。

同样,我们有两个客户端库:

  • CoreClient 带有对 CoreService 的服务引用
  • ExtensionClient 具有对 ExtensionService 的服务引用

我希望 ExtensionClient 重用从 CoreClient 生成的类型。如果 ExtensionClient 生成自己的“核心”类,我无法重用来自 CoreClient 的业务逻辑,因为 CoreClient 与 ExtensionClient 使用不同的类。

我可以手动编写 CoreClient 数据合同。 如何强制 ExtensionClient 重用 CoreClient 中的类

【问题讨论】:

  • 澄清一下,您正在编写一个 WCF 客户端来调用 2 个 java 服务?
  • @Tom:差不多。我的 WCF ExtensionClient 将只调用 java ExtensionService。 CoreClient 可以命名为 CoreLibrary。我需要跨多个解决方案共享核心库。 CoreLibrary 中的契约和业务逻辑将是相同的,但 ExtensionService 会在每个解决方案中发生变化。

标签: java wcf


【解决方案1】:

here 所述,使用带有 /r 标志的 svcutil.exe 为 ExtensionService 生成客户端代理,将 CoreService dll 作为参数传递。

但是,您需要注意 svcutil.exe 使用 DataContractSerializer 来帮助生成代码,不幸的是,在解析您的服务合同时,它使用了 strict set of rules

因此,除非您为 XSD 提供服务并遵守这组规则,否则 svcutil.exe 将切换为使用不支持 /r 标志(或重复使用)的 XmlSerializer。因此,您将无法重用类型。

【讨论】:

  • DataContractSerializer 不兼容是我无法重用类型的原因。我将尝试自定义 CustomTool“WCF 代理生成器”以跳过预定义的代理类集的生成。由于它们是在引用的程序集中生成的,因此它可以工作。
  • @Liero 另一种选择是手动编辑您生成的类 - 只要您不预期服务合同会经常更改/,这将是值得的
  • 不幸的是,它们会经常变化。 CoreService 旨在在多个解决方案之间共享,ExtensionService 将根据客户的要求扩展核心。 ExtensionService 每次都会不一样,所以我想尽量自动化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
相关资源
最近更新 更多