VS2010将System.Xml.XmlElement与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个单选按钮,表示“在所有引用的程序集中重用类型”或“在指定的引用程序集中重用类型”。 单击“指定程序集”的第二个选项。 然后将启用列表框,您可以检查所有程序集并取消选中 System.Xml.Linq 。 这样,每次更新服务引用时,您都将获得预期的结果,并将其存储在客户端的配置中。

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引用