使用 XSD 中的精确命名空间生成 DataContracts

发布于 2024-11-06 11:46:59 字数 853 浏览 2 评论 0 原文

我们必须将我们的项目与后端 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和integration1之间重用oracle.common.CommonDataTypes。 2.
到目前为止我已经尝试过 WSCF.blue &世界儿童基金会。但是这些工具在单个文件夹(和单个命名空间)中生成所有代码,而不是遵循命名空间。
我想在 oracle、oracle.commonData、oracle.integration1、oracle.ebo 等命名空间下生成类。 那么生成的数据契约是否会像 XSD 那样遵循精确的命名空间符号?

We have to integrate our project with back end Oracle Platform. And this integration is via various WebServices. I have all WSDLs and XSDs for all these integrations. And I need to generate DataContracts from these WSDLs & XSDs.
Now the problem is, mostly all of these integration shares some common data types. and I want to reuse them.
e.g,

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

in this case, I want to reuse the oracle.common.CommonDataTypes between integration1 & 2.
so far I have tried WSCF.blue & WSCF. But these tools generating all the code in a single folder(and single namespace) and not following namespaces.
I want to generate classes under namespaces like oracle, oracle.commonData, oracle.integration1, oracle.ebo etc.
so is that any way that generated Datacontracts follows exact namespace notation as the XSDs have?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风铃鹿 2024-11-13 11:46:59

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

  1. 提取数据合同
    使用 /dconly 标志的集成 1
    在 svcutil 上。您需要包括所有
    调用中的模式名称
    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。

希望这有帮助。

There is no tool which will do this for you I'm afraid. Or none that I know of. The best way to acheive what you want is:

  1. Extract the data contracts for
    integration 1 using the /dconly flag
    on svcutil. You need to include all
    the schema names in the call to
    svcutil. This will generate a class
    file with all the types.

  2. Go into the file and manually
    hack around until your classes are
    all in the right namespaces. Compile
    this into an assembly.

  3. Then go back to the integration 1
    service and generate your proxy code
    using the /r flag in svcutil to
    reference your assembly containing
    your common types which you want to
    reuse. This will create a class file
    containing your proxy which should
    reference your common types.

  4. You can then do the same for
    integration 2 and 3.

However, this approach is based on svcutil using the DataContractSerializer to do the work, as the /r flag is not available to XmlSerializer. And this will only work if the schemas exposed on the oracle services adhere to the rather strict DCS rules (can be found here: http://msdn.microsoft.com/en-us/library/ms733112.aspx). If these rules are not adhered to then svcutil will fall back to using XmlSerializer which does not support reuse of types.

Hope this helps.

思念绕指尖 2024-11-13 11:46:59

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

Use XSD2Code - you can specify the target namespace of the generated c# class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文