次のチュートリアルを使用して:http ://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2 、ベースに次のコントローラーを使用しました私が実装したファイルアップロード呼び出し:
public Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data and return an async task.
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
// A whole lotta logic to save the file, process it, etc.
});
return task;
}
スペースを節約するために、ContinueWith内の最初の行でエラーが発生するため、作成したロジックの大部分を含めませんでした。
if (t.IsFaulted || t.IsCanceled)
これをVS2010からローカルで実行すると、上記のブール値は両方ともfalseであり、コードは完全に機能します。すべて、コメントアウトした数十行も含まれます。IIS7を実行しているサーバーにデプロイすると、t.IsFaultedは常にtrueになります。私はC#で非同期呼び出しを使用したことがなく、WebAPIでいくつかの単純なコントローラーを実行しただけです...インストール/構成などする必要があるものはありますか。それを機能させるために本番サーバーで?
さらに困難なのは、発生しているすべての例外がそのタスクにとどまっている(つまり、ELMAHに捕らえられない)という事実です。そのため、何が起こっているのかをデバッグする方法がわかりません。IISは、イベントビューアで発生しているエラーもログに記録しません...そのため、何が起こっているのかを正確に知ることができません。このデバッグプロセスを簡単にするためのヒントはありますか?