Dynamics 365 CE (локальная версия 9.1.15.32) Проблема асинхронной службы при массовом выполнении рабочего процесса

у нас уже давно есть проблема: как только мы запускаем массовый рабочий процесс, мы получаем следующую ошибку:

Тип исключения: Microsoft.Crm.CrmException Сообщение: ValidateClosed - Db GetCreateConnection() должна быть закрыта в конце Microsoft.Crm.Workflow.Services.UpdateActivityService.Execute(ActivityContext ExecutionContext, UpdateEntity updateEntity) в System.Activities.CodeActivity.InternalExecute(ActivityInstance) экземпляр, исполнитель ActivityExecutor, BookmarkManager bookmarkManager)bei System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(исполнитель ActiveExecutor, BookmarkManager bookmarkManager, Location resultLocation)-- Конечная трассировка стека --

Иногда также:

Операция или свойство SqlTransaction недействительны в контексте без вызова первой строки OnBeginRequest: 0.

И

InvalidOperationException Соединение не было закрыто. Текущее состояние соединения открыто

Это происходит для каждой имеющейся у нас сущности, но только если вы запускаете рабочий процесс для нескольких записей одновременно.

Если я делаю это шаг за шагом, это работает каждый раз.

Потратив некоторое время на поиск этой проблемы в Интернете, я обнаружил, что эта проблема возникает, если вы используете глобальные переменные внутри плагинов.

Но странная проблема в том, что мы этого не делаем.

Вот пример плагина Post для сущности аккаунта:

      
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System;
using System.Globalization;
using CrmSvcUtil;
using System.Diagnostics;

namespace PostAccountUpdate
{
/// <inheritdoc />
/// <summary>
/// Base class for all plug-in classes.
/// </summary>
public class PostAccountUpdate : IPlugin
{
/// <summary>
/// Plug-in context object.
/// </summary>
protected class LocalPluginContext
{
/// <summary>
/// Helper object that stores the services available in this plug-in.
/// </summary>
/// <param name="serviceProvider"></param>
internal LocalPluginContext(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
{
throw new ArgumentNullException(nameof(serviceProvider));
}
}

/// <summary>
/// Writes a trace message to the CRM trace log.
/// </summary>
/// <param name="message">Message name to trace.</param>
internal void Trace(string message, ITracingService TracingService, IPluginExecutionContext PluginExecutionContext)
{
if (string.IsNullOrWhiteSpace(message) || TracingService == null)
{
return;
}

if (PluginExecutionContext == null)
{
TracingService.Trace(message);
}
else
{
TracingService.Trace(
"{0}, Correlation Id: {1}, Initiating User: {2}",
message,
PluginExecutionContext.CorrelationId,
PluginExecutionContext.InitiatingUserId);
}
}
}

/// <inheritdoc />
/// <summary>
/// Main entry point for he business logic that the plug-in is to execute.
/// </summary>
/// <param name="serviceProvider">The service provider.</param>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "CrmVSSolution411.NewProj.PluginBase+LocalPluginContext.Trace(System.String)", Justification = "Execute")]
public void Execute(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
{
throw new ArgumentNullException(nameof(serviceProvider));
}

// Construct the local plug-in context.
LocalPluginContext localcontext = new LocalPluginContext(serviceProvider);
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
string relationshipName = String.Empty;

IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

ITracingService trace = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
Log.CRMService = service;

try
{

........

Есть ли у кого-нибудь идеи, как это исправить?

Спасибо за помощь

0 ответов

Другие вопросы по тегам