Пакет веб-API Dynamics CRM

Все,

У меня есть программа C#, которая может отправлять данные в систему CRM (используя веб-API через запросы HTTP Post). Однако количество запросов, которые я должен выполнять, составляет порядка 10000 ежедневно, что, как и ожидалось, занимает огромное количество времени. Я искал «массовую» функциональность, с помощью которой я мог бы отправлять большой объем данных сразу (скажем, 10000 объектов задач одновременно). По той или иной причине я не могу найти реализацию такой функциональности, самое близкое, что я нашел, это "пакетные запросы", хотя в приведенном примере это выглядит как несколько запросов, заключенных в один http-запрос на отправку, что, я не совсем уверен, было бы лучшим решением для создания 10000 запросов на отправку, заключенных в один такой, если только это не единственный способ сделать это

Итак, есть ли массовая функциональность или пакетные запросы лучше, с чем мне приходится иметь дело?


person Slavi    schedule 19.04.2016    source источник


Ответы (1)


Вы правы, пакетная обработка вам не сильно поможет, так как все ваши запросы все равно будут обрабатываться последовательно. Для такого объема данных вам необходимо реализовать параллелизм/параллелизм/многопоточность. Парень по интеграции в моем проекте смог достичь в среднем около 100 операций в секунду, используя то, что по сути является шаблоном производитель/потребитель. Он использует авторастущий пул соединений CRM и как только один запрос завершает обработку, соединение возвращается в пул.

Команда Microsoft Premier Field Engineering публикует базовую библиотеку PFE для Dynamics CRM на CodePlex. В библиотеке есть класс ParallelOrganizationServiceProxy, который должен выполнять большую часть сложной параллельной работы для ты. Вот пример:

public void ParallelUpdate(List<Entity> targets)
{
    try
    {
        this.Manager.ParallelProxy.Update(targets);
    }
    catch (AggregateException ae)
    {
        // Handle exceptions
    }
}
person Polshgiant    schedule 19.04.2016
comment
Привет Polsh, Спасибо за ответ! Хм... можно было бы ожидать, что Microsoft выпустит массовую функциональность для REST API, не так ли? До сих пор я пытался избегать старых или сторонних библиотек, но я думаю, что задача невыполнима без них, хотя, как кажется, многопоточность, вероятно, лучший выбор... Как насчет этого тогда , вы знакомы? msdn.microsoft.com/en-us/library/jj863631.aspx - person Slavi; 19.04.2016
comment
ExecuteMultiple — это эквивалент пакетной обработки в WebAPI. У него также есть еще один серьезный недостаток: платформа будет обрабатывать только два запроса ExecuteMultiple в любой момент времени. :/ - person Polshgiant; 19.04.2016
comment
Кстати, разве пакетный запрос не отправляет все сразу, а затем отдельные запросы выполняются на стороне crm, что снижает задержку отдельных подключений? Иначе я не вижу в этом смысла? - person Slavi; 19.04.2016
comment
Ты понял. Это наиболее полезно в средах с высокой задержкой, где сеть является самым большим узким местом. - person Polshgiant; 19.04.2016
comment
Я вижу, спасибо! :) Так что просто запишите очевидное .. пакетный запрос ускорит процесс, просто он не будет одновременным, как с массовым функционалом? - person Slavi; 19.04.2016