elsa-core icon indicating copy to clipboard operation
elsa-core copied to clipboard

Cannot resolve scoped service 'Elsa.Workflows.Runtime.Services.BackgroundTaskDispatcher' from root provider

Open ManojTiwari-NGI opened this issue 1 year ago • 8 comments

Hi, I worked on some of the sample applications provided in ELSA guides. One of them is https://v3.elsaworkflows.io/docs/guides/external-app-integration.

This application ran very well as per documentation. However, when I took the source code (elsa-core) and built the solution. I chose "Elsa.Server.Web" as a startup project. I made the necessary changes in

"Program.cs" and // Configure ASP.NET authentication/authorization. // Default Identity features for authentication/authorization. // Use email activities.

"app_settings.json" e.g. "Webhooks" and "AllowedHosts" entries, as specified in the guide.

My development environment is on Windows 10.

I am getting the following error. What could be the reason? I would appreciate your help in this regard.

warn: Elsa.Workflows.Middleware.Activities.ExceptionHandlingMiddleware[0] An exception was caught from a downstream middleware component System.InvalidOperationException: Cannot resolve scoped service 'Elsa.Workflows.Runtime.Services.BackgroundTaskDispatcher' from root provider. at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Elsa.Workflows.Runtime.Features.WorkflowRuntimeFeature.<>c.<.ctor>b__0_9(IServiceProvider sp) in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Runtime\Features\WorkflowRuntimeFeature.cs:line 89 at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(ServiceIdentifier serviceIdentifier) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Elsa.Workflows.WorkflowExecutionContext.GetRequiredServiceT in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Core\Contexts\WorkflowExecutionContext.cs:line 400 at Elsa.Workflows.ActivityExecutionContext.GetRequiredServiceT in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Core\Contexts\ActivityExecutionContext.cs:line 489 at Elsa.Workflows.Runtime.Activities.RunTask.ExecuteAsync(ActivityExecutionContext context) in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Runtime\Activities\RunTask.cs:line 98 at Elsa.Workflows.Activity.Elsa.Workflows.Contracts.IActivity.ExecuteAsync(ActivityExecutionContext context) in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Core\Abstractions\Activity.cs:line 218 at Elsa.Workflows.Middleware.Activities.DefaultActivityInvokerMiddleware.ExecuteActivityAsync(ActivityExecutionContext context) in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Core\Middleware\Activities\DefaultActivityInvokerMiddleware.cs:line 103 at Elsa.Workflows.Runtime.Middleware.Activities.BackgroundActivityInvokerMiddleware.ExecuteActivityAsync(ActivityExecutionContext context) in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Runtime\Middleware\Activities\BackgroundActivityInvokerMiddleware.cs:line 42 at Elsa.Workflows.Middleware.Activities.DefaultActivityInvokerMiddleware.InvokeAsync(ActivityExecutionContext context) in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Core\Middleware\Activities\DefaultActivityInvokerMiddleware.cs:line 64 at Elsa.Workflows.Middleware.Activities.NotificationPublishingMiddleware.InvokeAsync(ActivityExecutionContext context) in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Core\Middleware\Activities\NotificationPublishingMiddleware.cs:line 29 at Elsa.Workflows.Middleware.Activities.ExecutionLogMiddleware.InvokeAsync(ActivityExecutionContext context) in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Core\Middleware\Activities\ExecutionLogMiddleware.cs:line 41 at Elsa.Workflows.Middleware.Activities.ExceptionHandlingMiddleware.InvokeAsync(ActivityExecutionContext context) in D:\ELSA3.0\els-core-github\src\modules\Elsa.Workflows.Core\Middleware\Activities\ExceptionHandlingMiddleware.cs:line 47

ManojTiwari-NGI avatar Feb 08 '24 13:02 ManojTiwari-NGI

