Open MusabBasheer opened 1 year ago
System.UnauthorizedAccessException: Access to the path 'C:\Windows\TEMP\ContinueRunningWorkflows5KC7QDLK4FML23TKRG7J52LIOPKUVFGU.lock' is denied.
By default, Elsa uses the DistributedLock package to acquire distributed locks. It is configured to use a temp file by default, which apparently is failing due to an authorization exception.
Unless this is a transient issue, you’ll have to give your app permissions to access the temp directory, or configure the distributed lock to use a different directory. Alternatively, you could configure it to use SQL Server, Redis, or any other provider it supports. This is especially recommended to do when hosting in a multi node cluster (not sure of this is the case for you).
It was working properly without any issue and yes, we use it inside multi VMs but this issue is raised suddenly without any change in our implementation.
First Log:
Application '/LM/W3SVC/1/ROOT/********' with physical root 'C:\inetpub\wwwroot\********\' hit unexpected managed exception, exception code = '0xe0434352'. First 30KB characters of captured stdout and stderr logs: warn: Microsoft.AspNetCore.DataProtection.Repositories.EphemeralXmlRepository[50] Using an in-memory repository. Keys will not be persisted to storage. warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[59] Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits. info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[58] Creating key {d557c887-16b4-43ae-acf0-7d0b8e5b7d57} with creation date 2023-09-19 10:21:41Z, activation date 2023-09-19 10:21:41Z, and expiration date 2023-12-18 10:21:41Z. warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35] No XML encryptor configured. Key {d557c887-16b4-43ae-acf0-7d0b8e5b7d57} may be persisted to storage in unencrypted form. info: Elsa.Runtime.StartupRunner[0] Running startup task RunMigrations info: Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 6.0.1 initialized 'ElsaContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer:6.0.1' with options: MaxPoolSize=1024 MigrationsAssembly=Elsa.Persistence.EntityFramework.SqlServer MigrationsHistoryTable=Elsa.__EFMigrationsHistory info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (64ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT 1 info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (65ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT OBJECT_ID(N'[Elsa].[__EFMigrationsHistory]'); info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT 1 info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT OBJECT_ID(N'[Elsa].[__EFMigrationsHistory]'); info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (6ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [MigrationId], [ProductVersion] FROM [Elsa].[__EFMigrationsHistory] ORDER BY [MigrationId]; info: Microsoft.EntityFrameworkCore.Migrations[20405] No migrations were applied. The database is already up to date. info: Elsa.Runtime.StartupRunner[0] Running startup task CreateSubscriptions info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.TriggerWorkflowsRequest -> "execute-workflow" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.ExecuteWorkflowDefinitionRequest -> "execute-workflow" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.ExecuteWorkflowInstanceRequest -> "execute-workflow" info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Starting periodic task "CleanupTrackedErrors" with interval 00:00:10 info: Rebus.Bus.RebusBus[0] Bus "Rebus 1" setting number of workers to 1 info: Rebus.Bus.RebusBus[0] Bus "Rebus 1" started info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.ExecuteWorkflowDefinitionRequest -> "execute-workflow-default" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.ExecuteWorkflowInstanceRequest -> "execute-workflow-default" info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Starting periodic task "CleanupTrackedErrors" with interval 00:00:10 info: Rebus.Bus.RebusBus[0] Bus "Rebus 2" setting number of workers to 1 info: Rebus.Bus.RebusBus[0] Bus "Rebus 2" started info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Events.TriggerIndexingFinished -> "ecsapp0006-workflow-management-events" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Events.TriggersDeleted -> "ecsapp0006-workflow-management-events" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Events.BookmarkIndexingFinished -> "ecsapp0006-workflow-management-events" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Events.BookmarksDeleted -> "ecsapp0006-workflow-management-events" info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Starting periodic task "CleanupTrackedErrors" with interval 00:00:10 info: Rebus.Bus.RebusBus[0] Bus "Rebus 3" setting number of workers to 1 info: Rebus.Bus.RebusBus[0] Bus "Rebus 3" started info: Elsa.Runtime.StartupRunner[0] Running startup task ContinueRunningWorkflows info: Rebus.Bus.RebusBus[0] Bus "Rebus 1" setting number of workers to 0 info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Stopping periodic task "CleanupTrackedErrors" info: Rebus.Bus.RebusBus[0] Bus "Rebus 1" stopped info: Rebus.Bus.RebusBus[0] Bus "Rebus 2" setting number of workers to 0 info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Stopping periodic task "CleanupTrackedErrors" info: Rebus.Bus.RebusBus[0] Bus "Rebus 2" stopped info: Rebus.Bus.RebusBus[0] Bus "Rebus 3" setting number of workers to 0 info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Stopping periodic task "CleanupTrackedErrors" info: Rebus.Bus.RebusBus[0] Bus "Rebus 3" stopped Unhandled exception. System.UnauthorizedAccessException: Access to the path 'C:\Windows\TEMP\ContinueRunningWorkflows5KC7QDLK4FML23TKRG7J52LIOPKUVFGU.lock' is denied. at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options) at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable
1 unixCreateMode)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable1 unixCreateMode) at Medallion.Threading.FileSystem.FileDistributedLock.TryAcquire(CancellationToken cancellationToken) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.FileSystem\FileDistributedLock.cs:line 89 at Medallion.Threading.FileSystem.FileDistributedLock.<>c.<Medallion.Threading.Internal.IInternalDistributedLock<Medallion.Threading.FileSystem.FileDistributedLockHandle>.InternalTryAcquireAsync>b__11_0(FileDistributedLock this, CancellationToken token) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.FileSystem\FileDistributedLock.cs:line 65 at Medallion.Threading.Internal.BusyWaitHelper.WaitAsync[TState,TResult](TState state, Func
3 tryGetValue, TimeoutValue timeout, TimeoutValue minSleepTime, TimeoutValue maxSleepTime, CancellationToken cancellationToken) in C:\Users\mikea000\Documents\Interests\CS\DistributedLock\DistributedLock.Core\Internal\BusyWaitHelper.cs:line 29
at Medallion.Threading.Internal.Helpers.Convert[TDerived,TBase](ValueTask`1 task, ValueTaskConversion ) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.Core\Internal\Helpers.cs:line 24
at Elsa.Services.Locking.DistributedLockProvider.AcquireLockAsync(String name, Nullable1 timeout, CancellationToken cancellationToken) at Elsa.StartupTasks.ContinueRunningWorkflows.ExecuteAsync(CancellationToken cancellationToken) at Elsa.Runtime.StartupRunner.StartupAsync(CancellationToken cancellationToken) at Elsa.Runtime.StartupRunner.StartupAsync(CancellationToken cancellationToken) at Elsa.HostedServices.StartupRunnerHostedService.StartAsync(CancellationToken cancellationToken) at Microsoft.AspNetCore.Hosting.HostedServiceExecutor.ExecuteAsync(Func
2 callback, Boolean throwOnFirstFailure)
at Microsoft.AspNetCore.Hosting.WebHost.StartAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)
at *****.Program.Main(String[] args) in C:\Users****\Program.cs:line 11`
Second Log
Application: w3wp.exe CoreCLR Version: 7.0.923.32018 .NET Version: 7.0.9 Description: The process was terminated due to an unhandled exception. Exception Info: System.UnauthorizedAccessException: Access to the path 'C:\Windows\TEMP\ContinueRunningWorkflows5KC7QDLK4FML23TKRG7J52LIOPKUVFGU.lock' is denied. at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options) at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable
1 unixCreateMode)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable1 unixCreateMode) at Medallion.Threading.FileSystem.FileDistributedLock.TryAcquire(CancellationToken cancellationToken) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.FileSystem\FileDistributedLock.cs:line 89 at Medallion.Threading.FileSystem.FileDistributedLock.<>c.<Medallion.Threading.Internal.IInternalDistributedLock<Medallion.Threading.FileSystem.FileDistributedLockHandle>.InternalTryAcquireAsync>b__11_0(FileDistributedLock this, CancellationToken token) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.FileSystem\FileDistributedLock.cs:line 65 at Medallion.Threading.Internal.BusyWaitHelper.WaitAsync[TState,TResult](TState state, Func
3 tryGetValue, TimeoutValue timeout, TimeoutValue minSleepTime, TimeoutValue maxSleepTime, CancellationToken cancellationToken) in C:\Users\mikea000\Documents\Interests\CS\DistributedLock\DistributedLock.Core\Internal\BusyWaitHelper.cs:line 29
at Medallion.Threading.Internal.Helpers.Convert[TDerived,TBase](ValueTask`1 task, ValueTaskConversion ) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.Core\Internal\Helpers.cs:line 24
at Elsa.Services.Locking.DistributedLockProvider.AcquireLockAsync(String name, Nullable1 timeout, CancellationToken cancellationToken) at Elsa.StartupTasks.ContinueRunningWorkflows.ExecuteAsync(CancellationToken cancellationToken) at Elsa.Runtime.StartupRunner.StartupAsync(CancellationToken cancellationToken) at Elsa.Runtime.StartupRunner.StartupAsync(CancellationToken cancellationToken) at Elsa.HostedServices.StartupRunnerHostedService.StartAsync(CancellationToken cancellationToken) at Microsoft.AspNetCore.Hosting.HostedServiceExecutor.ExecuteAsync(Func
2 callback, Boolean throwOnFirstFailure)
at Microsoft.AspNetCore.Hosting.WebHost.StartAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)
at **.Program.Main(String[] args) in C:\Users\source\repos\PostOffice****\Program.cs:line 11`
In that case, I would encourage you to use a real shared resource such as Redis or SQL Server to acquire a distributed lock.
Not only will that prevent potential concurrency issues when two or more nodes attempt to run the same workflow instance, it will also work around this file access issue - which is beyond my control, and probably even beyond the control of the DistributedLock project.
Thank you for your support from where I can configure shared resource to be using SQL Server.
Here's a small example off the top of my head:
services.AddElsa(elsa =>
{
elsa.ConfigureDistributedLockProvider(options => options.UseSqlServerLockProvider(dbConnectionString));
}
Make sure to reference the Elsa.DistributedLocking.SqlServer
package, which provides the UseSqlServerLockProvider
extension method.
Application '/LM/W3SVC/1/ROOT/*' with physical root 'C:\inetpub\wwwroot****\' hit unexpected managed exception, exception code = '0xe0434352'. First 30KB characters of captured stdout and stderr logs: warn: Microsoft.AspNetCore.DataProtection.Repositories.EphemeralXmlRepository[50] Using an in-memory repository. Keys will not be persisted to storage. warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[59] Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits. info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[58] Creating key {d557c887-16b4-43ae-acf0-7d0b8e5b7d57} with creation date 2023-09-19 10:21:41Z, activation date 2023-09-19 10:21:41Z, and expiration date 2023-12-18 10:21:41Z. warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35] No XML encryptor configured. Key {d557c887-16b4-43ae-acf0-7d0b8e5b7d57} may be persisted to storage in unencrypted form. info: Elsa.Runtime.StartupRunner[0] Running startup task RunMigrations info: Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 6.0.1 initialized 'ElsaContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer:6.0.1' with options: MaxPoolSize=1024 MigrationsAssembly=Elsa.Persistence.EntityFramework.SqlServer MigrationsHistoryTable=Elsa.EFMigrationsHistory info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (64ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT 1 info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (65ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT OBJECT_ID(N'[Elsa].[__EFMigrationsHistory]'); info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT 1 info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT OBJECT_ID(N'[Elsa].[EFMigrationsHistory]'); info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (6ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [MigrationId], [ProductVersion] FROM [Elsa].[__EFMigrationsHistory] ORDER BY [MigrationId]; info: Microsoft.EntityFrameworkCore.Migrations[20405] No migrations were applied. The database is already up to date. info: Elsa.Runtime.StartupRunner[0] Running startup task CreateSubscriptions info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.TriggerWorkflowsRequest -> "execute-workflow" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.ExecuteWorkflowDefinitionRequest -> "execute-workflow" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.ExecuteWorkflowInstanceRequest -> "execute-workflow" info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Starting periodic task "CleanupTrackedErrors" with interval 00:00:10 info: Rebus.Bus.RebusBus[0] Bus "Rebus 1" setting number of workers to 1 info: Rebus.Bus.RebusBus[0] Bus "Rebus 1" started info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.ExecuteWorkflowDefinitionRequest -> "execute-workflow-default" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Services.ExecuteWorkflowInstanceRequest -> "execute-workflow-default" info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Starting periodic task "CleanupTrackedErrors" with interval 00:00:10 info: Rebus.Bus.RebusBus[0] Bus "Rebus 2" setting number of workers to 1 info: Rebus.Bus.RebusBus[0] Bus "Rebus 2" started info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Events.TriggerIndexingFinished -> "ecsapp0006-workflow-management-events" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Events.TriggersDeleted -> "ecsapp0006-workflow-management-events" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Events.BookmarkIndexingFinished -> "ecsapp0006-workflow-management-events" info: Rebus.Routing.TypeBased.TypeBasedRouter[0] Mapped Elsa.Events.BookmarksDeleted -> "ecsapp0006-workflow-management-events" info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Starting periodic task "CleanupTrackedErrors" with interval 00:00:10 info: Rebus.Bus.RebusBus[0] Bus "Rebus 3" setting number of workers to 1 info: Rebus.Bus.RebusBus[0] Bus "Rebus 3" started info: Elsa.Runtime.StartupRunner[0] Running startup task ContinueRunningWorkflows info: Rebus.Bus.RebusBus[0] Bus "Rebus 1" setting number of workers to 0 info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Stopping periodic task "CleanupTrackedErrors" info: Rebus.Bus.RebusBus[0] Bus "Rebus 1" stopped info: Rebus.Bus.RebusBus[0] Bus "Rebus 2" setting number of workers to 0 info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Stopping periodic task "CleanupTrackedErrors" info: Rebus.Bus.RebusBus[0] Bus "Rebus 2" stopped info: Rebus.Bus.RebusBus[0] Bus "Rebus 3" setting number of workers to 0 info: Rebus.Threading.TaskParallelLibrary.TplAsyncTask[0] Stopping periodic task "CleanupTrackedErrors" info: Rebus.Bus.RebusBus[0] Bus "Rebus 3" stopped Unhandled exception. System.UnauthorizedAccessException: Access to the path 'C:\Windows\TEMP\ContinueRunningWorkflows5KC7QDLK4FML23TKRG7J52LIOPKUVFGU.lock' is denied. at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options) at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable.InternalTryAcquireAsync>b__11_0(FileDistributedLock this, CancellationToken token) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.FileSystem\FileDistributedLock.cs:line 65
at Medallion.Threading.Internal.BusyWaitHelper.WaitAsync[TState,TResult](TState state, Func .Program.Main(String[] args) in C:\Users****\Program.cs:line 11
1 unixCreateMode) at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable
1 unixCreateMode) at Medallion.Threading.FileSystem.FileDistributedLock.TryAcquire(CancellationToken cancellationToken) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.FileSystem\FileDistributedLock.cs:line 89 at Medallion.Threading.FileSystem.FileDistributedLock.<>c.<Medallion.Threading.Internal.IInternalDistributedLock3 tryGetValue, TimeoutValue timeout, TimeoutValue minSleepTime, TimeoutValue maxSleepTime, CancellationToken cancellationToken) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.Core\Internal\BusyWaitHelper.cs:line 29 at Medallion.Threading.Internal.Helpers.Convert[TDerived,TBase](ValueTask
1 task, ValueTaskConversion _) in C:\Users\mikea_000\Documents\Interests\CS\DistributedLock\DistributedLock.Core\Internal\Helpers.cs:line 24 at Elsa.Services.Locking.DistributedLockProvider.AcquireLockAsync(String name, Nullable1 timeout, CancellationToken cancellationToken) at Elsa.StartupTasks.ContinueRunningWorkflows.ExecuteAsync(CancellationToken cancellationToken) at Elsa.Runtime.StartupRunner.StartupAsync(CancellationToken cancellationToken) at Elsa.Runtime.StartupRunner.StartupAsync(CancellationToken cancellationToken) at Elsa.HostedServices.StartupRunnerHostedService.StartAsync(CancellationToken cancellationToken) at Microsoft.AspNetCore.Hosting.HostedServiceExecutor.ExecuteAsync(Func
2 callback, Boolean throwOnFirstFailure) at Microsoft.AspNetCore.Hosting.WebHost.StartAsync(CancellationToken cancellationToken) at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage) at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String startupMessage) at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token) at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host) at *