VS2010将System.Xml.XmlElement与System.Xml.Linq.XElement混淆?

时间:2010-05-18 08:26:40

标签: c# wcf xml-serialization

我创建了一个WCF服务,其中一个方法返回System.Xml.XmlElement

接口

[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和我一起玩是不是错了?

3 个答案:

答案 0 :(得分:21)

我发现的最好和最简单的方法是右键单击服务引用,然后单击“配置服务引用”。进入底部的对话框后,您将看到2个单选按钮,表示“在所有引用的程序集中重用类型”或“在指定的引用的程序集中重用类型”。单击“指定程序集”的第二个选项。然后将启用列表框,您可以检查所有程序集并保留 System.Xml.Linq 未选中。这样,每次更新服务引用时,您都将获得预期的结果,并将其存储在客户端的配置中。

答案 1 :(得分:5)

1)从客户端删除system.xml.linq引用 2)更新您的服务参考 3)重新生成的Reference.cs文件现在将引用XmlElement而不是XElement

答案 2 :(得分:-1)

我讨厌回答我自己的问题,但是在这里:

据我所知,System.Xml.XmlElement可以用作WCF服务的返回类型。 WCF默认使用的DataContractSerializer执行support此类型,因此不必使用XmlSerializer

然而,我的问题与序列化无关,但感谢 Raj Kaimal 提出这种可能性。

我按照Microsoft提供的WCF tutorials,告诉您在要使用该服务时将WCF服务添加为服务参考。这似乎在VS2008中没问题,但是当切换到VS2010时,这种方法changes the return typeSystem.Xml.XmlElement到(较新的?)System.Xml.Linq.XElement。要解决此问题,您需要将服务添加为 Web引用