2010-05-18 47 views
8

我已經創建了一個方法的WCF服務,它返回一個System.Xml.XmlElementVS2010將System.Xml.XmlElement與System.Xml.Linq.XElement混淆?

接口:

[ServiceContract] 
public interface IWCFService 
{ 
    [OperationContract] 
    XmlElement Execute(...); 
} 

服務:

public XmlElement Execute(...) 
{ 
    XmlNode node = ...; 

    return (XmlElement)node; 
} 

當我嘗試訪問該服務部署在我的服務器上

WCFServiceClient service = new WCFServiceClient("WSHttpBinding_IWCFService"); 
XmlElement node = service.Execute(...); 

我得到的錯誤:

Cannot implicitly convert type 'System.Xml.Linq.XElement' to 'System.Xml.XmlElement'

搜索我的服務解決方案,我看不到任何參考System.Xml.Linq.XElement。我期望得到System.Xml.XmlElement還是VS 2010與我混戰?

+0

嘗試使用wcftestclient.exe調用服務。你有任何錯誤? – 2010-05-18 09:32:56

+0

@Raj:這是不可能的,因爲'wcftestclient'不支持'System.Xml.XmlElement'。但有趣的是,它沒有提及任何有關'System.Xml.Linq.XmlElement'的內容。 – Chau 2010-05-18 09:48:11

+0

看看這篇文章是否有幫助:http://social.msdn.microsoft。com/Forums/zh-CN/wcf/thread/2f29bdab-a3ab-41b9-980a-692e7bb7e133 – 2010-05-18 10:43:07

回答

-1

我不想回答我的問題,但這裏有雲:

據我所看到的,System.Xml.XmlElement可以用作返回類型爲WCF服務。 WCF默認使用的DataContractSerializersupport這種類型,因此它不應該有必要使用XmlSerializer

但是我的問題與序列化無關,但要感謝Raj Kaimal提出這種可能性。

我遵循微軟給出的WCF tutorials,它告訴你當你想使用該服務時添加WCF服務作爲服務參考。這在VS2008中似乎沒問題,但是當切換到VS2010這種方法changes the return typeSystem.Xml.XmlElement到(較新?)System.Xml.Linq.XElement。要解決此問題,您需要將該服務添加爲Web參考

+0

這不是一個準確的答案。您的服務參考是通過下載WSDL中的XML模式生成的。顯然,你的模式有幾個地方可以接受任意的XML。當客戶端使用這樣的服務時,客戶端可能會選擇類似XmlElement或XElement作爲返回類型。 – 2010-05-19 08:27:27

+0

@John:答案和我所能做到的一樣準確 - 至少在目前。我仍然處於使用WCF(和XML)的最早狀態,我的答案似乎適用於我。這是遠遠不夠的證據 - 我知道 - 任何編輯都是值得歡迎的。感謝您的關注和評論:) – Chau 2010-05-19 08:50:05

+0

這裏有一個實驗:創建一個數據合同類。給它添加一個方法。從服務操作中返回。在客戶端上使用它。查看該方法是否存在於客戶端上。除非您使用「共享類型」功能,否則該方法將不存在 - 只有WSDL可以傳遞的內容。 – 2010-05-19 12:18:40

4

1)從客戶端 2取下System.Xml.Linq的參考)更新您的服務引用 3)現在重新生成Reference.cs文件將引用的XmlElement代替的XElement

20

我發現對我來說最好,最簡單的方法是右鍵單擊服務參考,然後單擊「配置服務參考」。在底部的對話框中,您會看到2個單選按鈕,它們顯示「所有引用的程序集中的重用類型」或「指定的引用的程序集中的重用類型」。點擊'指定程序集'的第二個選項。然後列表框將被啓用,您可以檢查所有程序集並離開 System.Xml.Linq未選中。這樣,每次更新服務參考時,您都會得到預期的結果,並將其存儲在客戶端的配置中。