我创建了一个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和我一起玩是不是错了?
答案 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 type从System.Xml.XmlElement
到(较新的?)System.Xml.Linq.XElement
。要解决此问题,您需要将服务添加为 Web引用。