我们必须将我们的项目与后端 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?
发布评论
评论(2)
恐怕没有任何工具可以为您做到这一点。或者据我所知没有。实现您想要的效果的最佳方法是:
提取数据合同
使用 /dconly 标志的集成 1
在 svcutil 上。您需要包括所有
调用中的模式名称
svcutil。这将生成一个类
包含所有类型的文件。
进入文件并手动
到处乱搞,直到你的课程结束
全部都在正确的命名空间中。编译
将其放入程序集中。
然后返回集成1
服务并生成您的代理代码
使用 svcutil 中的 /r 标志
引用您的程序集包含
您想要的常见类型
重复使用。这将创建一个类文件
包含你的代理应该
参考您的常见类型。
然后您可以对
集成 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:
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.
Go into the file and manually
hack around until your classes are
all in the right namespaces. Compile
this into an assembly.
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.
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.
使用 XSD2Code - 您可以指定生成的 C# 类的目标命名空间。
Use XSD2Code - you can specify the target namespace of the generated c# class.