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 在本地运行它,上述两个布尔值都是错误的,并且代码运行良好 - 所有这些,甚至是我注释掉的额外几十行。当我将它部署到运行 IIS7 的服务器时,t.IsFaulted始终为真。我从未在 C# 中使用过异步调用,并且只在 Web API 中完成了一些简单的控制器……有什么我必须安装/配置/等的吗?在生产服务器上使其工作?

更困难的是,所有发生的异常都留在该任务中(即不会被 ELMAH 捕获),所以我不知道如何调试正在发生的事情;IIS 也没有记录事件查看器中发生的任何错误……所以我不知道到底发生了什么。关于如何使这个调试过程更容易的任何提示?

4

0 回答 0