Асинхронные вызовы веб-службы в C # - испорченные результаты - PullRequest
1 голос
/ 13 июля 2011

Я вызываю веб-службу асинхронно , , отправляю несколько запросов и жду ответа от платформы.

Я обнаружил проблему, но не вижу логическая ошибка , которая его вызывает, я очень плохо знаком с асинхронными вызовами, поэтому, пожалуйста, извините за плохое кодирование!

Проблема в том, что набор результатов, который я получаю, содержит те же 50 записей для каждой создаваемой партии в замешательстве !

Любая помощь будет принята с благодарностью, и будут поданы голоса, это срочно!

Код, который я написал ниже:

    public DataTable Delete(DataTable Data, string ObjectType)
    {
        rowCount = Data.Rows.Count;
        List<string[]> Batches = new List<string[]>();
        int time = 0;

        Batches = BatchBuilder(Data);

        results.Columns.Add("ID");
        results.Columns.Add("Success");
        results.Columns.Add("Errors");

        foreach (string[] batch in Batches)
        {
            string guid = Guid.NewGuid().ToString();
            guids.Add(guid);
            service.deleteCompleted += new deleteCompletedEventHandler(service_deleteCompleted);
            service.deleteAsync("Account", batch, guid);
        }

        while (processedCount != Batches.Count)
        {
            if (time == int.MaxValue - 1)
            {
                time = 0;
            }
            time++;
        }

        return results;
    }

    void service_deleteCompleted(object sender, deleteCompletedEventArgs e)
    {
        foreach (DeleteResult deleteResult in e.Result)
        {
            object[] resultRow = new object[3];
            if (deleteResult.id != null)
                resultRow[0] = deleteResult.id;

            resultRow[1] = deleteResult.success;

            if (deleteResult.errors != null)
                resultRow[2] = deleteResult.errors[0].Message;

            results.Rows.Add(resultRow);
        }
        processedCount++;
    }

    public List<string[]> BatchBuilder(DataTable table)
    {
        List<string[]> Batches = new List<string[]>();

        while (!batchingDone)
        {
            string[] IDs = new string[50];
            int arrayCrawler = 0;

            for (int v = 0; v < 50; v++)
            {
                IDs[arrayCrawler] = table.Rows[tableCrawler].ItemArray[0].ToString();

                arrayCrawler++;
                tableCrawler++;

                if (tableCrawler == table.Rows.Count)
                {
                    batchingDone = true;
                    break;
                }
                if (arrayCrawler == 50)
                {
                    arrayCrawler = 0;
                    break;
                }
            }

            Batches.Add(IDs);
        }

        return Batches;
    }

1 Ответ

4 голосов
/ 13 июля 2011

Я подозреваю, что ваша проблема связана с вашей глобальной переменной service, которая используется повторно для каждого вызова.Каждый раз создавать новый экземпляр службы.

...