5

我们必须将我们的项目与后端 Oracle 平台集成。这种集成是通过各种 Web 服务实现的。我拥有所有这些集成的所有 WSDL 和 XSD。我需要从这些 WSDL 和 XSD 生成 DataContract。
现在的问题是,大多数这些集成都共享一些常见的数据类型。我想重用它们。
例如,

集成1:oracle/common/commonDataTypes.xsd
              oracle/integration1/someXSD.xsd
              oracle/ebo/baseTypes.xsd
集成2:oracle/common/commonDataTypes.xsd
              oracle/integration2/someXSD.xsd
              oracle/ebo/baseTypes.xsd
集成3:oracle/commonDataTypes.xsd
              oracle/integration2/someXSD.xsd
              oracle/ebo/baseTypes.xsd

在这种情况下,我想在集成 1 和 2 之间重用 oracle.common.CommonDataTypes。
到目前为止,我已经尝试过 WSCF.blue 和 WSCF。但是这些工具在单个文件夹(和单个命名空间)中生成所有代码,而不是遵循命名空间。
我想在 oracle、oracle.commonData、oracle.integration1、oracle.ebo 等命名空间下生成类,那么生成 Datacontracts 的任何方式都遵循 XSD 所具有的确切命名空间表示法吗?

4

2 回答 2

1

恐怕没有工具可以为你做到这一点。或者我不知道。实现您想要的最佳方法是:

  1. 使用 svcutil 上的 /dconly 标志提取集成 1 的数据协定。您需要在对 svcutil 的调用中包含所有架构名称。这将生成一个包含所有类型的类文件。

  2. 进入文件并手动修改,直到你的类都在正确的命名空间中。将其编译为程序集。

  3. 然后返回到集成 1 服务并使用 svcutil 中的 /r 标志生成代理代码,以引用包含要重用的常用类型的程序集。这将创建一个包含您的代理的类文件,该代理应引用您的常用类型。

  4. 然后,您可以对集成 2 和 3 执行相同的操作。

但是,此方法基于 svcutil 使用 DataContractSerializer 来完成工作,因为 /r 标志对 XmlSerializer 不可用。这只有在 oracle 服务上公开的模式遵守相当严格的 DCS 规则时才有效(可以在此处找到:http: //msdn.microsoft.com/en-us/library/ms733112.aspx)。如果不遵守这些规则,那么 svcutil 将回退到使用不支持类型重用的 XmlSerializer。

希望这可以帮助。

于 2011-05-18T10:45:21.123 回答
0

使用 XSD2Code - 您可以指定生成的 c# 类的目标命名空间。

于 2011-05-15T14:56:53.203 回答