C# Asp.net经过一个漫长的过程后,下一个操作可以';不可能完成

C# Asp.net经过一个漫长的过程后,下一个操作可以';不可能完成,c#,asp.net,sql,oracle,C#,Asp.net,Sql,Oracle,下面的代码调用存储过程,然后在另一个表上进行一次插入 问题是,当程序只需要很少的时间就能完成所有工作时, 当程序运行很长时间(会话似乎没有到期)但在db上执行下一个操作时 使会话处于“非活动”状态 web.config: </webServices> <trust level="Full" /> <httpRuntime executionTimeout="90000000" maxRequestLength="20971

下面的代码调用存储过程,然后在另一个表上进行一次插入

问题是,当程序只需要很少的时间就能完成所有工作时, 当程序运行很长时间(会话似乎没有到期)但在db上执行下一个操作时 使会话处于“非活动”状态

web.config:

    </webServices>
    <trust level="Full" />
    <httpRuntime 
    executionTimeout="90000000" 
    maxRequestLength="2097151" 
    useFullyQualifiedRedirectUrl="false" 
    minFreeThreads="8" 
    minLocalRequestFreeThreads="4" 
    appRequestQueueLimit="1000" 
    enableVersionHeader="true"
    />
我想强调的是,当这个过程花费很少的时间时,一切都很好。 当需要很长时间时,最后一个命令:Insert或Update从不在db上停止,我在中看到会话
非活动模式。

如果查询所需时间比设置的HTTP超时时间长,则最好创建一个数据库作业,并从ASP.NET启动该作业,而不必等待它完成

