Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 繁重的提取过程使会话无法在其他浏览器选项卡上访问_C#_Asp.net - Fatal编程技术网

C# 繁重的提取过程使会话无法在其他浏览器选项卡上访问

C# 繁重的提取过程使会话无法在其他浏览器选项卡上访问,c#,asp.net,C#,Asp.net,我刚刚编写了一个简单的asp.net应用程序,在应用程序中,用户选择一个文件并按下按钮上载,在服务器端上载后,我有一个提取过程,需要大约一分钟的时间来处理,在此期间,站点不会在另一个选项卡上响应用户。我在页面中使用session,我认为这与问题有关。知道我需要在另一个选项卡上的提取时间为用户提供站点,请提供帮助。您可以使用异步方法上载具有只读会话状态属性的文件: [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly

我刚刚编写了一个简单的asp.net应用程序,在应用程序中,用户选择一个文件并按下按钮上载,在服务器端上载后,我有一个提取过程,需要大约一分钟的时间来处理,在此期间,站点不会在另一个选项卡上响应用户。我在页面中使用session,我认为这与问题有关。知道我需要在另一个选项卡上的提取时间为用户提供站点,请提供帮助。

您可以使用异步方法上载具有只读会话状态属性的文件:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
    public class TestController : Controller
    {
    [HttpPost]
    public async Task<JsonResult> UploadFile()
    {
        bool Status = false;
        try
        {
            foreach (string file in Request.Files)
            {
                var fileContent = Request.Files[file];
                if (fileContent != null && fileContent.ContentLength > 0)
                {
                    var stream = fileContent.InputStream;
                    var fileName = GetFileName();
                    var fileExt = Path.GetExtension(fileContent.FileName);
                    var path = Path.Combine(Server.MapPath("~/App_Data/StaticResource"), fileName + fileExt);
                    using (var fileStream = System.IO.File.Create(path))
                    {
                        stream.CopyTo(fileStream);
                        Status = true;
                    }
                }
            }
        }
        catch {}
        return Json(Status);
    }
}
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
公共类TestController:控制器
{
[HttpPost]
公共异步任务上载文件()
{
布尔状态=假;
尝试
{
foreach(Request.Files中的字符串文件)
{
var fileContent=Request.Files[file];
if(fileContent!=null&&fileContent.ContentLength>0)
{
var stream=fileContent.InputStream;
var fileName=GetFileName();
var fileExt=Path.GetExtension(fileContent.FileName);
var path=path.Combine(Server.MapPath(“~/App\u Data/StaticResource”),fileName+fileExt);
使用(var fileStream=System.IO.File.Create(path))
{
CopyTo(fileStream);
状态=真;
}
}
}
}
捕获{}
返回Json(状态);
}
}
它在不同的线程中执行您的进程
有一篇关于使用async/await运算符的文章:

嘿,你可能想看看网站上的和指南。当我们不知道您的代码在做什么或您尝试了什么时,很难给出答案!在后台进行处理。例如使用Hangfire。尝试搜索“ASP.NET中长期运行的后台任务”。异步无法解决会话被锁定的问题。如何在所有文件上载过程中锁定会话?解决问题的方法不是锁定会话并使用异步方法。因为默认会话状态提供程序允许一次一个请求访问会话。这里的问题是OP想要在上传文件的同一请求中进行繁重的处理。从会话中获取变量需要花费多少时间?我不确定它是否会将会话锁定很长时间。该会话一直锁定到提取过程结束