2011-08-08 90 views
0

我想從Web服務下載xsd規範並自動將這些模式轉換(序列化)爲類(visual studio - vb.net)。如果負責xsd模式的組織改變他們的方式,只有我的類對應於xsd必須更改(而不是我的代碼的其餘部分),我想自動更新我的xsd相應的類。這可能嗎?如果是這樣,有人可以告訴我該怎麼做嗎?自動序列化

謝謝!

我使用vs2010。我想要做的是:調用一個Web服務,在該服務中可以將輸入參數發送到指定要檢索的xsd的服務(該服務是GetShemaDefenition並返回一個具有該對象的字符串屬性中的模式規範的對象)。我需要從字符串屬性中讀取xsd字符串,並將其轉換爲此xsd規範的類表示形式。是否有可能自動執行此操作?我通過使用xsd.exe手動完成了此操作。如果xsd的所有者組織改變了xsd規範,我必須測試是否有新的規範,並且如果存在,我必須構建此xsd的新類表示形式?有可能做我想做的事嗎?我怎麼知道它是否是xsd的一個重大變化,它也會影響我的代碼的其他部分,而不僅僅是xsd的類表示?

坦克很多爲您的答覆!所以如果我理解你是正確的,那麼你說的是沒有一個好的自動化這個功能的解決方案,因爲如果我最有可能(在某些情況下)更改xsd必須手動更改我的代碼?所以我必須在我的應用程序或中間服務中選擇?但是在Web服務中提供xsd的目的是什麼?我可以使用什麼Web服務?我只是想知道,也許很明顯,但我對web服務很陌生,並且渴望瞭解更多信息。

更新:

謝謝!但是你能解釋一點嗎?我必須做的是:我使用一個Web服務,其中一個屬性是一個字符串。該字符串是CDATA塊內的XML。提供Web服務的組織不會削減CDATA塊內的xml,而是將其轉發給將使用xml數據的另一個組織。使用xml數據的組織指定了我必須遵循的xsd schem來生成我的xml正確。這是我可以從另一個Web服務獲得的xsd模式。我真的不明白我能從web服務中使用這個xsd文件做什麼。我能做些什麼,以及我爲什麼要從Web服務下載它,當我無法自動使用它?因爲我必須在xsd更改時手動執行更改,所以我可以輕鬆地從組織的主頁下載xsd模式,並使用xsd.exe創建新類。我知道有一些我不明白的地方:o),你能否澄清?

+0

架構在那裏,以便您知道服務器的接口。這就像提供商和消費者之間的合同。這個契約(接口和描述它的xsd)應該是穩定的,並且該服務的提供者不應該經常改變它。專業服務提供者將採取必要的努力保持接口向後兼容以防更改。這說什麼都不能阻止他們改變它。 – Mehran

回答

0

您使用的是什麼visual studio版本?通常,您可以單擊項目的引用並添加Web服務。在這種情況下,Visual Studio會自動創建使用該服務所需的對象。您可以隨時通過右鍵單擊參考來更新它。

但是,如果它很可能經常改變,一種解決方案是實現一個適配器類。使用創建一個提供相同功能並調用實際Web服務的接口。在您的應用程序中,您只使用代理類而不使用Web服務。稍後,當Web服務接口發生變化時,您只需更改此中間類的內部。

更新:

可以使用this tool創建你的代碼的對象模型。然後你可以compile your new object model並在你的應用程序中使用它。你想要做什麼和底線是多少複雜的;當對象模型改變時,你的代碼將失敗。絕對沒有辦法想象接口如何改變,所以你可以自動做所有事情,如果函數的名稱發生變化,就沒有任何事情要做。

但是,您的情況的答案是間接的。如果您無法保證外部服務的穩定性。爲什麼不創建一個稱爲實際的中間服務?這種方式將來你不需要碰你的應用程序。您只需修改中間服務,同時保持界面兼容。

+0

我必須發表評論作爲一個新問題。 – Liss