2013-11-07 7 views
0

В моей странице состоит из ретранслятора и связать некоторые данные с использованием процедуры сохранения с SQL Server 2008.Подключение не было закрыто ошибка для тестирования нагрузки Visual Studio

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; 

Это соединение, которое будет общим для всего приложения.

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

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

Все работает нормально, когда я проверяю сам. Но когда я бегу Затерянный тест с помощью 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 

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

+0

Как вы определяете 'Global.connD2W'? Если вы используете какое-то глобальное соединение, это, вероятно, не сработает. – Szymon

+0

@Szymon У меня есть обновление части подключения, любезно совет. – My2ndLovE

+1

@ Шимон, вы правы. Ошибки исходят из глобального соединения. Итак, я в конечном итоге объявляю индивидуальное соединение для каждой функции. – My2ndLovE

ответ

1

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

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

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

Смежные вопросы