【发布时间】:2013-12-07 20:20:06
【问题描述】:
我有一个异步操作,它应该在等待某些任务后向浏览器返回一条 JSON 消息。虽然 ActionResult 已成功构建并执行(我使用的是自己的 JsonResult,因此我通过单步执行来确认),但浏览器仍然没有响应(由 Fiddler 确认)。
同时,如果我正在等待 Task.Delay() 并返回一个虚拟消息,它会起作用。
奇怪的是,如果我在 IIS Express 运行我的网站时使用 VS2013 重建我的项目,浏览器会突然收到应该在几分钟前发送的消息!我认为关闭网络服务器会导致这种情况发生,但我无法弄清楚这是怎么发生的。
我已经调试了一天,禁用了我认为可能相关的所有内容,但没有运气。因此,欢迎任何有关可能导致这种奇怪行为的原因的帮助。谢谢,代码如下:
[HttpPost]
public async Task<JsonResult> Update(string token)
{
try
{
//This works
//await Task.Delay(TimeSpan.FromSeconds(1));
//return Json(new { error = "testing." });
//This won't work
var feedback = await ServerConnectionKeeper.UpdateStation(token);
return feedback.Success
? Json(new { redirect = Url.Action("Index", "Home") })
: Json(new { error = feedback.Error });
}
catch (Exception ex)
{
return Json(new { error = ex.Message });
}
}
【问题讨论】:
-
如果
Task.Delay有效而SeverConnectionKeeper.UpdateStation无效,那么UpdateStation的某处可能存在问题。确保您已在web.config中将targetFramework设置为4.5,并且您未设置了AllowAsyncDuringSyncStages。 -
@StephenCleary 我检查了
targetFramework,它是4.5。我已经进入SeverConnectionKeeper.UpdateStation,并没有发现任何异常。并且最后的JsonResult一直被执行。 -
你设置了
AllowAsyncDuringSyncStages吗? -
HttpContext.Current.AllowAsyncDuringSyncStages是false。我认为我的代码中没有触及这个属性。 -
尝试将
HttpContext.AllowAsyncDuringSyncStages设置为true,结果还是一样。
标签: async-await iis-express asp.net-mvc-5 c#-5.0