但是web.config说超时:90000000可能比这次多?你确定超时有效吗?我怀疑-该值以秒为单位表示超时。SQL运行的最长时间是多少?在我看来,如果在某些情况下需要超过5分钟的时间,请将其作为SQL作业。但这取决于你的要求。
    OracleCommand objCmd = new OracleCommand();
            objCmd.Connection = connection;
            objCmd.CommandText = "insertReqSched";
            objCmd.CommandType = CommandType.StoredProcedure;

            if((Session["chkAllSoc"] != null)&&(Session["chkAllSoc"].ToString() == "1"))
            {
                /*
                selezionare tutte le soc di vendita e metterli in una string separati da ,
                */
                OracleCommand cmd = new OracleCommand("select uidaccount FROM ACCOUNT A INNER JOIN ACCOUNTTYPE AT ON A.UIDACCOUNTTYPE = AT.UIDACCOUNTTYPE WHERE ACCOUNTTYPENAME IN ('RETAILER','ELIGIBLE_CLIENT') order by name asc",connection);
                 reader = cmd.ExecuteReader();
                string socVends = "";
                while (reader.Read())
                {
                    socVends = socVends + "" + reader.GetInt32(0) + ",";
                }
                reader.Close();

                OracleParameter socVal = new OracleParameter("socVend",OracleType.VarChar);
                socVal.Direction = ParameterDirection.Input;  
                socVal.Value= socVends.Remove(socVends.Length - 1);
                objCmd.Parameters.Add(socVal);
            }
            else{
                OracleParameter socVal = new OracleParameter("socVend",OracleType.VarChar);
                socVal.Direction = ParameterDirection.Input;  
                socVal.Value= ((Session["socVend"] != null) && (Session["socVend"].ToString().Length != 0)) ? Session["socVend"].ToString()  : (object)System.DBNull.Value;
                objCmd.Parameters.Add(socVal);
            }
            if((Session["chkAllPlant"]!= null)&&(Session["chkAllPlant"].ToString() == "1"))
            {
                /*
                selezionare tutti gli impianti e metterli in una stringa separati da ,
                */
                OracleCommand cmd = new OracleCommand("select plantcode from plant",connection);
                 reader = cmd.ExecuteReader();
                string plants = "";
                while (reader.Read())
                {
                    plants = plants + reader.GetString(0) + "," ;
                }
                reader.Close();

                OracleParameter plantCode = new OracleParameter("plantCode",OracleType.VarChar);
                plantCode.Direction = ParameterDirection.Input;  
                plantCode.Value= plants.Remove(plants.Length - 1);
                objCmd.Parameters.Add(plantCode);
            }
            else{
                OracleParameter plantCode = new OracleParameter("plantCode",OracleType.VarChar);
                plantCode.Direction = ParameterDirection.Input;  
                plantCode.Value= ((Session["plantcode"] != null) && (Session["plantcode"].ToString().Length != 0)) ? Session["plantcode"].ToString()  : (object)System.DBNull.Value;
                objCmd.Parameters.Add(plantCode);
            }
            OracleParameter bllingParam = new OracleParameter("billingcy",OracleType.VarChar);
            bllingParam.Direction = ParameterDirection.Input;  
            bllingParam.Value= ((Session["billingcycle"] != null )&&(Session["billingcycle"].ToString().Length != 0)) ? Session["billingcycle"].ToString()  : (object)System.DBNull.Value;
            objCmd.Parameters.Add(bllingParam);

            OracleParameter freqLet = new OracleParameter("freqLettura",OracleType.VarChar);
            freqLet.Direction = ParameterDirection.Input;  
            freqLet.Value= ((Session["freqLett"] != null )&&(Session["freqLett"].ToString().Length != 0)) ? Session["freqLett"].ToString()  : (object)System.DBNull.Value;
            objCmd.Parameters.Add(freqLet);

            OracleParameter tipoElab = new OracleParameter("tipoElab",OracleType.VarChar);
            tipoElab.Direction = ParameterDirection.Input;  
            tipoElab.Value= ((Session["tipoelab"] != null )&&(Session["tipoelab"].ToString().Length != 0)) ? Session["tipoelab"].ToString()  : (object)System.DBNull.Value;
            objCmd.Parameters.Add(tipoElab);

            OracleParameter startT = new OracleParameter("startTime",OracleType.DateTime);
            startT.Direction = ParameterDirection.Input;  
            startT.Value=Session["fStartDate"].ToString();
            objCmd.Parameters.Add(startT);

            OracleParameter stopT = new OracleParameter("stopTime",OracleType.DateTime);
            stopT.Direction = ParameterDirection.Input;  
            stopT.Value=Session["fEndDate"].ToString();
            objCmd.Parameters.Add(stopT);

            OracleParameter schedPara = new OracleParameter("schedDate",OracleType.DateTime);
            schedPara.Direction = ParameterDirection.Input;  
            schedPara.Value=Session["fSCHEDDATE"].ToString();
            objCmd.Parameters.Add(schedPara);

            OracleParameter seqVal = new OracleParameter("valoreSequence",OracleType.Number);
            seqVal.Direction = ParameterDirection.Input;  
            seqVal.Value = Convert.ToInt32(sequenceVal);
            objCmd.Parameters.Add(seqVal);


            objCmd.ExecuteNonQuery();


            OracleCommand cmdInsert = new OracleCommand("INSERT INTO batchrequest(uidbatchrequest,processnum,scheddate,starttime,stoptime,ratecode) " + 
            "  VALUES (:1,:2,:3,:4,:5,:6)", connection);
            cmdInsert.Parameters.Add("1", OracleType.Number).Value = Convert.ToInt32(sequenceVal);
            cmdInsert.Parameters.Add("2", OracleType.Number).Value = Convert.ToInt32(Session["selectProcess"]);
            cmdInsert.Parameters.Add("3", OracleType.DateTime).Value = date1;
            cmdInsert.Parameters.Add("4", OracleType.DateTime).Value = date2;
            cmdInsert.Parameters.Add("5", OracleType.DateTime).Value = date3;
            cmdInsert.Parameters.Add("6", OracleType.VarChar, 64).Value = Session["tipoelab"].ToString();
            try
            {
                cmdInsert.ExecuteNonQuery();
                Label1.Text = "Richiesta inserita correttamente";
                connection.Close();
                return;
            }   
            catch(Exception ex){

              OracleCommand cmd = connection.CreateCommand();
              cmd.CommandType = CommandType.Text;
              cmd.CommandText = "update batchrequest set scheddate = :1, starttime = :2, stoptime = :3, ratecode = 'S'  where scheddate = :keyValue";
              cmd.Parameters.Add("1", OracleType.DateTime).Value = date1;
              cmd.Parameters.Add("2", OracleType.DateTime).Value = date2;
              cmd.Parameters.Add("3", OracleType.DateTime).Value = date3;
              cmd.Parameters.Add("keyValue", OracleType.DateTime).Value = date1;

              try
              {
                cmd.ExecuteNonQuery();
                connection.Close();
              }   
              catch(Exception ee){
                    Label1.Text = "Richiesta inserita correttamente";
                    return;
              }

              Label1.Text = "Richiesta inserita correttamente";

              return;
            }
        }