2011-05-11 49 views
5

我们必须将我们的项目与后端Oracle平台集成。这个集成通过各种Web服务。我拥有所有这些集成的所有WSDL和XSD。我需要从这些WSDL产生DataContracts XSDs。
现在的问题是,大多数这些集成共享一些常见的数据类型。我想重复使用它们。
e.g,使用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 

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

回答

1

没有工具可以为你做到这一点恐怕。或者我不知道。到acheive你想要什么,最好的办法是:

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

  2. 进入文件并手动 破解,直到您的课程全部在正确的命名空间中的 。编译 这到一个程序集。

  3. 然后回到积分1个 服务和使用SvcUtil工具的/ R标志包含要 重用 您的常见类型 参考您的装配体生成代理代码 。这将创建一个包含您的代理的 类文件,其中 引用您的常用类型。

  4. 然后,您可以做同样 集成2和3

然而,这种方法是使用DataContractSerializer的做工作,为/ R标志不可用于基于SvcUtil工具XmlSerializer的。这只有在暴露在oracle服务上的模式遵循相当严格的DCS规则时才能起作用(可以在这里找到:http://msdn.microsoft.com/en-us/library/ms733112.aspx)。如果不遵守这些规则,则svcutil将回退到使用不支持重用类型的XmlSerializer。

希望这会有所帮助。

+0

/r在svcutil中的标志对我很有用。但是,对于每个集成,大约有500个类正在生成。所以我不可能手动更改这些类。另外,不建议修改自动生成的类。 – 2011-05-19 00:24:17

+0

我同意如果源协议经常更改,修改生成的文件并不明智。但是,当你调用Oracle服务时,我不认为情况会如此。所以这样做是安全的。这是一次性练习,虽然它可能很耗时,但一旦完成,它就完成了。我不知道还有什么其他的解决方案。 – 2011-05-20 15:06:07

0

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

+0

http://xsd2code.codeplex.com/ – Sascha 2011-05-15 14:57:13

+0

xsd2code的问题在于它会在同一个命名空间中生成所有的类。我的要求是生成具有名称空间的类作为XSD命名空间。 – 2011-05-16 00:26:03