Зачем помечать ошибку Истекло время ожидания при публикации моего веб-приложения в IIS - PullRequest
0 голосов
/ 25 октября 2019

Я надеюсь, что вы можете помочь мне с этой проблемой, так как я не понимаю, почему это так, я ценю вашу помощь.

У меня есть веб-приложение в веб-формах asp.net, когда я запускаю его на локальном компьютере. машина работает отлично, но когда я публикую его на сервере с IIS, это помечает ошибку, подобную следующей:

Истекло время ожидания. Период ожидания истек до получения соединения
из пула. Это могло произойти из-за того, что все пул
соединений использовались и был достигнут максимальный размер пула.

Насколько я понимаю, это относится к открытым соединениям.

Это мой код, где ошибка помечает меня. Я работаю с тремя слоями в asp.net и Visual Studio 2008.

Ошибка возникает при выполнении моего набора данных на уровне доступа к данным при отправке метода соединения для вызова.

Код уровня доступа к данным.

private string option_connectionchain()
{
    string connection = ConfigurationManager.ConnectionStrings["db_Sales"].ConnectionString;

}

  private SqlCommand connection(string commantext, SqlParameter commandparamaters)
{

    string connection = option_connectionchain();
    SqlConnection con = new SqlConnection(connection);          

        SqlCommand cmd = new SqlCommand(commantext, con);               
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(commandparamaters);           

        return cmd;           
}

   //** This is my dataset where the error marks me. 
  public DataSet ExecuteDataset(string commantext, SqlParameter commandParameter)
{
    DataSet ds = new DataSet();
    try
    {
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = connection(commantext, commandParameter);
        da.Fill(ds);
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return ds;
}

Это мой класс сущностей.

 public  class EUser
{

string user;
string user_name;
string position;
string location;
string roles;




public string User
{
    get { return user; }
    set { user = value; }
}


public string User_name
{
    get { return user_name; }
    set { user_name = value; }
}


public string Position
{
    get { return position; }
    set { position = value; }
}

public string Location
{
    get { return location; }
    set { location = value; }
}      

public string Roles
{
    get { return roles; }
    set { roles = value; }
  }
 }

Это код бизнес-логики

EUser uEntity = new EUser();

 public EUser Query_data(string User)
{
    DataSet data = new DataSet();
    DataTable user_data = new DataTable();

    SqlParameter sqlparameter = new SqlParameter("@User", SqlDbType.VarChar);
    sqlparameter.Value = User; 

    data = _connection.ExecuteDataset("Permissions_Menu", sqlparameter);

    if (data.Tables.Count > 0 )
        {
            if (data.Tables[0].Rows.Count > 0)
            {
                user_data = data.Tables[0];

                DataRow row = user_data.Rows[0];
                uEntity.User = Convert.ToString(row[1]);
                uEntity.User_name = Convert.ToString(row[2]);
                uEntity.Position = Convert.ToString(row[3]);
                uEntity.Location = Convert.ToString(row[4]);
                uEntity.Roles = Convert.ToString(row[5]);
            }
            else 
            {
                uEntity.User = "";
                uEntity.User_name = "";
                uEntity.Position = "";
                uEntity.Location = "";
                uEntity.Roles = "";
            }                   

        }

    else
    {

                uEntity.User = "";
                uEntity.User_name = "";
                uEntity.Position = "";
                uEntity.Location = "";
                uEntity.Roles = "";

    }


    return uEntity;


}

Это код в слое транзакций

public EUer Query_data(string user)
{
    return connection.Consulta_Datos(user);        
}

Наконец, это мой код в слое презентации

   if (!IsPostBack)
    {
        Transaction t = new Transaction();
        EUser user_entity = new EUser();
        System.Security.Principal.WindowsIdentity user = System.Security.Principal.WindowsIdentity.GetCurrent();

        user_entity = t.Query_data(user.Name);


        if (user_entity.User == "" && user_entity.User_name == "" && user_entity.Position == "" && user_entity.Location == "")
        {
            Response.Redirect("redirect to an external page",true);
        }

        else
        {
            lblUserWindows.Text = user_entity.User;
            lblUser_name.Text = user_entity.User_name;
            lblPosition.Text = user_entity.Position;
            lblLocation.Text = user_entity.Location;

        }


    }

Как вы упомянули выше, моя ошибка - это когда я запускаю набор данных, хотя я не понимаю, почему он показывает эту ошибку во время публикации, поскольку перед публикацией он мне не показывался.

Может кто-нибудь помочь мне с любым решением?

1 Ответ

0 голосов
/ 28 октября 2019

Как говорит Шон Ланге, вы не закрываете соединение sql в своих кодах, поэтому столкнулись с проблемой утечки из пула. Я предлагаю вам объединить соединение и метод ExecuteDataset и закрыть соединение sql после получения набора данных из базы данных.

Коды, как показано ниже:

    private string option_connectionchain()
    {
     string connection = ConfigurationManager.ConnectionStrings["db_Sales"].ConnectionString;
        return connection;
    }


    public DataSet ExecuteDataset(string commantext, SqlParameter commandparamaters)
    {


        DataSet ds = new DataSet();
        string connection = option_connectionchain();
        using (SqlConnection con = new SqlConnection(connection))
        {
            SqlCommand cmd = new SqlCommand(commantext, con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(commandparamaters);
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            da.Fill(ds);
        } 
        return ds;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...