6

Windows フォームから Web サービスにデータを の形式で送信していますArrayList。私のメソッドのWebサービス宣言では、次のようになります。

[WebMethod]
public int SaveSelectedOffers(ArrayList offers, int selectedRows)
{

}

Windowsフォームでは、ボタンをクリックすると、私のコードは次のとおりです。

private void offersAvailableSubmit_Click(object sender, EventArgs e)
{
    ArrayList options;
    options.Add("item 1");
    options.Add("item 2");
    options.Add("item 2");
    //In this line of code it is showing error that Argument 1: cannot convert from 'System.Collections.ArrayList' to 'object[]'
    int rowsAffected = serviceCaller.SaveSelectedOffers(options, rowCount); 
}
  1. オプションのデータ型はArrayList、Web サービスでもArrayList変数の型を使用してこの値を保持していますが、なぜこのエラーが発生するのですか?

  2. パラメータをWebサービスに送信するのは適切な方法ですか、それとも別の方法がありますか?

4

4 に答える 4

8

Web サービスは のような複雑な型を渡すことができないArrayListか、少なくとも何らかの構成がなければ渡すことができないため、Web サービスを単純​​化してください。これを次のように変更します。

public int SaveSelectedOffers(object[] offers, int selectedRows)

ご覧のとおり、とにかく生成されている方法であり、次のように呼び出します。

private void offersAvailableSubmit_Click(object sender, EventArgs e)
{
    object[] options = new object[3];
    options[0] = "item 1";
    options[1] = "item 2";
    options[2] = "item 2";

    int rowsAffected = serviceCaller.SaveSelectedOffers(options, rowCount); 
}

の初期化の別のオプションは、optionsより簡潔なものを探している場合、次のようになります。

object[] options = new object[] { "item 1", "item 2", "item 3" };
于 2013-03-18T11:58:46.917 に答える
4

使用することをお勧めします

[WebMethod]
public int SaveSelectedOffers(IList<string> offers, int selectedRows)
{

}

private void offersAvailableSubmit_Click(object sender, EventArgs e)
{
    IList<string> options = new List<string>();
    options.Add("item 1");
    options.Add("item 2");
    options.Add("item 2");

    int rowsAffected = serviceCaller.SaveSelectedOffers(options, rowCount); 
}

編集#1

マイケルはよく言った:

Webサービスは、ArrayListのような複雑な型を渡すことはできません。少なくとも、何らかの構成がないと、Webサービスを単純​​化することはできません。-マイケル

編集#2

Webサービスを使用するにはSystem.Collections.Generic.List

  1. サービスリファレンスでサービスを右クリックします
  2. サービスリファレンスの構成
  3. データ型グループ内
  4. コレクションタイプをSystem.Collections.Generic.Listに変更します
于 2013-03-18T12:01:06.757 に答える
2

コードをナンセンスに変更することはすべて忘れてください。

「Service References」フォルダでサービスを右クリックし、コンテキスト メニューから「Configure Service Reference」を選択すると、クライアントがコレクションに使用するタイプを指定できます。

あなたの場合、System.Collections.ArrayList「コレクションタイプ」ドロップダウンから選択するだけです。

System.Collections.Generic.Listただし、厳密に型指定されたジェネリック リストを指定して使用することはできます。

于 2013-03-18T12:12:06.593 に答える
0

Web メソッド定義で型指定されたリストまたは配列を使用します。混乱はありえません。arraylist は厳密に型指定されていません。つまり、内容は実行時までわかりません。

[WebMethod]
public int SaveSelectedOffers(string[] offers, int selectedRows)
{

}
于 2013-03-18T11:58:32.860 に答える