Windows服务退出时代码为0,没有任何错误,即使它没有完成它的任务

本文关键字:服务 任务 错误 时代 退出 任何 Windows 代码 | 更新日期: 2023-09-27 18:15:07

我有一个调用web API服务的windows服务。所有的API调用都经过了测试并正常工作。

服务运行一段特定的代码,将数据发送到API。它应该返回并继续循环。它所做的就是停止。JSon已经通过fiddler发送到API,并且工作正常。

下面是违规代码:-

public async Task<WorkOrderCreationResponseDto> ImportWorkOrders(WorkOrderCreationRequestDto request)
    {
        try
        {
            WorkOrderCreationResponseDto resp = await RestClient.PostAsync<WorkOrderCreationRequestDto, WorkOrderCreationResponseDto>(string.Format("{0}/WorkOrders", Resource), request);
            return resp;
        }
        catch (Exception ex)
        {
            throw ex;
        }

    }

现在代码进入await行。此时,代码退出,代码为0。它永远不会返回,也不会在catch中捕获错误。

有谁能解释一下为什么会发生这种情况,因为我在谷歌上闲逛了一个上午,试图弄清楚这一切。

任何能说明这一点的东西都将不胜感激。

环境是Windows 10周年更新和Visual Studio 2015。我们正在用c#编写代码。

谢谢史蒂夫。

我们在下面的代码中构建一个数据对象。_rest包含API的用户凭据。

using (SopImportDataService service = new SopImportDataService(_rest))
                            {
                                string jsonString = JsonConvert.SerializeObject(wo);
                                //WorkOrderCreationResponseDto c = await service.ImportWorkOrders(wo);
                                await service.ImportWorkOrders(wo);
                                Console.WriteLine("");
                            }

Windows服务退出时代码为0,没有任何错误,即使它没有完成它的任务

感谢gloria为我指明了正确的方向。问题是程序cs文件中的Main不是Async。我们使用了Stephen Cleary的AsyncEx库,并将program.cs修改成这样:-

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main()
    {
        try
        {
            AsyncContext.Run(() => MainAsync());
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine(ex);
        }
    }
    static async Task MainAsync()
    {
#if (!DEBUG)
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new UnityService()
        };
        ServiceBase.Run(ServicesToRun);
 #else
        UnityService myServ = new UnityService();
        //myServ.SetupService().ConfigureAwait(true);
        await myServ.BeginService();
#endif
    }

这些变化似乎解决了我们的问题。

再次感谢大家