C# Http请求在从ServiceBase.OnShutdown发送时中止,但不在OnStop中

C# Http请求在从ServiceBase.OnShutdown发送时中止,但不在OnStop中,c#,.net,ssl,https,dotnet-httpclient,C#,.net,Ssl,Https,Dotnet Httpclient,我有一个windows服务,它将在OnShutdown和OnStop中发送https请求,当我从任务管理器简单地重新启动该服务时,它就可以正常工作。但是,当服务因服务器关闭而停止时,相同的代码将引发此异常: System.Net.Http.HttpRequestException:发送请求时出错。-->System.Net.WebException:请求被中止:无法创建SSL/TLS安全通道。 位于System.Net.HttpWebRequest.EndGetRequestStream(IAs

我有一个windows服务,它将在
OnShutdown
OnStop
中发送https请求,当我从任务管理器简单地重新启动该服务时,它就可以正常工作。但是,当服务因服务器关闭而停止时,相同的代码将引发此异常:

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

此外,请求发生在较大的
任务中


我不确定从任务管理器或服务停止服务与关闭Windows如何使相同的逻辑行为不同。什么可能导致此问题,或者如何进行故障排除?

我无法确定是否在
任务中。Run()
是问题所在,或者是什么原因导致此请求中止。但是,通过使用
SystemEvents.sessioneded
事件,我可以防止它被中止:

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();
    }
}

这是我的代码的简化版本。当启动
sessioneded
时发送此http请求,而不是等待调用
ServiceBase.OnStop
,允许请求成功完成。这种改变不会影响服务正常关闭的方式。我能看到的主要区别是,它发生在服务关闭过程的早期。

可能Windows关闭是在服务关闭之前关闭网络。是的,我也在想,但我该如何确认?尝试枚举所有
网络接口
,并检查它们的
操作状态
以太网接口,在请求被发送之前,互联网上使用的那个已经启动了。回环也是如此。