WebAPI コントローラーを備えた ASP.NET MVC アプリと、これらのコントローラーを使用するコンソール アプリがあります。コンソール アプリは、スケジュールされたタスクから実行され、リモート ソースからデータを取得して解析し、終了する前に MVC アプリに投稿します。
これはいくつかのコントローラーでうまく機能しますが、呼び出しの 1 つが例外をスローせずにコンソール アプリをクラッシュさせています。すべてのコントローラーに使用される呼び出し元コード:
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 コントローラーが正しいデータで呼び出されているため、呼び出しは行われています。
T
プログラムは、API 呼び出しで渡される同じコードを共有します。
出力ウィンドウから:
プログラム '[9640] ProgramName.vshost.exe: Managed (v4.0.30319)' はコード 0 (0x0) で終了しました。
投稿されたデータのサイズが問題になるのではないかと思っていましたが、サイズ制限を記載したドキュメントは見つかりませんでした。
だから私の質問は:
- コンソール アプリが途中で終了する原因は何ですか?
- これを検出してプログラムが終了しないようにするにはどうすればよいですか?