我需要開發一個web服務,它將通過SOAP公開給java客戶端。我們有一個明確的架構,我們用它來在兩個系統之間進行通信。現在我需要在我的WCF合約上公開一個操作,它將Schema對象存儲在我們的數據庫中。DataContract問題
我按照以下步驟開發web服務。
- 在WCF主機過來basichttp
- 創建使用XSD.EXE
- 以架構爲上的操作類似DoThis(SchemaObject模式)
由於這將在WCF中公開,我已經去掉並修改了xsd工具生成的對象模型。我們的模式具有多層嵌套,並且是4種不同模式的組合。由xsd工具生成的對象圖具有抽象類,繼承性等。
爲此,我已經在每個類上定義了DataContract屬性,並向它添加了名稱空間,該名稱空間已經存在於XmlTypeAttribute中。我還爲每個屬性添加了DataMemebers。
模式中的一些屬性是由工具使用xmlarrayitem屬性定義的數組。
現在,當我使用SOAP UI發送請求時,該對象沒有按預期得到反序列化。幾乎所有的字段都是空的,它具有某種繼承層次結構。我已將KnownType屬性添加到適當的數據合同中,但仍無法正常工作。
我的問題是:
這是開發一個web服務的正確途徑。
有沒有辦法避免把數據合同和數據成員放在一起,只用xsd工具添加的序列化屬性?
是否有必要使用datacontract屬性,它不會與xmlserialization屬性一起工作,因爲它在xml反序列化的情況下起作用?
有兩種開發Web服務的方法,寫入wsdl和xsd,然後根據它生成類/代碼。或相反亦然。有時爲了避免跨平臺客戶端和服務器的兼容性問題。我傾向於編寫數據合同,服務合同類並運行服務來生成wsdl和模式。這確保了序列化被照顧。另外,如果你有wsdl和schema,你是否嘗試使用svcutil生成wcf服務? – Dilberted 2012-08-15 01:07:37
我會檢查您是否以正確的順序發送您的所有屬性,即按字母順序或以指定順序發送。 http://stackoverflow.com/questions/10474838/not-all-parameters-in-wcf-data-contract-make-it-through-the-web-service-call/10475117#10475117 – SCB 2012-08-15 01:40:14