异步Web服务调用

时间:2011-07-11 13:29:39

标签: c# .net web-services

我已经编写了这个访问Web Service x上的Delete方法的代码,我将为每个方法创建包装器,但是我可能会非常简单地使用阻塞器。

我的代码包含三种方法:

  • 一个进行删除调用,只需将params传递给Async方法。
  • 第二个是事件处理程序。
  • 第三个将结果处理成数据表

这是我目前的代码:

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,因此我有一些后台代码来管理源数据的分块,我现在需要实现的是将所有这些结果存储在数据表中把它传回去。

1 个答案:

答案 0 :(得分:2)

您必须先订阅:

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