Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何安全地退出自托管应用程序(在退出前执行某些操作)_C#_Asp.net Core - Fatal编程技术网

C# 如何安全地退出自托管应用程序(在退出前执行某些操作)

C# 如何安全地退出自托管应用程序(在退出前执行某些操作),c#,asp.net-core,C#,Asp.net Core,我希望自托管ASP.NET核心应用程序在收到退出信号时可以在退出之前延迟一段时间 我有多个应用程序实例支持负载平衡 默认情况下,如果关闭实例,处理请求将被中断。而且在很短的时间内,仍然会有一些新的请求发送到脱机实例,因为负载平衡有一个健康检查的间隔 所以如果我能在退出前做点什么: 首先禁用healthcheck,它将停止来自负载平衡的新请求 继续处理已收到的所有请求 然后,应用程序可以“安全”退出。它允许一个实例平稳运行,用户不会感觉到 所以我想知道是否有一个官方的解决方案,或者一个最佳实践 我

我希望自托管ASP.NET核心应用程序在收到退出信号时可以在退出之前延迟一段时间

我有多个应用程序实例支持负载平衡

默认情况下,如果关闭实例,处理请求将被中断。而且在很短的时间内,仍然会有一些新的请求发送到脱机实例,因为负载平衡有一个健康检查的间隔

所以如果我能在退出前做点什么:

  • 首先禁用healthcheck,它将停止来自负载平衡的新请求
  • 继续处理已收到的所有请求
  • 然后,应用程序可以“安全”退出。它允许一个实例平稳运行,用户不会感觉到

    所以我想知道是否有一个官方的解决方案,或者一个最佳实践

    我希望自行托管的ASP.NET核心应用程序可以延迟一段时间 收到退出信号后退出

    这是什么信号?杀戮还是监禁

    假设您想要处理术语信号

    因此,如果您使用的是.NETCore1.X,您的解决方案应该是这样的。 首先,需要向json文件添加依赖项

    "System.Runtime.Loader" : "<version>
    
    对于使用.NETCore2.X,有不同的解决方案。您可以使用
    iaapplicationlifetime
    interface()

    当您拥有此功能时,您所能做的就是:

    applicationLifetime.ApplicationStopping.Register(() => Console.WriteLine("Stopping"));
    applicationLifetime.ApplicationStopped.Register(() => Console.WriteLine("Stopped"));
    
    希望这有帮助

    我希望自行托管的ASP.NET核心应用程序可以延迟一段时间 收到退出信号后退出

    这是什么信号?杀戮还是监禁

    假设您想要处理术语信号

    因此,如果您使用的是.NETCore1.X,您的解决方案应该是这样的。 首先,需要向json文件添加依赖项

    "System.Runtime.Loader" : "<version>
    
    对于使用.NETCore2.X,有不同的解决方案。您可以使用
    iaapplicationlifetime
    interface()

    当您拥有此功能时,您所能做的就是:

    applicationLifetime.ApplicationStopping.Register(() => Console.WriteLine("Stopping"));
    applicationLifetime.ApplicationStopped.Register(() => Console.WriteLine("Stopped"));
    

    希望这能有所帮助。

    什么是“顺利关机而不被用户察觉”@Enigmativity我很抱歉我的英语不好。默认情况下,如果关闭实例,某些处理请求将被中断。而且在短时间内,因为负载平衡有一个健康检查的间隔,所以仍然会有一些新的请求发送到脱机实例。这不利于用户体验。你是在Linux上运行的吗?你使用的是什么版本的.net core?什么是“平稳关机而不被用户察觉”呢?@Enigmativity我很抱歉我的英语不好。默认情况下,如果关闭实例,某些处理请求将被中断。而且在短时间内,因为负载平衡有一个健康检查的间隔,所以仍然会有一些新的请求发送到脱机实例。这不利于用户体验。你是在Linux上运行的吗?您使用的是什么版本的.net core?非常感谢。但我不明白为什么没有“现成”的解决方案,我认为这是一个非常普遍和有用的要求。现成的?我认为这个解决方案非常好,我说的“现成的”意思是预设的(或现有的?很抱歉我的英语很差)。在您的指导下,我将注册一个
    applicationLifeTime.ApplicationStopping
    ,以更改运行状况,并等待所有现有的入站请求完成。但是这些操作是通用的,我在每个项目中都需要它们。所以,这就是为什么我问由aspnet官方或第三方提供的“现成”解决方案。非常感谢。但我不明白为什么没有“现成”的解决方案,我认为这是一个非常普遍和有用的要求。现成的?我认为这个解决方案非常好,我说的“现成的”意思是预设的(或现有的?很抱歉我的英语很差)。在您的指导下,我将注册一个
    applicationLifeTime.ApplicationStopping
    ,以更改运行状况,并等待所有现有的入站请求完成。但是这些操作是通用的,我在每个项目中都需要它们。所以,这就是为什么我问由aspnet官方或第三方提供的“现成”解决方案。