Vb.net Asp.net应用程序突然停止响应请求

Vb.net Asp.net应用程序突然停止响应请求,vb.net,iis,sql-server-2012,windows-server-2012,asp.net-4.5,Vb.net,Iis,Sql Server 2012,Windows Server 2012,Asp.net 4.5,您好,我是.net编程和IIS web部署配置的新手 目前,我有一个asp.net应用程序,它在IIS上使用Framework 4.5运行。在服务器上部署应用程序的第一个月,它运行得很好,也很顺利。然而,最近该应用程序出现了登录页面实际加载的问题,但是当用户输入他们的凭据时,页面加载计时器将显示并且消失,从而使用户陷入困境,无法登录 此外,服务器还经历了如下所述的安全程序: Windows强化(使用Windows Server 2012) SQL Server强化(SQL Server 2012

您好,我是.net编程和IIS web部署配置的新手

目前,我有一个asp.net应用程序,它在IIS上使用Framework 4.5运行。在服务器上部署应用程序的第一个月,它运行得很好,也很顺利。然而,最近该应用程序出现了登录页面实际加载的问题,但是当用户输入他们的凭据时,页面加载计时器将显示并且消失,从而使用户陷入困境,无法登录

此外,服务器还经历了如下所述的安全程序:

  • Windows强化(使用Windows Server 2012)
  • SQL Server强化(SQL Server 2012)和端口更改为8001
  • 此外,应用程序的体系结构是:

  • 应用程序部署在AMLWEB服务器中
  • SQL Server数据库位于AMLDB服务器中
  • 因此,连接实际上是通过服务器进行的,登录身份验证实际上是针对Active Directory进行的

    随附的屏幕截图:

    在事件查看器上选中时,会看到以下警告,提示可能是问题的原因:

    Event code: 3005 
    Event message: An unhandled exception has occurred. 
    Event time: 1/18/2015 5:27:15 PM 
    Event time (UTC): 1/18/2015 9:27:15 AM 
    Event ID: 2ac169fff7284e86b7b0844e5d9ccab1 
    Event sequence: 4 
    Event occurrence: 1 
    Event detail code: 0 
    
    Application information: 
        Application domain: /LM/W3SVC/1/ROOT/AML-1-130660468323976167 
        Trust level: Full 
        Application Virtual Path: /AML
        Application Path: D:\AML\ 
        Machine name: AMLWEB 
    
    Process information: 
        Process ID: 6756 
        Process name: w3wp.exe 
        Account name: IIS APPPOOL\.NET v4.5 
    
    Exception information: 
        Exception type: InvalidOperationException 
        Exception message: The ConnectionString property has not been initialized.
       at System.Data.SqlClient.SqlConnection.PermissionDemand()
       at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
       at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
       at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
       at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
       at System.Data.SqlClient.SqlConnection.Open()
       at DBManager.DBManager.OpenConnection(String DBStrConn, Int16 DBType) in C:\Users\TESS-HP003\Desktop\AML\ES_Library\DBManager\DBManager.vb:line 50
       at DBManager.DBManager.ExecuteSQLQuery_ReturnDS(String& ReturnErrorMsg, String SqlString, String DBConnString, Int16 DBType) in C:\Users\TESS-HP003\Desktop\AML\ES_Library\DBManager\DBManager.vb:line 190
       at SQLAdminQueryManager.AdminQueryManager.AdminQueryManager_Staff_Login.Staff_Login_Retreive(cor_staff AppEntity, String DbSQLConnString, String DbType, String& ReturnErrorMsg, Object& ReturnObjDataset, String AccessType) in C:\Users\TESS-HP003\Desktop\AML\ES_Library\SQLAdminQueryManager\AdminQueryManager.vb:line 65
       at Login_page_LDAP_Code.LoginButton_Click(Object sender, EventArgs e)
       at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
    
    
    
    Request information: 
        Request URL: https://amlweb/AML/Login_page.aspx 
        Request path: /AML/Login_page.aspx 
        User host address: 10.1.67.61 
        User:  
        Is authenticated: False 
        Authentication Type:  
        Thread account name: IIS APPPOOL\.NET v4.5 
    
    Thread information: 
        Thread ID: 10 
        Thread account name: IIS APPPOOL\.NET v4.5 
        Is impersonating: False 
        Stack trace:    at System.Data.SqlClient.SqlConnection.PermissionDemand()
       at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
       at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
       at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
       at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
       at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
       at System.Data.SqlClient.SqlConnection.Open()
       at DBManager.DBManager.OpenConnection(String DBStrConn, Int16 DBType) in C:\Users\TESS-HP003\Desktop\AML\ES_Library\DBManager\DBManager.vb:line 50
       at DBManager.DBManager.ExecuteSQLQuery_ReturnDS(String& ReturnErrorMsg, String SqlString, String DBConnString, Int16 DBType) in C:\Users\TESS-HP003\Desktop\AML\ES_Library\DBManager\DBManager.vb:line 190
       at SQLAdminQueryManager.AdminQueryManager.AdminQueryManager_Staff_Login.Staff_Login_Retreive(cor_staff AppEntity, String DbSQLConnString, String DbType, String& ReturnErrorMsg, Object& ReturnObjDataset, String AccessType) in C:\Users\TESS-HP003\Desktop\AML\ES_Library\SQLAdminQueryManager\AdminQueryManager.vb:line 65
       at Login_page_LDAP_Code.LoginButton_Click(Object sender, EventArgs e)
       at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
    
    
    Custom event details: 
    
    但是,连接字符串确实已正确设置,如下所示:

    Web.config

    <connectionStrings>
        <add name="AMLDBConnectionString" connectionString="Data Source=AMLDB01, 8001;Initial Catalog=AML_DB;integrated security=true; uid=sa; pwd=p@ssw0rd"/>
    </connectionStrings>
    
    实际执行以连接到DB的线路:

    blnReturnValue = objSqlQuery.Staff_Login_Retreive(objBE, GlobalSQLConnString, GlobalDBType, strErrorMsgReturn, returnDS, "S")
    
    调用的方法:

    Public Function Staff_Login_Retreive(ByVal AppEntity As BusinessEntities.cor_staff, _
                                                 ByVal DbSQLConnString As String, ByVal DbType As String, _
                                                 ByRef ReturnErrorMsg As String, ByRef ReturnObjDataset As Object, _
                                                 Optional ByVal AccessType As String = "S") As Boolean
                With AppEntity
                    SQlQuery = "SELECT * "
                    SQlQuery += " FROM cor_staff "
                    SQlQuery += " WHERE cor_staff.cor_userid =N'" & AppEntity.cor_userid & "'"
                End With
                '
                If AccessType.ToUpper = "R" Then
                    ReturnObjDataset = ExecuteSQLQuery_ReturnIDR(ReturnErrorMsg, SQlQuery, DbSQLConnString, DbType)
                Else
                    ReturnObjDataset = ExecuteSQLQuery_ReturnDS(ReturnErrorMsg, SQlQuery, DbSQLConnString, DbType)
                End If
                '
                If ReturnErrorMsg.Trim.Length = 0 Then
                    Return True
                Else
                    Return False
                End If
                '
            End Function
    
    已编辑

    由于上述代码实际上会在这一行中运行并被调用:

    ReturnObjDataset = ExecuteSQLQuery_ReturnDS(ReturnErrorMsg, SQlQuery, DbSQLConnString, DbType)
    
    连接将仅在此处打开:

    Public Function ExecuteSQLQuery_ReturnDS(ByRef ReturnErrorMsg As String, ByVal SqlString As String, ByVal DBConnString As String, ByVal DBType As Int16) As DataSet
            ReturnErrorMsg = ""
            Dim DS As New DataSet
            '
            If DBType = 1 Then
                Try
                    OpenConnection(DBConnString, DBType)
                    Dim sqlCmd As New SqlCommand(SqlString, sqlConn)
                    sqlCmd.CommandTimeout = 0
                    Dim sqlDaAdp As New SqlDataAdapter(sqlCmd)
                    sqlDaAdp.Fill(DS)
                    sqlCmd = Nothing
                    sqlDaAdp = Nothing
                    CloseConnection(DBType)
                    Return DS
                Catch ex As SqlException
                    If ex.Number = 18456 Or ex.Number = 4060 Then
                        ReturnErrorMsg = "Database Connection Error >> Error No : " & ex.Number
                    Else
                        ReturnErrorMsg = "SQL Statement Error >> Error No : " & ex.Number
                    End If
                    CloseConnection(DBType)
                    Return Nothing
                End Try
            ElseIf DBType = 3 Then
                Try
                    OpenConnection(DBConnString, DBType)
                    Dim oledbCmd As New OleDbCommand(SqlString, oleDbconn)
                    Dim oledbDaAdp As New OleDbDataAdapter(oledbCmd)
                    oledbDaAdp.Fill(DS)
                    oledbDaAdp = Nothing
                    oledbDaAdp = Nothing
                    CloseConnection(DBType)
                    Return DS
                Catch ex As OleDbException
                    If ex.ErrorCode = -2147217887 Then
                        ReturnErrorMsg = "Database Connection Error >> Error Code : " & ex.ErrorCode
                    Else
                        ReturnErrorMsg = "SQL Statement Error >> Error Code : " & ex.ErrorCode
                    End If
                    CloseConnection(DBType)
                    Return Nothing
                End Try
            End If
            '
            Return Nothing
            '
        End Function
    
    开放式连接方法:

    Public Sub OpenConnection(ByVal DBStrConn As String, ByVal DBType As Int16)
            Try
                If DBType = 1 Then
                    sqlConn = New SqlConnection(DBStrConn)
                    If sqlConn.State = ConnectionState.Closed Then
                        sqlConn.Open()
                    Else
                        sqlConn.Close()
                        sqlConn.Open()
                    End If
                ElseIf DBType = 3 Then
                    oleDbconn = New OleDbConnection(DBStrConn)
                    If oleDbconn.State = ConnectionState.Closed Then
                        oleDbconn.Open()
                    Else
                        oleDbconn.Close()
                        oleDbconn.Open()
                    End If
                End If
                '
            Catch ex As Exception
                Throw
            End Try
    
        End Sub
    
    编辑部分结束

    有人知道为什么会出现这种例外吗

    到目前为止,我已经做了以下工作来实际调试此问题:

  • 重新启动IIS
  • 重新启动应用程序池
  • 回收应用程序池(特别是每12小时、上午8点和下午8点)
  • 重新启动SQL Server服务
  • 上述措施都不起作用。但是,当我实际尝试从特定楼层(即安全团队楼层)访问应用程序时,应用程序实际上开始正常运行,其他人也可以实际访问应用程序

    请帮帮我,我对这个问题简直是疯了

    它是否与我的部署方法、iis配置或编程有关,我愿意听取建议


    感谢您抽出时间。

    您是否明确打开了连接?先生,这个异常看起来您没有担心,但是您的意思是如何明确地打开连接?我已经相应地编辑了这篇文章,添加了连接被打开的代码。谢谢。请尝试以下操作以获取连接字符串。。。ConfigurationManager.ConnectionString(“AMLDBConnectionString”).ConnectionStringSir,它是否与我包含的上述代码不同?。。GlobalSQLConnString=ConfigurationManager.ConnectionString(“AMLDBConnectionString”).ToString。。对不起,我是个新手。您的连接字符串表示受信任(integrated security=true)和SQL(uid=sa)身份验证。你用哪一种?您只能使用一个。2.您的错误消息指向桌面上的VB文件。这就是你部署web应用的地方吗?简言之,服务器加固可能已打开防火墙,这反过来意味着您无法连接。远程连接到web服务器,并确认(使用UDL或ODBC)是否可以连接到SQL server
    Public Sub OpenConnection(ByVal DBStrConn As String, ByVal DBType As Int16)
            Try
                If DBType = 1 Then
                    sqlConn = New SqlConnection(DBStrConn)
                    If sqlConn.State = ConnectionState.Closed Then
                        sqlConn.Open()
                    Else
                        sqlConn.Close()
                        sqlConn.Open()
                    End If
                ElseIf DBType = 3 Then
                    oleDbconn = New OleDbConnection(DBStrConn)
                    If oleDbconn.State = ConnectionState.Closed Then
                        oleDbconn.Open()
                    Else
                        oleDbconn.Close()
                        oleDbconn.Open()
                    End If
                End If
                '
            Catch ex As Exception
                Throw
            End Try
    
        End Sub