2010-03-16 89 views
2

我是新來的,我希望任何人都可以幫助我。爲什麼WCF服務返回xml序列化對象?

我有用VB.NET編寫的這個客戶端的WCF服務和Windows窗體。 Service類開始返回xml序列化對象,但Service端的所有類都是DataContract -s,服務類是DataContractFormat。我到處搜索關於序列化的內容,我無法找到它開始這樣做的理由。

我檢查了我的類和服務,app.config文件,但我找不到任何東西。

我檢查了Reference.vb類,它的System.Xml.Serialization.XmlElementAttribute無處不在。 這個問題看起來可能是假的,但我真的不知道該怎麼做。我只想知道什麼可以導致服務採取這種行動。

謝謝。

+1

你是什麼意思「服務類開始返回XML序列化對象」?服務總是返回序列化的對象。 – 2010-03-16 07:52:24

+0

我的意思是,我的服務工作正常,但我無法弄清楚爲什麼它開始返回xmlnode。 實施例:System.Xml.Serialization.XmlElementAttribute _ 公共接口IService1 _ 功能getActivities()作爲對象() 完接口 函數生成助手活動對象陣列,並返回到客戶端側,但在客戶端而不是對象數組我有xmlnode。 – hgulyan 2010-03-16 07:57:46

+0

抱歉,不清楚的解釋。 據我所知,WCF可以返回數據和XML序列化對象,我的服務正在返回數據序列化對象,但它現在返回xmlnode。我試圖找出原因。 – hgulyan 2010-03-16 08:07:11

回答

3

所以我假設你沒有故意改爲使用XmlSerializer,那麼,是嗎?

當WCF運行時決定使用XmlSerializer而不是DataContractSerializer時,通常有多種情況,即當您有一個現有的WSDL/XSD包含DataContractSerializer無法處理的某些元素時。

您是否檢查了Reference.vb類 - 通常,Visual Studio中的Add Service Reference函數會將註釋添加到生成的文件中,以解釋爲什麼它切換到XML序列化程序。它說什麼嗎?

+0

marc_s, 不,我沒有在我的項目中使用XmlSerializer。 「現有的WSDL/XSD」是指我自己的WSDL/XSD文件還是由wsf生成的?我沒有WSDL和XSD文件。 我檢查了Refernce.vb,並在大多數服務功能上面找到了相同的註釋。它說: 「'CODEGEN:Parameter''需要使用參數模式無法捕獲的其他模式信息,具體屬性爲'System.Xml.Serialization.XmlArrayAttribute'。」 謝謝你的迴應。我會嘗試谷歌的問題。這個評論可以成爲我的問題的原因嗎?這是什麼意思 – hgulyan 2010-03-16 12:04:29

+0

我現在可以看到生成的代碼,xsd和wsdl文件, 但它不起作用。 我添加了一個函數來返回我的自定義類 的數組,並且在更新服務引用之後,它生成了xml序列化的 對象。 – hgulyan 2010-03-17 06:10:58

+0

它會通過添加該數組來顯示,您觸發WCF切換到XML串行器模式。數組中標記爲[DataContract]的對象類型是否返回?你可以嘗試返回列表而不是? – 2010-03-17 06:40:37