异步Web服务调用

本文关键字:调用 服务 Web 异步 | 更新日期: 2023-09-27 18:01:49

我已经写了这段代码,它访问了Web Service x上的Delete方法,我将为每个方法创建包装器,但是我在一些可能非常简单的事情上遇到了阻塞。

我的代码包含三个方法:

  • 一个是delete调用,这只是将参数传递给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);
    }
}

webservice的一个限制是我每次调用只能传递50个ID,所以我有一些后台代码来管理源数据的分块,我现在需要实现的是将所有这些结果存储在数据表中并将其传递回来。

异步Web服务调用

你必须先订阅:

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