像在XSD中一样使用精确命名空间生成DataContracts

Nir*_*hah 5 c# xsd wsdl wscf

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

Integration1: oracle/common/commonDataTypes.xsd
              oracle/integration1/someXSD.xsd
              oracle/ebo/baseTypes.xsd
Integration2: oracle/common/commonDataTypes.xsd
              oracle/integration2/someXSD.xsd
              oracle/ebo/baseTypes.xsd
Integration3: oracle/commonDataTypes.xsd
              oracle/integration2/someXSD.xsd
              oracle/ebo/baseTypes.xsd

在这种情况下,我想在integration1和2之间重用oracle.common.CommonDataTypes.
到目前为止,我已经尝试了WSCF.blue和WSCF.但是这些工具在单个文件夹(和单个命名空间)中生成所有代码而不遵循命名空间.
我想下生成像甲骨文,oracle.commonData,oracle.integration1命名空间类,oracle.ebo等,所以是生成Datacontracts任何方式如下确切的命名空间的符号为XSD文件有哪些?

tom*_*ern 1

恐怕没有任何工具可以为您做到这一点。或者据我所知没有。实现你想要的最好方法是:

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

  2. 进入该文件并手动修改,直到您的类全部位于正确的命名空间中。将其编译成程序集。

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

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

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

希望这可以帮助。