2012-03-08 3 views
1

У меня есть приложение ASP/C# (4.0), которое было запущено на моей машине в течение нескольких дней. Судя по всему, в середине тестирования я получил эту ошибку. Приложение, похоже, «ждет» короткого периода, прежде чем выбросить ошибку. Я смог получить доступ к серверу с помощью SQL-Management/Web/RDC/Ping. Я пробовал iisreset, перерабатывал пул приложений и запускал/останавливал пул приложений. Ничто не избавилось от ошибки, пока я не перезагрузился. Я предполагаю, что это имеет какое-то отношение к пулу соединений, и я полагаю, что я делаю что-то неправильно. Эта проблема также повлияла на мини-i, которые VS запускает для отладки/etc.Ошибка фантома для подключения DB

В настоящее время я не могу повторить это, но я действительно ненавижу проблемы, которые «фиксируют себя». Поскольку в настоящее время это не может быть протестировано, я просто ищу направление, а некоторые идеи могут возникнуть снова.

Спасибо :-) информации

Исключение: Тип исключения: SqlException Сообщение об исключении: при установлении соединения с SQL Server произошла ошибка сети связанных или экземпляра конкретных. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (поставщик: поставщик Named Pipes, ошибка: 40 - не удалось открыть подключение к SQL Server) в System.Data.SqlClient.SqlInternalConnection.OnError (исключение исключений SqlException, логическое разрытие соединения) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () на System.Data.SqlClient.TdsParser.Connect (serverInfo serverInfo, SqlInternalConnectionTds connHandler, булевой ignoreSniOpenTimeout, Int64 timerExpire, булевой зашифровать, Boolean trustServerCert, Boolean integratedSecurity) в System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin (serverInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject) в System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover (ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlCo nnectionString connectionOptions, TimeoutTimer тайм-аут) на System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist (SqlConnection owningObject, TimeoutTimer тайм-аут, SqlConnectionString connectionOptions, струнного новый_пароль, булева redirectedUserInstance) в System.Data.SqlClient.SqlInternalConnectionTds..ctor (идентичности DbConnectionPoolIdentity, SqlConnectionString connectionOptions, Object providerInfo, String новый_пароль, SqlConnection owningObject, Boolean redirectedUserInstance) в System.Data.SqlClient.SqlConnectionFactory.CreateConnection (опции DbConnectionOptions, объект poolGroupProviderInfo, DbConnectionPool бассейн, DbConnection owningConnection) в System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection (DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions) в System.Data.P roviderBase.DbConnectionPool.CreateObject (DbConnection owningObject) на System.Data.ProviderBase.DbConnectionPool.UserCreateRequest (DbConnection owningObject) на System.Data.ProviderBase.DbConnectionPool.GetConnection (DbConnection owningObject) в System.Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection) на System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection outerConnection, DbConnectionFactory ConnectionFactory) на System.Data.SqlClient.SqlConnection.Open() в MyApp.Default.BeginAsyncGetState (Object отправителя, EventArgs е, AsyncCallback cb, Состояние объекта) в C: ... \ Default.aspx.cs: строка 65 в System.Web.UI.Page.PageAsyncInfo.CallHandlersPossiblyUnderLock (Boolean onPageThread) на System.We b.UI.Page.PageAsyncInfo.CallHandlersCancellableCallback (состояние объекта) в System.Web.HttpContext.InvokeCancellableCallback (WaitCallback callback, состояние объекта) в System.Web.UI.Page.PageAsyncInfo.CallHandlers (Boolean onPageThread)

public partial class Default : System.Web.UI.Page 
    { 

     SqlCommand _sqlCMD; 
     SqlConnection _sqlConn = null; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      String strStateCode = Request.QueryString["State"] ?? String.Empty; 

      if (!Page.IsPostBack || !(Session["vchCurrentStateID"] ?? String.Empty).Equals(strStateCode)) 
      { 
       AddOnPreRenderCompleteAsync(
          new BeginEventHandler(BeginAsyncGetState), 
          new EndEventHandler(EndAsyncGetState) 
         ); 
      } 
     } 

     protected IAsyncResult BeginAsyncGetState(object sender, EventArgs e, AsyncCallback cb, object state) 
     { 
      String ConString = System.Configuration.ConfigurationManager.ConnectionStrings["ReportServer"].ConnectionString; 
      _sqlConn = new SqlConnection(ConString); 
      _sqlCMD = new SqlCommand(); 
      SqlDataReader myReader = null; 

      _sqlCMD.Connection = _sqlConn; 
      _sqlCMD.CommandType = CommandType.StoredProcedure; 

      String strStateCode = Request.QueryString["State"] ?? String.Empty; 

      IAsyncResult tmpResult = null; 
      try 
      { 
       _sqlConn.Open(); 

       _sqlCMD.CommandText = "dbo.StateLevel_gState"; 
       _sqlCMD.Parameters.AddWithValue("@vchShortCode", strStateCode); 

       tmpResult = _sqlCMD.BeginExecuteReader(cb, state); 
      } 
      catch (Exception ex) 
      { 
       if (_sqlConn != null) 
        _sqlConn.Close(); 
       if (_sqlCMD != null) 
        _sqlCMD.Dispose(); 
       if (myReader != null) 
        myReader.Dispose(); 

       throw; 
      } 
      return tmpResult; 
     } 

     void EndAsyncGetState(IAsyncResult ar) 
     { 
      try 
      { 
       using (SqlDataReader myReader = _sqlCMD.EndExecuteReader(ar)) 
       { 
        if (myReader.Read()) 
        { 
         lblStateName.Text = myReader.GetString(1); 
         Session["iCurrentStateID"] = myReader.GetInt32(0); 
         Session["vchCurrentStateID"] = Request.QueryString["State"]; 
         Session["vchReportLocation"] = myReader.GetString(3); 
        } 
        else 
        { 
         lblStateName.Text = "Invalid State"; 
        } 
       } 
      } 
      finally 
      { 
       if (_sqlConn != null) 
        _sqlConn.Close(); 

       if (_sqlCMD != null) 
       { 
        _sqlCMD.Dispose(); 
       } 
      } 
     } 
     } 

ответ

1

Похоже, его вопрос именованный трубы, и это может быть изменение на сервер базы данных, которые вы не знаете. Посмотрите на это: http://blog.sqlauthority.com/2009/05/21/sql-server-fix-error-provider-named-pipes-provider-error-40-could-not-open-a-connection-to-sql-server-microsoft-sql-server-error/

Надеется, что это помогает

+0

Хотя очень информативный, я не думаю, что эта ссылка применяется. В нем говорится об изменении стороны SQL-сервера. Я знаю, что сервер работает правильно, поскольку другие компьютеры подключаются к нему совершенно нормально, и проблема была решена при перезагрузке. Другая интересная часть - мое веб-приложение работает отлично, а затем резко перестало работать, пока я его использовал. Я вошел в систему, вышел из системы и попытался войти в систему только для того, чтобы приветствовать эту ошибку. Я все еще давал +1, поскольку эта ссылка была полезной для кого-то. – Bengie

0

Named Pipes последнего протокол провайдер SQL пытается, если он использует несколько протоколов, так что вы можете просто иметь общую проблему аутентификации. Я видел описанную вами ошибку при подключении к серверам с использованием разных учетных записей Windows путем сопоставления дисков или использования «Запуск от имени».

Один трюк, который может работать, - создать псевдоним для вашего сервера в файле etc/hosts и использовать его в строке подключения. Это помогает сохранить учетные данные для совместного использования между процессами.

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