簡體   English   中英

VS2010將System.Xml.XmlElement與System.Xml.Linq.XElement混淆?

[英]VS2010 confuses System.Xml.XmlElement with System.Xml.Linq.XElement?

我用一個返回System.Xml.XmlElement方法創建了一個WCF服務:

接口:

[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(...);

我收到錯誤:

無法將類型'System.Xml.Linq.XElement'隱式轉換為'System.Xml.XmlElement'

搜索我的服務解決方案,我看不到對System.Xml.Linq.XElement任何引用。 期待System.Xml.XmlElement或VS 2010和我一起System.Xml.XmlElement我是不對的?

我發現的最好和最簡單的方法是右鍵單擊服務引用,然后單擊“配置服務引用”。 進入底部的對話框后,您將看到2個單選按鈕,表示“在所有引用的程序集中重用類型”或“在指定的引用程序集中重用類型”。 單擊“指定程序集”的第二個選項。 unchecked . 然后將啟用列表框,您可以檢查所有程序集並取消選中 這樣,每次更新服務引用時,您都將獲得預期的結果,並將其存儲在客戶端的配置中。

1)從客戶端刪除system.xml.linq引用2)更新服務引用3)重新生成的Reference.cs文件現在將引用XmlElement而不是XElement

我討厭回答我自己的問題,但在這里:

據我所知, System.Xml.XmlElement可以用作WCF服務的返回類型。 默認情況下在WCF中使用的DataContractSerializer確實支持此類型,因此不必使用XmlSerializer

然而,我的問題與序列化無關,但感謝Raj Kaimal建議這種可能性。

我按照Microsoft提供的WCF教程 ,告訴您在要使用該服務時將WCF服務添加為服務引用 這似乎在VS2008中沒問題,但是當切換到VS2010時,這種方法將返回類型System.Xml.XmlElement更改為(較新的?) System.Xml.Linq.XElement 要解決此問題,您需要將服務添加為Web引用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM