C# 自定义.Net windows服务在后台运行时不运行;windows update“;服务安装更新

C# 自定义.Net windows服务在后台运行时不运行;windows update“;服务安装更新,c#,.net,C#,.net,我使用.Net framework 4.5.2,C#开发了windows服务。 Windows服务在每1分钟后使用“HttpClient”调用WebAPI。 我的自定义windows服务即使在机器重新启动后也能正常工作,但根据我的观察,“windows Update”服务尝试在后台安装安全更新或任何更新时,我的自定义windows服务无法调用WebAPI。 我也检查了事件日志,但没有任何异常或任何日志 CameraViewModel cvm = new CameraViewModel();

我使用.Net framework 4.5.2,C#开发了windows服务。 Windows服务在每1分钟后使用“HttpClient”调用WebAPI。 我的自定义windows服务即使在机器重新启动后也能正常工作,但根据我的观察,“windows Update”服务尝试在后台安装安全更新或任何更新时,我的自定义windows服务无法调用WebAPI。 我也检查了事件日志,但没有任何异常或任何日志

CameraViewModel cvm = new CameraViewModel();
                cvm.Result = base64ImgData;
                cvm.LotId = "1";

using (var client = new HttpClient())
                {
                    client.BaseAddress = new Uri(serverUrl.ToString());
                    client.DefaultRequestHeaders.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    var postTask = client.PostAsJsonAsync<CameraViewModel>("api/ControllerName/ActionMethodName/", cvm);
                    postTask.Wait();
                    var resultt = postTask.Result;
                    Task<string> readAsync = resultt.Content.ReadAsStringAsync();
                    JObject json = JObject.Parse(readAsync.Result);
                    JToken fdate = JObject.Parse(readAsync.Result)["data"];
                    vehicleNumber = fdate.Value<string>("no");
                    //message = fdate.Value<string>("message");
                }
实际上,我简短地添加了我的代码,只是因为这个功能还有其他机制

所以每个人都需要知道的一件事是,在调用异步API时不要使用.Wait()方法,也不要每次调用API时都创建HttpClient的新实例


谢谢你

您已检查系统事件日志,或者您自己是否有任何异常处理?您的帖子根本不包含任何
捕获内容。你绝对应该这么做。然而,考虑另外两件事:1)如果基址不改变,HTTP客户端将被重用;每个应用程序创建一次,并根据需要调用其方法,即使是从不同的线程。2) 框架4.5支持异步/等待-使用它
.Wait()
正在阻塞。另一件事:您是否经常创建HttpClient实例?如果是,则可能耗尽了系统的插座容量。另一方面,很可能在这种情况下更新服务具有优先级,甚至它(我没有证据,但我可以想象)会阻止您在HttpClient执行其工作时创建新的HttpClient实例。请看这里:为了避免这种情况,您绝对应该重用单个httpClient实例。“ZorgoZ”感谢您指出这些要点。我有“尝试”…“捕捉”块,但没有找到。根据给定的链接,我将尝试为HttpClient创建单个实例,并按照建议使用async/await。我将在应用这些更改后更新。有什么进展吗?您解决问题了吗?您好@ZorgoZ请查看更新解决方案。谢谢您已检查系统事件日志,或者您自己是否有任何异常处理?您的帖子根本不包含任何
捕获内容。你绝对应该这么做。然而,考虑另外两件事:1)如果基址不改变,HTTP客户端将被重用;每个应用程序创建一次,并根据需要调用其方法,即使是从不同的线程。2) 框架4.5支持异步/等待-使用它
.Wait()
正在阻塞。另一件事:您是否经常创建HttpClient实例?如果是,则可能耗尽了系统的插座容量。另一方面,很可能在这种情况下更新服务具有优先级,甚至它(我没有证据,但我可以想象)会阻止您在HttpClient执行其工作时创建新的HttpClient实例。请看这里:为了避免这种情况,您绝对应该重用单个httpClient实例。“ZorgoZ”感谢您指出这些要点。我有“尝试”…“捕捉”块,但没有找到。根据给定的链接,我将尝试为HttpClient创建单个实例,并按照建议使用async/await。我将在应用这些更改后更新。有什么进展吗?您解决问题了吗?您好@ZorgoZ请查看更新解决方案。谢谢
    public async Task<string> GetVehicleNumber(string imgData)
    {
        string vehicleNumber = "N/A";
        CameraViewModel cvm = new CameraViewModel();
        cvm.Result = imgData;
        cvm.LotId = "1";

        string serverUrl = "ServerURL";

        try
        {
            var content = new MultipartFormDataContent();
            HttpResponseMessage response = Client.PostAsJsonAsync(serverUrl.ToString() + "ControllerName/ActionMethodName/", cvm).Result;

            if (response.IsSuccessStatusCode)
            {
                string contentt = await response.Content.ReadAsStringAsync();
                JToken resData = JObject.Parse(contentt.Result)["data"];
                vehicleNumber = resData.Value<string>("no");
            }
        }
        catch (Exception ex)
        {
        }

        return vehicleNumber;
    }
var taskLPN = Task.Run(async () => await GetVehicleLPNoIn(imgData));
vehicleNumber = task.Result;