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

我们必须将我们的项目与后端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,oracle.commonData,oracle.integration1,oracle.ebo等名称空间下生成类。那么生成Datacontracts的任何方式都遵循XSD所具有的精确名称空间表示法?

我担心没有可以为你做这件事的工具。 或者我所知道的。 实现你想要的最好的方法是:

  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。

希望这可以帮助。

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