C# 文件上载未在web服务器上的后台线程中运行

C# 文件上载未在web服务器上的后台线程中运行,c#,asp.net-mvc,multithreading,iis,C#,Asp.net Mvc,Multithreading,Iis,我正在上传新线程中的文件,但看起来服务器正在同一个主线程中接收它。(使用ASP.NET MVC) 在本地,上传文件需要3秒,但在live web服务器上,完成该方法需要20秒,这只是因为上传了文件。 我无法理解,它是在后台线程,那么为什么它是增加时间返回 在live web服务器上,我正在使用IIS 8。 下面是代码 string path = string.Empty; string thumbPath = string.Empty; HttpC

我正在上传新线程中的文件,但看起来服务器正在同一个主线程中接收它。(使用ASP.NET MVC)

在本地,上传文件需要3秒,但在live web服务器上,完成该方法需要20秒,这只是因为上传了文件。 我无法理解,它是在后台线程,那么为什么它是增加时间返回

在live web服务器上,我正在使用IIS 8。 下面是代码

        string path = string.Empty;
        string thumbPath = string.Empty;
        HttpContext cont = HttpContext.Current;
        string url = HttpContext.Current.Request.Url.Host.ToLower();
        Thread t1= new Thread(() =>
        {
            if (files.Count() > 0 || files != null)
            {
                foreach (HttpPostedFileBase file in files)
                {
                    if (file != null)
                    {
                        string newFileName = System.Guid.NewGuid().ToString("N");
                        Photo photo = new Photo();
                        path = UploadFile(cont, file, ad.Id.ToString(), newFileName);
//Create thumbnail 
                        thumbPath = CreateAdThumbNail(cont, file, ad.Id.ToString(), newFileName);
                    }
                }
            }
        });
        t1.IsBackground = true;
        t1.Start();

        string[] message = new string[2];
        message[0] = "true";
        message[1] = "http://" + HttpContext.Current.Request.Url.Host.ToLower() + "/Ad/Item/" + "?section=myads";
        return Json(message, JsonRequestBehavior.AllowGet);

我认为您希望在另一个线程中上传到服务器,但不会,因为它正在执行实际的HTTP请求并将数据发送到您的服务器。我假设是上传占用了时间,而不是新线程中的逻辑,HTTP请求的速度取决于服务器和上传方之间的连接速度以及服务器存储信息的速度

您在附加线程中所做的只是对已发送到服务器的文件的最终处理—将其移动到文件系统上的其他位置,并创建上载图像的缩略图。在创建新线程时,文件已经发送到服务器

如果您还没有这样做,我建议使用AJAX请求发送上传请求,该请求将“在后台”异步执行,并且不会让您的用户在20秒上传过程中看到冻结的屏幕

问题是Ajax上传需要一个
iFrame
和各种花哨的技术来确保它与所有浏览器兼容。除非你愿意,否则我不会亲自动手,但我在我的网站上的所有上传都使用了以下插件,它的效果非常好:


我使用的方法是
ajaxSubmit()
,它使用AJAX和任何
字段提交表单。

如果上载需要20秒,那么您就非常接近请求超时,即30秒。你可能想研究通过AJAX上传区块,例如使用plupload。我明白你的意思,你能引用一些AJAX示例吗,你想让我如何执行此操作??我的文件上传是连接到以前的呼叫主键,上传后,它发送更新呼叫到数据库以及伟大的东西。我在回答中加入了一些额外的信息。我希望这有帮助。该站点上有大量代码示例。如果还没有,您需要在页面中包含jQuery。我想给您+100,但可能只有+1。我没有使用您的代码,但得到了您的答案。提交表单后,我使用ajax异步调用上载文件。谢谢你救了我一天。