C# Http请求在从ServiceBase.OnShutdown发送时中止,但不在OnStop中
我有一个windows服务,它将在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
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关闭是在服务关闭之前关闭网络。是的,我也在想,但我该如何确认?尝试枚举所有网络接口
,并检查它们的操作状态
以太网接口,在请求被发送之前,互联网上使用的那个已经启动了。回环也是如此。