The error you're encountering, System.InvalidOperationException: Cannot resolve scoped service 'Elsa.Workflows.Runtime.Services.BackgroundTaskDispatcher' from root provider, suggests that there is an issue with the service registration or the way the service is being resolved within the application's scope.

This type of error typically occurs when a scoped service (like BackgroundTaskDispatcher) is being requested in a context that is not scoped, such as directly from the root service provider or within a singleton's constructor.

Given that you've followed the guide on external application integration and made changes to the Program.cs and appsettings.json, it's possible that the issue is related to the way the services are configured in the Program.cs file. The error might be due to a recent change in the Elsa codebase or a misconfiguration in your setup.

To troubleshoot this issue, you should:

  1. Ensure that you are using the correct versions of the Elsa packages that are compatible with each other.
  2. Review the Program.cs file to make sure that all services are registered correctly, particularly the BackgroundTaskDispatcher.
  3. Check if there are any recent changes or issues reported in the Elsa GitHub repository that might be related to this error.
  4. Make sure that the BackgroundTaskDispatcher is being resolved in a scoped context (e.g., within a request).

If you are unable to resolve the issue, you might want to create an issue in the Elsa GitHub repository or check if there are any existing issues that describe the same problem.

Since the error message includes file paths that seem to be from a local development environment (e.g., D:\ELSA3.0\els-core-github\...), it's also possible that the issue is specific to your local setup or changes you've made. Double-check any customizations you've applied to ensure they align with the expected configuration for Elsa services.

Lastly, the provided error message and stack trace should be carefully reviewed to pinpoint where the service resolution is failing and under what circumstances.

If you can provide more details about the changes you made to the Program.cs file or any other customizations, I might be able to offer more specific advice.

glime-ai[bot] avatar Feb 08 '24 13:02 glime-ai[bot]

Thank you so much for your reponse. As requested please have a look at the following files:

appsettings.json I added the following entry into appsettings.json image

Please see "Program.cs" attached here as "Program.txt" Program.txt .

ManojTiwari-NGI avatar Feb 08 '24 14:02 ManojTiwari-NGI

When I debugged, I found that CorrelationId is null. What should I do to fix the issue? In \Elsa.Workflows.Api\Endpoints\WorkflowDefinitions\Execute\Endpoint.cs image

ManojTiwari-NGI avatar Feb 09 '24 16:02 ManojTiwari-NGI

I am facing the same issue, did you find the workaround or solution?

AngrySKL avatar Feb 25 '24 09:02 AngrySKL

I am facing the same issue, did you find the workaround or solution?

I was trying the Elsa.Samples.AspNet.RunTaskIntegration sample btw.

AngrySKL avatar Feb 25 '24 09:02 AngrySKL

I am facing the same issue, did you find the workaround or solution?

No. I am still trying to find a solution.

ManojTiwari-NGI avatar Feb 26 '24 07:02 ManojTiwari-NGI

Hello. At the moment I found this workaround: in my project, I linked source code of Elsa.Workflows.Runtime rather than the nuget package... Then in the method Apply of the class Elsa.Workflows.Runtime.Features.WorkflowRuntimeFeature, I added the row: .AddSingleton<BackgroundTaskDispatcher>()

under

.AddScoped<BackgroundTaskDispatcher>()

In that way, Dependency Injection is able to find BackgroundTaskDispatcher when it needed in a Singleton scope.

enycaltran avatar Feb 26 '24 08:02 enycaltran

Hello. At the moment I found this workaround: in my project, I linked source code of Elsa.Workflows.Runtime rather than the nuget package... Then in the method Apply of the class Elsa.Workflows.Runtime.Features.WorkflowRuntimeFeature, I added the row: .AddSingleton()

under

.AddScoped()

In that way, Dependency Injection is able to find BackgroundTaskDispatcher when it needed in a Singleton scope.

hi I also encountered a problem and it was solved with the same solution. Will this be solved in the next releases?

zesmaili avatar Mar 04 '24 06:03 zesmaili