gpt4 book ai didi

c# - Http 请求在从 ServiceBase.OnShutdown 发送时中止,但在 OnStop 中未中止

转载 作者:太空宇宙 更新时间:2023-11-03 14:03:33 28 4
gpt4 key购买 nike

我有一个 Windows 服务,它将在 OnShutdownOnStop 中发送一个 https 请求,当我从任务管理器中重新启动该服务时,它工作正常。但是,当服务因服务器关闭而停止时,相同的代码将抛出此异常:

System.Net.Http.HttpRequestException:发送请求时出错。 ---> System.Net.WebException:请求被中止:无法创建 SSL/TLS 安全通道。
在 System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult、TransportContext& 上下文)
在 System.Net.Http.HttpClientHandler.GetRequestStreamCallback (IAsyncResult ar)
--- 内部异常堆栈跟踪结束 ---
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()

此外,请求发生在更大的Task 中。

我不确定从任务管理器或服务停止服务与关闭 Windows 如何使相同的逻辑表现不同。什么可能导致此问题,或者我该如何解决?

最佳答案

我无法确定是在 Task.Run() 中是问题所在,还是其他原因可能导致此请求中止。但是,我能够通过使用 SystemEvents.SessionEnded 事件来防止它中止:

public void Start()
{
SystemEvents.SessionEnded += OnSessionEnded;

...

public void Stop()
{
SystemEvents.SessionEnded -= OnSessionEnded;

...

private void OnSessionEnded(object sender, SessionEndedEventArgs eventArgs)
{
if (eventArgs.Reason == SessionEndReasons.SystemShutdown)
{
SendRequest();
}
}

这是我的代码所做的简化版本。在 SessionEnded 触发时发送此 http 请求,而不是等待 ServiceBase.OnStop 被调用,允许请求成功完成。并且更改不会影响服务正常关闭的方式。我可以看到的主要区别是它现在发生在服务关闭过程的早期。

关于c# - Http 请求在从 ServiceBase.OnShutdown 发送时中止,但在 OnStop 中未中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022938/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com