2010-09-18 106 views
2

我從WCf方法返回一個xmlElement。 當我在客戶端做服務引用時,同樣的方法是返回XElement而不是XmlElement。 我嘗試了一切:更新服務參考,製作新的服務參考,但它沒有幫助。當WCF方法返回XmlElement時,客戶端看到XElement返回?

這是我的客戶:

ServiceReference1.BasicServiceClient basicWCfClient = new ServiceReference1.BasicServiceClient(); 
     XmlElement xmlelement = basicWCfClient.GetData(5); 
     basicWCfClient.Close(); 

我得到一個錯誤: 「無法隱式轉換類型 'System.Xml.Linq.XElement' 到 'System.Xml.XmlElement'」

時在服務器端的方法,包括:

public XmlElement GetData(int value) 
    { 
     XmlDocument xmldoc = new XmlDocument(); 
     xmldoc.LoadXml("<msg><node1>Hello</node1><node2>World</node2><request_params><mynode>More</mynode></request_params></msg>"); 
     XmlElement xmlElement = xmldoc.DocumentElement; 
     return xmlElement; 
    } 

和接口:

[ServiceContract] 
public interface IBasicService 
{ 

    [OperationContract]  
    [WebGet(UriTemplate = "GetData?value={value}")] // Add support for HTTP GET Requests 
    XmlElement GetData(int value);} 

是怎麼回事?

回答

1

沒有什麼不妥。客戶端不知道使用了哪種.NET類型,服務引用僅通知它可以返回任何XML。它需要XML並將其作爲XElement提供。這是建立在行爲,我認爲它是由MS選擇,因爲更新,更舒適的API。爲什麼你需要這個方法來返回XmlElement?

+0

我的測試客戶端在Framework 3.5,但其他公司確實編譯(真正的客戶端)不會有Framework 3.5,它與框架2.0一起工作,並且它不會識別XElement,因爲XElement是Framework 3.5。但是第二個想法是,當真正的客戶端(使用框架2.0環境)創建服務引用時,我的WCF服務會返回XmlElement嗎?它不會返回Xelement嗎? – Rodniko 2010-09-18 12:54:53

+0

只是在框架2.0中嘗試了與VS2005相同的參考,它確實返回Xmlelement。框架環境是問題,謝謝! – Rodniko 2010-09-18 13:00:01

+0

首先,當您使用.NET 2.0中的服務時,您將無法使用添加服務引用,因爲.NET 2.0不支持WCF。你將不得不使用添加web引用,它將只使用.NET 2.0類型。 – 2010-09-18 13:00:16

12

轉到Configure Service Reference和檢查Reuse types in referenced assemblies

然後檢查System.Xml如果你想XmlElementSystem.Xml.Linq如果你想XElement

又見this question

+0

不適用於我。我試圖刪除服務引用並重新創建。我也嘗試刪除System.Xml引用,只留下System.Xml.Linq。但是,它仍然使用XmlNode。 – 2014-06-18 19:33:30

+0

您是否取消選中了system.xml框,或者您是否從項目中刪除了引用? – 2014-06-18 19:34:57

+0

試過雙方。我假設WCF嘗試使用XElement而不是所有服務。一個服務具有soap,soap12和http綁定 - 使用System.Xml。另一個有soap和soap12 - System.Xml.Linq。 – 2014-06-18 19:44:49

相關問題