![](/img/trans.png)
[英]Webservices : Cannot implicitly convert type 'System.Xml.Linq.XElement' to 'System.Xml.XmlElement'
[英]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.