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

时间:2011-05-11 00:59:51

标签: c# xsd wsdl wscf

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

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和amp;之间重用oracle.common.CommonDataTypes。 2.
到目前为止,我已经尝试过WSCF.blue& WSCF。但是这些工具在单个文件夹(和单个命名空间)中生成所有代码而不遵循命名空间 我想在命名空间下生成类,如oracle,oracle.commonData,oracle.integration1,oracle.ebo等。 因此,生成Datacontracts的任何方式都遵循精确的名称空间表示法,因为XSD具有?

2 个答案:

答案 0 :(得分:1)

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

  1. 提取数据合约 使用/ dconly标志进行集成1 在svcutil上。你需要包括所有 调用中的模式名称 SvcUtil工具。这将生成一个类 包含所有类型的文件。

  2. 手动进入文件 在你的课程到来之前瞎逛 所有在正确的命名空间。编 这是一个集会。

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

  4. 然后你可以这样做 整合2和3。

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

    希望这有帮助。

答案 1 :(得分:0)

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