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("");
}
感谢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
}
这些变化似乎解决了我们的问题。
再次感谢大家