我创建了自己的网络服务。 我添加了服务参考。但是在store_getProducts中,XDocument xReturn = XDocument.Load(e.Result)发生错误; 它说字符串不被认为是有效的uri。参数名称inputuri。 有人能告诉我这是什么问题
SvcRefstore.ServiceSoapClient storeclient = new SvcRefstore.ServiceSoapClient();
storeclient.getProductsAllCompleted += new EventHandler<SvcRefstore.getProductsAllCompletedEventArgs>(store_getProducts);
storeclient.getProductsAllAsync();
storeclient.setItemsarrayAsync(itemarray);
store_getProducts
void store_getProducts(object sender, SvcRefstore.getProductsAllCompletedEventArgs e)
{
XDocument xReturn = XDocument.Load(e.Result);
IEnumerable<Products> myQuote = from item in xReturn.Descendants("Products")
select new Products
{
Name = Convert.ToString(item.Element("Name").Value),
unitPrice = Convert.ToString(item.Element("unitPrice").Value),
};
Products thisQuote = myQuote.ElementAt(0);
textBlock1.Text = thisQuote.Name.ToString();
}
下面的是我创建的使用
的getProducts方法 public string getProductsAll()
{
storeDBCon dbConn;
dbConn = new storeDBCon();
DataSet idataset = new DataSet();
string products = "";
SqlConnection db = dbConn.GetConnection();
SqlCommand cmd;
string sqlRetrieve = "SELECT * FROM Product WHERE Name = @Name";
db.Open();
try
{
for (int i = 0; i < itemsarray.Length; i ++ )
// foreach (String item in itemsarray)
{
cmd = new SqlCommand(sqlRetrieve, db);
cmd.Parameters.AddWithValue("@Name", itemsarray[i]);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows == true)
{
reader.Read();
//_userId = reader.GetInt32(0);
productID = reader.GetInt32(0);
pname = reader.GetString(1);
pDesc = reader.GetString(2);
unitPrice = reader.GetString(3);
imagefilename = reader.GetString(4);
products = productID + "," +pname + "," + pDesc + "," + unitPrice + "," + imagefilename + "";
}
else
products = "Null";
}
}
catch (Exception ex)
{
errMsg = ex.Message;
}
finally
{
db.Close();
}
return products;
}
下面是setItemsarray方法
public void setItemsarray(string[] _str)
{
itemsarray = _str;
}
答案 0 :(得分:1)
这里有几个问题,首先,如果你想将字符串加载到XDocument中,你需要调用XDocument doc = XDocument.Parse(string)
而不是XDocument.Load()
。
其次,您的getProductsAll()
Web服务方法只是构建逗号分隔的字符串。是什么让您认为可以将其加载到XML文档中?您需要从getProductsAll()
答案 1 :(得分:0)
正如我在previous answer中所解释的那样,当您指定加载内容的网址时使用XDocument.Load
,并使用XDocument.Parse
加载字符串中的xml内容。
在您的情况下,您必须重写这样的代码:
void store_getProducts(object sender, SvcRefstore.getProductsAllCompletedEventArgs e)
{
XDocument xReturn = XDocument.Parse(e.Result); // Change is here
IEnumerable<Products> myQuote = from item in xReturn.Descendants("Products")
select new Products
{
Name = Convert.ToString(item.Element("Name").Value),
unitPrice = Convert.ToString(item.Element("unitPrice").Value),
};
Products thisQuote = myQuote.ElementAt(0);
textBlock1.Text = thisQuote.Name.ToString();
}
[edit]:经过挖掘,我可以看到你的服务器代码没有返回XML,而是一个简单的字符串串联值......稍后你会有其他错误。