2011-07-11 13 views
0

WebサービスxのDeleteメソッドにアクセスするこのコードを記述しましたが、各メソッドのラッパーを作成しますが、おそらく非常に単純なものでブロッカーに当たっています。非同期Webサービスコール

私のコードでは、3つの方法で構成されています。削除呼び出しを行うために

  • 一つ、これは単に非同期メソッドにのparamsを渡します。
  • 2番目はイベントハンドラです。
  • ここで第三のプロセスデータテーブルに結果

は私の現在のコードである:

public void Delete(string[] Identifiers, string ObjectType) 
{ 
    service.deleteAsync(ObjectType, Identifiers); 
    service.deleteCompleted += new deleteCompletedEventHandler(service_deleteCompleted); 
} 

void service_deleteCompleted(object sender, deleteCompletedEventArgs e) 
{ 
    StoreResults(e.Result); 
    if (resultsTable.Rows.Count == totalRecords) 
    { 
     CSVFile myFile = new CSVFile(",", true); 
     myFile.Save(resultsTable, outputPath); 
     Console.WriteLine("Tasks completed"); 
    } 
} 

public void StoreResults(DeleteResult[] ResultSet) 
{ 
    if (resultsTable.Columns.Count < 1) 
    { 
     resultsTable.Columns.Add("ID"); 
     resultsTable.Columns.Add("Errors"); 
     resultsTable.Columns.Add("Success"); 
    } 

    foreach (DeleteResult r in ResultSet) 
    { 
     StringBuilder errors = new StringBuilder(); 
     object[] newRow = new object[3]; 

     newRow[0] = r.id; 
     if (r.errors != null) 
     { 
      newRow[1] = errors[0].ToString(); 
     } 
     else 
      newRow[1] = "No Errors to Report"; 

     newRow[2] = r.success.ToString(); 

     resultsTable.Rows.Add(newRow); 
    } 
} 

Webサービスの制限は、私はコールあたり50のIDを渡すことができるということであるので、私が持っていますソースデータのチャンクを管理するいくつかのバックグラウンドコードは、私が今達成する必要があるのは、それらの結果をすべてデータテーブルに保存して戻すことです。

答えて

2

最初購読する必要があります:

public void Delete(string[] Identifiers, string ObjectType) 
{ 
    service.deleteCompleted += service_deleteCompleted; 
    service.deleteAsync(ObjectType, Identifiers); 
} 
関連する問題