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

Cha*_*hau 9 c# wcf xml-serialization

我用一个方法创建了一个WCF服务,该方法返回一个System.Xml.XmlElement:

接口:

[ServiceContract]
public interface IWCFService
{
    [OperationContract]
    XmlElement Execute(...);
}
Run Code Online (Sandbox Code Playgroud)

服务:

public XmlElement Execute(...)
{
    XmlNode node = ...;

    return (XmlElement)node;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试访问我的服务器上部署的服务时

WCFServiceClient service = new WCFServiceClient("WSHttpBinding_IWCFService");
XmlElement node = service.Execute(...);
Run Code Online (Sandbox Code Playgroud)

我收到错误:

无法将类型'System.Xml.Linq.XElement'隐式转换为'System.Xml.XmlElement'

搜索我的服务解决方案,我看不到任何参考System.Xml.Linq.XElement.期待一个System.Xml.XmlElement或者是VS 2010和我一起玩是不是错了?

小智 21

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


小智 5

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


Cha*_*hau -1

我不想回答我自己的问题,但事情是这样的:

据我所知,System.Xml.XmlElementCAN 可以用作 WCF 服务的返回类型。DataContractSerializerWCF 中默认使用的确实支持类型,因此不需要使用XmlSerializer.

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

我遵循了微软提供的WCF教程,它告诉你当你想使用该服务时将WCF服务添加为服务引用。这在 VS2008 中似乎没问题,但是当切换到 VS2010 时,这种方法将返回类型System.Xml.XmlElement(较新的?)更改为System.Xml.Linq.XElement. 要解决此问题,您需要将该服务添加为Web 引用