2011-05-11 55 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

相關問題