我有一个调用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("");
}
答案 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
}
这些变化似乎解决了这个问题。
再次感谢大家