【发布时间】:2019-08-01 12:54:39
【问题描述】:
在我的 .NET Core HttpPost 控制器中,我获取数据。我将进一步传递此数据以进行处理。我只能通过设置监听器才能得到关于处理成功的结果。我想要返回给用户的监听器得到的结果。
但是我怎样才能让控制器等待侦听器并在控制器返回时处理侦听器返回?
用于说明目的的示例:
[HttpPost()]
public async Task<IActionResult> CreatedAsync([FromBody]DataWrapper dataWrapper)
{
BusinessComponet.CollectData(dataWrapper);
return returnValueFromListener; // How to do this in real?
}
static void BusinessComponentDeliverResponse(object sender, DeliverEventArgs e)
{
if(e.IsValid)
return Ok("received"); // How to use this as return for the controller?
else
return BadRequest(e.ErrorMessage); // How to use this as return for the controller?
}
在侦听器中获得结果之前的时间跨度现在大约为 7 秒,我可以在 1 秒内得到它,并进行一些更改。我认为让用户等待结果是可以的。
【问题讨论】:
-
如果我做对了,你就是在尝试让一个长时间运行的 RPC 通过 HTTP 工作。我会做什么:服务器有一个引用“ResultState”对象的键字典。一个 Post 在那里创建一个条目,并开始处理。 Process 将更新 ResultState 对象。您返回的是资源地址的成功:这是使用密钥作为参数预先配置的结果获取端点。然后客户端可以轮询结果状态。一段时间后,我会删除完成的结果。
-
您描述的是您如何尝试解决问题,而不是问题本身。 ASP.NET Core 中没有“监听器”,除非您指的是 SignalR。没有事件——它们在服务器应用程序中甚至没有意义。 实际问题是什么?开始一项长期运行的工作并报告进度?向客户端推送通知是 SignalR 的工作。
-
@PanagiotisKanavos 我已经在同一个应用程序中使用 .NET Core 中的侦听器并且它可以工作。
-
@FrankMehlhop 什么听众?您发布的是一个事件处理程序。你的意思是一个 HttpListener 吗?还有什么?
标签: c# .net-core asp.net-core-webapi