Web API,异步文件上载在本地工作,而不是在服务器上

时间:2012-10-31 19:31:50

标签: asp.net-mvc asp.net-web-api

使用以下教程: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 始终为true。我从来没有在C#中使用异步调用,并且只在Web API中完成了一些简单的控制器......我是否需要安装/配置/等等。在生产服务器上使它工作?

让事情变得更加困难的是,所有正在发生的异常都会留在那个任务中(即不要被ELMAH抓住),所以我不知道如何调试正在发生的事情; IIS也没有记录事件查看器中发生的任何错误......所以我不知道究竟发生了什么。有关如何简化调试过程的任何提示?

0 个答案:

没有答案