2012-03-08 31 views
1

私のマシンで数日間稼働していたASP/C#(4.0)アプリケーションがあります。突然、テストの途中で、このエラーが発生しました。アプリは、エラーを投げる前に短期間 "待つ"ようです。 SQL-Management/Web/RDC/Ping経由でサーバーにアクセスできました。私はiisresetを試し、アプリケーションプールをリサイクルし、アプリケーションプールを開始/停止しました。再起動するまで、エラーを取り除くことはできません。私はそれが接続プールと関係があると仮定しており、私は何か間違っていると思います。この問題は、VSがデバッグなどのために起動するmini-iisにも影響を与えました。DB接続のファンタムエラー

私は現在それが再び起こることはできませんが、私は本当に "自分自身を修正する"問題を嫌います。これは現在テストすることができないので、私はちょうど方向を探しているし、いくつかのアイデアはそれが再び現れます。

例外情報:-)

ありがとう: 例外の種類:SqlExceptionが 例外メッセージ:SQL Serverへの接続を確立しながら、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認します。 (プロバイダー:名前付きパイププロバイダー、エラー:40 - SQL Serverへの接続を開けませんでした)System.Data.SqlClient.SqlInternalConnection.OnError(SqlException例外、Booleanブレイク接続)の System.Data.SqlClient.TdsParser.ThrowExceptionAndWarningの )System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo、SqlInternalConnectionTds connHandler、Boolean ignoreSniOpenTimeout、Int64 timerExpire、Boolean encrypt、Boolean trustServerCert、Boolean integratedSecurity) System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo、String)で を返します。 SqlConnectionの所有者) でSystem.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo、String newPassword、Boolean redirectedUserInstance、SqlConnection owningObject、SqlCo System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentityアイデンティティ、SqlConnectionStringでSystem.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnectionのowningObject、TimeoutTimerタイムアウト、SqlConnectionString connectionOptions、文字列NEWPASSWORD、ブールredirectedUserInstance) でconnectionOptions、TimeoutTimerタイムアウト) をnnectionString connectionOptions、オブジェクトproviderInfo、文字列NEWPASSWORD、SqlConnectionのowningObject、ブールredirectedUserInstance)System.Data.SqlClient.SqlConnectionFactory.CreateConnectionで (DbConnectionOptionsオプション、poolGroupProviderInfo、DbConnectionPoolプール、たDbConnection owningConnectionオブジェクト)System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnectionで ( DbConnection owningConnection、DbConnectionPoolプール、DbConnectionOptionsオプション) at System.Data.P System.Data.ProviderBase.DbConnectionFactory.GetConnectionでSystem.Data.ProviderBase.DbConnectionPool.GetConnection(たDbConnection owningObject) でSystem.Data.ProviderBase.DbConnectionPool.UserCreateRequest(たDbConnection owningObject) でroviderBase.DbConnectionPool.CreateObject(たDbConnection owningObject) MyApp.Default.BeginAsyncGetStateでSystem.Data.SqlClient.SqlConnection.OpenでSystem.Data.ProviderBase.DbConnectionClosed.OpenConnection(たDbConnection outerConnection、DbConnectionFactoryはconnectionFactory)で(たDbConnection owningConnection) () (オブジェクト送信者、EventArgsの電子、AsyncCallback cb、Object state)C:... \ Default.aspx.cs:行65 at System.Web.UI.Page.PageAsyncInfo.CallHandlersPossiblyUnderLock(Boolean onPageThread) at System.We System.Web.HttpContext.InvokeCancellableCallback(WaitCallbackコールバック、オブジェクト状態)の で、System.Web.UI.Page.PageAsyncInfoの にb.UI.Page.PageAsyncInfo.CallHandlersCancellableCallback(オブジェクト状態)CallHandlers(ブール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サーバー側を変更することについて話します。私はサーバが正常に動作していることを知っています。他のコンピュータが完全に正常に接続し、再起動したときに問題が解決されたためです。もう一つの興味深い部分は、私のWebアプリケーションがうまく動いていて、それを使っている間に突然動作を停止したことです。私はログインしてログアウトし、このエラーで挨拶されるためだけにログインを再試行しました。私はそのリンクが誰かにとって有益だと考えて+1を与えました。 – Bengie

0

名前付きパイプをホープは、あなただけの一般的な認証の問題を有することができるので、それは、複数のプロトコルを使用している場合は、SQLプロバイダがしようと最後のプロトコルです。ドライブをマッピングしたり、「実行」を使用して、異なるWindowsアカウントを使用してサーバーに接続する際に発生したエラーを確認しました。

あなたのサーバーのエイリアスをetc/hostsファイルに作成し、接続文字列でそのエイリアスを使用する方法があります。これは、資格情報をプロセス間で共有するのを助けます。