2015-10-19 2 views
1

Я реализую службу AJAX, которая запускает длительный процесс и получает статус через setInterval Javascript. Полный код здесь http://blog.robseder.com/2013/10/18/executing-a-long-running-process-from-a-web-page/Код C# никогда не попадает (зависает) при развертывании в IIS

AjaxServices.asmx создает новый статический экземпляр моего рабочего класса. Рабочий класс обновляет свой прогресс. Проблема в том, что все работает так, как должно локально. Но он зависает и никогда не проходит мимо линии при развертывании на сервере. Я использую IIS 7.

using(SqlConnection conn = new SqlConnection(string)) 
using(SqlCommand command = conn.CreateCommand()) 
{ 
    //... 
    if (conn.State != System.Data.ConnectionState.Open) 
     conn.Open() 
} 

AjaxServices.asmx/GetStatus работает отлично ... Она возвращает статус кружил ниже (HTTP 200). Проблема в том, что он не ударил мой Sql-код или блок try-catch вообще.

enter image description here

Код класса Worker Отрывок

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString())) 
{ 
    UpdatePercent(6, 7, "Starting (inside USING)...", runId); 

    #region first step 
    using (SqlCommand command = conn.CreateCommand()) 
    { 
     command.CommandType = System.Data.CommandType.StoredProcedure; 
     command.CommandText = "[dbo].[sp name]"; 

     //parameters... etc... 

     UpdatePercent(7, 8, "Parameters added, connection state: " + connectionState, runId); 

     //code doesn't proceed past this line 
     if (conn.State != System.Data.ConnectionState.Open) 
      conn.Open(); 

     UpdatePercent(5, 10, "about to enter try-catch...", runId); 

     try 
     { 
      UpdatePercent(5, 10, "Starting run insertion...", runId); 
      command.ExecuteNonQuery(); 
      runId = int.Parse(command.Parameters["@RunID"].Value.ToString()); 
      UpdatePercent(10, 15, "Inserted run dimension...", runId); 
     } 
     catch(SqlException exc) 
     { 
      UpdatePercent(100, 100, exc.Message, runId); 
     } 
    } 
+0

Если соединение изначально закрыто, то что должно его открыть? Это было бы ложно, так как государство закрыто. –

+0

Висит ли это, или это исключение? Моя кишка сказала бы, что это последняя. –

+0

@JBKing Извините, я имел в виду 'conn.State! = Open' ... @ Майкл Гюнтер, он висит. В противном случае блок 'catch' будет' UpdatePercent' соответствующим образом. – Kyle

ответ

1

Собирают идеи из приведенных выше замечаний в ответ здесь:

Это должны был быть введен в Try/улов заметить SqlException был выброшен, что было проблемой подключения.

//code doesn't proceed past this line 
    if (conn.State != System.Data.ConnectionState.Open) 
     conn.Open();