为Windows Phone消费自己的网络服务

时间:2013-01-10 15:57:53

标签: c# web-services windows-phone-7

我创建了自己的网络服务。 我添加了服务参考。但是在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;
    }

2 个答案:

答案 0 :(得分:1)

这里有几个问题,首先,如果你想将字符串加载到XDocument中,你需要调用XDocument doc = XDocument.Parse(string)而不是XDocument.Load()

其次,您的getProductsAll() Web服务方法只是构建逗号分隔的字符串。是什么让您认为可以将其加载到XML文档中?您需要从getProductsAll()

返回有效的XML文档

答案 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,而是一个简单的字符串串联值......稍后你会有其他错误。