none
проблема с ProcessBatchData () RRS feed

  • Вопрос

  • Добрый день!

    Есть ВебСервис, в рамках которого мне надо удалить все элементы из списка, а потом загрузить в список новые элементы (которые в base64 передаются в вебсервис в качестве параметра). Строю строку для метода processbatchdata на удаление и на добавление. Но вот добавление начинает выполняться раньше чем заканчивается удаление. В итоге данные, которые оказываются в списке задвоены - операция удаления выполняетс один раз, а добавления - два (сразу после запуска операции на удаление, и после её фактического завершения). Где и что я не доглядела, подскажите, пожалуйста.

    Пробовала вынести удаление в отдельный веб сервис, но результат тот же, хотя добавление начинается не сразу, а только спустя несколько минут, но удаление на этот момент всё равно ещё не закончено. В итоге обе операции (и удаление, и добавление) проходят по два раза - данные приходят корректные, но выполнение двоится.

    При тестировании элементов в списке, когда возникает такая ситуация много (может быть и около 40000). Можно ли как-то обойти такое задвоение?

    Спасибо!

    Код

    DataTable listTable = CurrentList.Items.GetDataTable();
    
    StringBuilder sbDelete = new StringBuilder();
    sbDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");
    foreach (DataRow r in listTable.Rows)
    {
    sbDelete.Append("<Method>");
      sbDelete.Append("<SetList Scope=\"Request\">" + strGuid + "</SetList>");
      sbDelete.Append("<SetVar Name=\"ID\">" + r["ID"].ToString() + "</SetVar>");
     sbDelete.Append("<SetVar Name=\"Cmd\">Delete</SetVar>");
      sbDelete.Append("</Method>");
    }
    sbDelete.Append("</Batch>");
    Microsoft.Office.Server.Diagnostics.PortalLog.LogString("CashiersFromPI - Начали удаление - {0}", DateTime.Now.ToString());
    web.ProcessBatchData(sbDelete.ToString());
    Microsoft.Office.Server.Diagnostics.PortalLog.LogString("CashiersFromPI - Закончили удаление - {0}", DateTime.Now.ToString());
    
    Microsoft.Office.Server.Diagnostics.PortalLog.LogString("CashiersFromPI - Начали добавление - {0}", DateTime.Now.ToString());
                                    web.ProcessBatchData(sbAdd.ToString());
                                    Microsoft.Office.Server.Diagnostics.PortalLog.LogString("CashiersFromPI - Закончили добавление - {0}", DateTime.Now.ToString());

    3 октября 2012 г. 7:43

Ответы

  • Так бывает, когда в процесс w3wp.exe загружена старая версия dll. Шаги отладчика начинают идти хаотично.

    Не похоже, что это Ваш случай, но при неправильном асинхронном вызове тоже могут быть такие странности.


    Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    • Помечено в качестве ответа Roman Zhukov 5 ноября 2012 г. 13:37
    4 октября 2012 г. 7:09
    Модератор

Все ответы

  • ProcessBatchData операция синхронная - следующие операции не начинают выполняться до её завершения. Судя по всему, операция выполняется дважды.

    Стоит прицепиться отладчиком и посмотреть по стэку откуда вызывается она в первом случае и во втором.


    Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    3 октября 2012 г. 10:19
    Модератор
  • очень странно. Сначала начинается удаление, потом сразу добавление, после того как завершается удаление по факту, запускается ещё раз добавление (это в случае последовательных выполнений двух processbatchdata). Веб сервис вызывается из SAP один раз. Хитрость какая-то...

    спасибо за совет!

    3 октября 2012 г. 11:37
  • Так бывает, когда в процесс w3wp.exe загружена старая версия dll. Шаги отладчика начинают идти хаотично.

    Не похоже, что это Ваш случай, но при неправильном асинхронном вызове тоже могут быть такие странности.


    Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    • Помечено в качестве ответа Roman Zhukov 5 ноября 2012 г. 13:37
    4 октября 2012 г. 7:09
    Модератор
  • т.е. может быть проблема и в вызове вебсервиса? надо посмотреть как он вызывается на стороне нашей шины...так-так-так

    ещё раз спасибо!

    4 октября 2012 г. 12:04