C# 繁重的提取过程使会话无法在其他浏览器选项卡上访问
我刚刚编写了一个简单的asp.net应用程序,在应用程序中,用户选择一个文件并按下按钮上载,在服务器端上载后,我有一个提取过程,需要大约一分钟的时间来处理,在此期间,站点不会在另一个选项卡上响应用户。我在页面中使用session,我认为这与问题有关。知道我需要在另一个选项卡上的提取时间为用户提供站点,请提供帮助。您可以使用异步方法上载具有只读会话状态属性的文件:C# 繁重的提取过程使会话无法在其他浏览器选项卡上访问,c#,asp.net,C#,Asp.net,我刚刚编写了一个简单的asp.net应用程序,在应用程序中,用户选择一个文件并按下按钮上载,在服务器端上载后,我有一个提取过程,需要大约一分钟的时间来处理,在此期间,站点不会在另一个选项卡上响应用户。我在页面中使用session,我认为这与问题有关。知道我需要在另一个选项卡上的提取时间为用户提供站点,请提供帮助。您可以使用异步方法上载具有只读会话状态属性的文件: [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly
[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想要在上传文件的同一请求中进行繁重的处理。从会话中获取变量需要花费多少时间?我不确定它是否会将会话锁定很长时间。该会话一直锁定到提取过程结束