【发布时间】:2013-04-08 14:26:59
【问题描述】:
我有一个带有 WebAPI 控制器的 ASP.NET MVC 应用程序,以及一个使用这些控制器的控制台应用程序。控制台应用程序从计划任务运行,并从远程源获取数据,对其进行解析,然后在退出前将其发布到 MVC 应用程序。
这适用于几个控制器,但其中一个调用是在不引发异常的情况下使控制台应用程序崩溃。用于所有控制器的调用者代码:
public async Task<string> Post<T>(string urlRoot, string url, T data)
{
var result = "";
try
{
var httpClient = GetHttpClient(urlRoot);
var response = await httpClient.PostAsJsonAsync(url, data); // Exits here
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsAsync<string>();
}
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
}
return result;
}
调用await httpClient.PostAsJsonAsync(url, data)时程序退出。使用断点,既不会到达catch 块,也不会到达if 语句。然而,调用正在进行,因为使用正确的数据调用 Web API 控制器。
对于通过 API 调用传递的 T,这些程序共享相同的代码。
从输出窗口:
程序“[9640] ProgramName.vshost.exe: Managed (v4.0.30319)”已退出,代码为 0 (0x0)。
我想知道发布数据的大小是否有问题,但我没有找到任何说明大小限制的文档。
所以我的问题是:
- 什么可能导致控制台应用过早退出?
- 如何检测到这一点并防止程序退出?
【问题讨论】:
-
您能否简要描述一下您从
Main到Post的调用堆栈?即,您是否在任何地方使用async void,您是否在使用awaiting 所有的Tasks,等等。 -
我在非常相似的情况下发生了这种情况。我所做的是运行
Fiddler,然后我看到正在返回的Http响应,问题是JSON.Net无法序列化响应中使用的一些子对象。 -
这可能对其他人有用 - 在尝试了此线程中的所有建议后,我终于删除了我的 bin 和 obj 文件夹,清理并重建了我的项目,重新启动了 Visual Studio。之后问题就消失了。 VS2015sp3 WebAPI2 MVC4
标签: c# asp.net-web-api