2

次のチュートリアルを使用して: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は、イベントビューアで発生しているエラーもログに記録しません...そのため、何が起こっているのかを正確に知ることができません。このデバッグプロセスを簡単にするためのヒントはありますか?

4

0 に答える 0