0

使用する独自のWebサービスを作成しました。サービスリファレンスを追加しました。ただし、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;
    }
4

2 に答える 2

1

ここで間違っていることがいくつかあります。まず、文字列をXDocumentにロードする場合は、XDocument doc = XDocument.Parse(string)notを呼び出す必要がありますXDocument.Load()

第二に、getProductsAll()Webサービスメソッドはコンマ区切りの文字列を作成するだけです。これをXMLドキュメントにロードできると思う理由は何ですか?から有効なXMLドキュメントを返す必要がありますgetProductsAll()

于 2013-01-10T16:05:32.307 に答える
0

以前の回答で説明したように、コンテンツをロードするURLと文字列のxmlコンテンツをXDocument.LoadロードするURLを指定するときに使用します。XDocument.Parse

あなたの場合、あなたはこのようにコードを書き直す必要があります:

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を返さないことがわかりますが、値の単純な文字列連結です...後で他のエラーが発生します。

于 2013-01-10T16:05:07.807 に答える