Соединение не было закрыто ошибкой для тестирования нагрузки Visual Studio

StackOverflow https://stackoverflow.com/questions/19826729

Вопрос

На моей странице состоит ретранслятор и связывает некоторые данные, используя процедуру хранилища от SQL Server 2008.

rptTour.DataSource = GetData();
rptTour.DataBind();

Привязка данных getData ()

SqlCommand cmdSelectAllMatch = new SqlCommand("sp_sel_Tour", Global.conn);
    SqlDataReader dtrSelectAllMatch = null;
    Collection<TourBO> TourData = new Collection<TourBO>();

    try
    {
        Global.connD2W.Open(); //error here, line 23
        cmdSelectAllMatch.CommandType = System.Data.CommandType.StoredProcedure;
        dtrSelectAllMatch = cmdSelectAllMatch.ExecuteReader();

        while (dtrSelectAllMatch.Read())
        {
            TourBO Tour = new TourBO();
            TourID = Convert.ToInt16(dtrSelectAllMatch[dtrSelectAllMatch.GetOrdinal("ID")]);
            Tour.Name = dtrSelectAllMatch[dtrSelectAllMatch.GetOrdinal("Name")].ToString();


            TourData.Add(Tour);
        }
    }
    catch(Exception ex)
    {
        Global.Log(ex.ToString());
    }
    finally
    {
        Global.connD2W.Close();            
    }

    if (dtrSelectAllMatch != null)
    {
        dtrSelectAllMatch.Close();
    }
    return TourData;

Это SQLConnection, который будет делиться среди всего приложения.

public static SqlConnection connD2W = new SqlConnection(ConfigurationManager.ConnectionStrings["D2WConnectionString"].ConnectionString);

Он только что прочитал все данные от чтения данных и назначил пользовательскую коллекцию и передает обратно в ретранслятор.

Все работает нормально, когда я испытываю сам. Но когда я запускаю The Loss Test с помощью Visual Studio (20 пользователей и запускаю в течение 2 минут), я получил ошибки ниже в моем файле журнала ошибок (та же ошибка, сохраняющая повторение)

Log Entry : 9:59:05 AM Thursday, November 07, 2013
:System.InvalidOperationException: The connection was not closed. The connection's current state is connecting.
at System.Data.ProviderBase.DbConnectionBusy.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at TourDAL.GetAllScheduledMatch() in c:\Documents\Visual Studio 2010\WebSites\test\App_Code\DAL\TourDAL.cs:line 23

Значит ли это, что эта функция не позволила нескольким пользователям доступ к ней одновременно? Любой способ решить это?

Это было полезно?

Решение

Если вы используете глобальное соединение (например, определяется как глобальная переменная или статическая переменная), это не будет работать в среде, где у вас есть несколько потоков, работающих одновременно (например, на веб -сервере).

Причина, по которой все потоки пройдут один и тот же код. Первый откроет соединение, и оно останется открытым для всех остальных.

Лучше всего определить соединение локально, открыть и закрыть его, как только работа сделана.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top