【问题标题】:Generating DataContracts with exact namespace as in XSD使用 XSD 中的确切命名空间生成 DataContract
【发布时间】:2011-05-11 00:59:51
【问题描述】:

我们必须将我们的项目与后端 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

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

【问题讨论】:

    标签: c# xsd wsdl wscf


    【解决方案1】:

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

    1. 提取数据合同 集成 1 使用 /dconly 标志 在 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。

    希望这会有所帮助。

    【讨论】:

    • svcutil 中的 /r 标志对我很有用。但是,对于每个集成,都会生成大约 500 个类。所以我不可能手动更改这些许多类。另外,不建议修改自动生成的类。
    • 我同意如果源合同经常更改,修改生成的文件是不明智的。但是,当您调用 Oracle 服务时,我不希望会出现这种情况。所以这样做是安全的。这是一次性的练习,所以虽然它可能很耗时,但一旦完成,它就完成了。我不知道还有什么其他的解决方案。
    【解决方案2】:

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

    【讨论】:

    • xsd2code 的问题是它在同一个命名空间中生成所有类。我的要求是生成命名空间为 XSD 命名空间的类。
    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 2011-11-16
    • 2021-05-04
    • 1970-01-01
    • 2021-06-27
    • 2019-10-23
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多