【发布时间】:2014-04-11 12:49:56
【问题描述】:
我有一个场景,我创建了一个 Web 服务,它返回通过客户端(Web 服务使用者)传递的用户名的名字和姓氏。
但我在第 5 行出现错误:无法将类型“System.Xml.Linq.XElement”隐式转换为“System.Xml.XmlElement”
以下是用于检索数据的代码
protected void BindUserDetails(string userName)
{
UserService.ServiceSoapClient client = new UserService.ServiceSoapClient();
DataSet dsresult = new DataSet();
XmlElement exelement = client.GetUserDetails(userName);
if (exelement != null)
{
XmlNodeReader nodereader = new XmlNodeReader(exelement);
dsresult.ReadXml(nodereader, XmlReadMode.Auto);
gvUserDetails.DataSource = dsresult;
gvUserDetails.DataBind();
}
else
{
gvUserDetails.DataSource = null;
gvUserDetails.DataBind();
}
}
UserService 是我添加的服务参考。 gvUserDetails 是网格视图
[WebMethod]
public XmlElement GetUserDetails(string username) {
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["TestingCS"].ConnectionString);
cn.Open();
SqlCommand cmd = new SqlCommand("select * from userInfo where username=@username", cn);
cmd.Parameters.AddWithValue("@username", username);
cmd.ExecuteNonQuery();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
cn.Close();
XmlDataDocument xmldata = new XmlDataDocument(ds);
XmlElement xmlElement = xmldata.DocumentElement;
return xmlElement;
}
谢谢
【问题讨论】:
-
嗯,大概
GetUserDetails返回一个XElement,所以请改用LINQ to XML。就个人而言,我更喜欢使用旧的 DOM API :) -
代理代码是什么样的?如果client-side
GetUserDetails方法返回XmlElement,那么你原来的编译错误就没有意义了。 -
(另外,您应该在您的网络方法中使用
using语句...) -
这是我使用的唯一代码.. 我的 prog 中没有任何额外的代码
-
好吧,您已经为服务生成了代理代码。这就是为什么我问如果您将鼠标悬停在客户端代码中的方法名称上会显示什么返回类型。 会显示什么?
标签: c# asp.net web-services asmx