2013-01-10 30 views
0

我已經創建了自己的Web服務來使用它。 我添加了服務參考。但是,在store_getProducts中,XDocument xReturn = XDocument.Load(e.Result)時發生錯誤;它說這個字符串不被認爲是一個有效的URI。參數名稱inputuri。 誰能告訴我是什麼問題爲Windows Phone使用自己的webservice

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; 
    } 
+1

「inputuri」的價值是什麼? –

+0

您打電話給'store_getProducts'的地方?這是什麼樣子? – ethorn10

回答

0

正如我在previous answer中所解釋的那樣,當您指定加載內容的URL並在XDocument.Parse中加載字符串中的xml內容時,請使用XDocument.Load

你的情況,你必須改寫這樣的代碼:

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(); 
} 

[編輯]:挖了一下後,我可以看到你的服務器代碼不會返回XML,但一個簡單的字符串連接的價值觀......你以後會有其他錯誤。

+0

我從分析到加載,以便看到我得到的錯誤。 那麼,爲了使用webservice方法我應該返回什麼? – FredHomme

+0

或者我應該怎麼做才能使用webservice方法? – FredHomme

+0

我認爲最簡單的方法是創建一個自定義的可序列化類,它將保存結果,並在webmethod上返回這種對象。 –

1

這裏有幾個錯誤,首先,如果要將字符串加載到XDocument中,則需要調用XDocument doc = XDocument.Parse(string)而不是XDocument.Load()

其次,您的getProductsAll() Web服務方法只是建立一個以逗號分隔的字符串。是什麼讓你認爲你可以加載到XML文檔?你需要返回一個有效的XML文檔getProductsAll()

相關問題