Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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# ASP.NET MVC,ajax请求未被异步处理_C#_Ajax_Asp.net Mvc_Asp.net Mvc 4_Request - Fatal编程技术网

C# ASP.NET MVC,ajax请求未被异步处理

C# ASP.NET MVC,ajax请求未被异步处理,c#,ajax,asp.net-mvc,asp.net-mvc-4,request,C#,Ajax,Asp.net Mvc,Asp.net Mvc 4,Request,我有一个大的应用程序项目,我们已经做了一段时间了。我90%确信这是一个新的问题,实际上以前没有问题 当我调用两个ajax请求时,第二个请求在处理之前等待第一个请求完成。当我检查网络流量时,我可以看到客户端(浏览器)向服务器发送两个请求,但似乎是服务器一次只提供一个请求 我搞不懂这是什么。我找到的答案是,可能是属性enableSessionState使MVC同步提供请求,所以我对此进行了研究,没有任何帮助 我开始了一个新的MVC4项目,并制作了一个示例代码,它完全符合我的要求。我们的主要项目一定出

我有一个大的应用程序项目,我们已经做了一段时间了。我90%确信这是一个新的问题,实际上以前没有问题

当我调用两个ajax请求时,第二个请求在处理之前等待第一个请求完成。当我检查网络流量时,我可以看到客户端(浏览器)向服务器发送两个请求,但似乎是服务器一次只提供一个请求

我搞不懂这是什么。我找到的答案是,可能是属性enableSessionState使MVC同步提供请求,所以我对此进行了研究,没有任何帮助

我开始了一个新的MVC4项目,并制作了一个示例代码,它完全符合我的要求。我们的主要项目一定出了问题

我会发布一些代码。关键是我想开始一个过程或者一些需要一段时间才能完成的事情。然后从日志中读取以向用户显示进度信息。但是现在这个过程开始了,当它结束时,用户可以同时获得所有收集到的信息。 但是,当它工作时,就像在新项目中一样,用户在缓慢的过程仍在执行时,一块一块地获取信息

有人有什么想法可以帮助我吗?给我指出正确的方向在哪里可以看到更多

视图:

@{
ViewBag.Title=“Index”;
}
.计算{
溢出y:滚动;
宽度:400px;
高度:600px;
背景色:#eee;
边框:实心1px#000;
填充:10px;
}
指数
$(函数(){
$.ajax({
键入:“POST”,
url:'Calculation/DoSlowCalculation',
contentType:'application/json;charset=utf-8'
});
函数readLog(){
$.ajax({
键入:“POST”,
url:'Calculation/ReadCalculationLog',
contentType:'application/json;charset=utf-8',
成功:功能(日志){
var completed=false,
div=$('计算');
对于(变量c1=0,l=log.length;c1
控制器:

public class CalculationController : Controller
    {
        public ActionResult Index()
        {
            return View("Index");
        }

        public void DoSlowCalculation()
        {
            using (var conn = new SqlConnection("Server=.;Database=SlowCalculationDB;Trusted_Connection=True;"))
            {
                using (var cmd = new SqlCommand(@"
                    INSERT INTO Log
                    VALUES ('Starting calculation', GETDATE(), 0, 0);

                    WAITFOR DELAY '00:00:04'

                    INSERT INTO Log
                    VALUES ('Some more calculation...1', GETDATE(), 0, 0);

                    WAITFOR DELAY '00:00:04'

                    INSERT INTO Log
                    VALUES ('Some more calculation...2', GETDATE(), 0, 0);

                    WAITFOR DELAY '00:00:04'

                    INSERT INTO Log
                    VALUES ('Some more calculation...3', GETDATE(), 0, 0);

                    WAITFOR DELAY '00:00:04'

                    INSERT INTO Log
                    VALUES ('Some more calculation...4', GETDATE(), 0, 0);

                    WAITFOR DELAY '00:00:04'

                    INSERT INTO Log
                    VALUES ('Ends calculation', GETDATE(), 0, 1);
                ", conn))
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
        }

        public ActionResult ReadCalculationLog()
        {
            using (var conn = new SqlConnection("Server=.;Database=SlowCalculationDB;Trusted_Connection=True;"))
            {
                using (var cmd = new SqlCommand(@"
                    SELECT LogText, LogTime, Complete FROM Log WHERE [Read] = 0;
                    UPDATE Log SET [Read] = 1;
                ", conn))
                {
                    conn.Open();
                    var dt = new DataTable();
                    var sqlAdapter = new SqlDataAdapter(cmd);
                    sqlAdapter.Fill(dt);

                    var logs = from l in dt.AsEnumerable()
                               select new
                               {
                                   LogText = l.Field<string>("LogText"),
                                   LogTime = l.Field<DateTime>("LogTime").ToString("HH:mm:ss"),
                                   Complete = l.Field<bool>("Complete")
                               };

                    return Json(logs.ToList());
                }
            }
        }
    }
公共类计算控制器:控制器
{
公共行动结果索引()
{
返回视图(“索引”);
}
公共空间计算()
{
使用(var conn=new SqlConnection(“服务器=;数据库=SlowCalculationDB;可信连接=True;”)
{
使用(var cmd=new SqlCommand)(@)
插入日志
值('开始计算',GETDATE(),0,0);
等待延迟“00:00:04”
插入日志
值('更多的计算…1',GETDATE(),0,0);
等待延迟“00:00:04”
插入日志
值('更多的计算…2',GETDATE(),0,0);
等待延迟“00:00:04”
插入日志
值('更多的计算…3',GETDATE(),0,0);
等待延迟“00:00:04”
插入日志
值('更多的计算…4',GETDATE(),0,0);
等待延迟“00:00:04”
插入日志
值('结束计算',GETDATE(),0,1);
(康涅狄格州)
{
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
公共操作结果ReadCalculationLog()
{
使用(var conn=new SqlConnection(“服务器=;数据库=SlowCalculationDB;可信连接=True;”)
{
使用(var cmd=new SqlCommand)(@)
选择LogText、LogTime、Complete FROM Log,其中[Read]=0;
更新日志集[读取]=1;
(康涅狄格州)
{
conn.Open();
var dt=新数据表();
var sqlAdapter=新的SqlDataAdapter(cmd);
sqlAdapter.Fill(dt);
var logs=从dt.AsEnumerable()中的l开始
选择新的
{
LogText=l.字段(“LogText”),
LogTime=l.字段(“LogTime”).ToString(“HH:mm:ss”),
完成=l.字段(“完成”)
};
返回Json(logs.ToList());
}
}
}
}

MVC将同步处理同一用户发出的请求,因此当您启用会话时,您也启用了此功能

要允许异步处理操作,必须使用[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]注释控制器,如下所示:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class ParallelController : Controller
{
...
}

这在操作级别上不起作用,因此您可能需要为所讨论的操作使用单独的控制器。

这实际上是可行的。我认为这相当于在web.config中设置
enableSessionState=false
(这不起作用)。为什么在启动新项目时不需要包含此属性?在我的新测试项目中,一切正常。必须有一个全局设置或类似设置,使两个p
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class ParallelController : Controller
{
...
}