Windows服务以代码0退出,即使它没有完成它也没有错误

时间:2016-10-26 13:39:26

标签: c# json windows api service

我有一个调用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退出。它永远不会返回返回,并且没有错误被捕获。

任何人都可以解释为什么会发生这种情况,因为我在完全失去了一个早上的拖钓谷谷试图理解这一切。

任何能够对此有所了解的事情都将非常感激。

环境是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("");
                            }

1 个答案:

答案 0 :(得分:0)

感谢Glorin指出我正确的方向。问题是Progrm.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
    }

这些变化似乎解决了这个问题。

再次感谢大家