IIS打开与SQL的额外连接

时间:2019-07-18 19:56:21

标签: asp.net iis

在我的ASP.Net MVC Web-API中,我从SQL Server获取数据。当我从Visual Studio中运行该连接时,该连接正常工作并始终返回正确的数据,但是当我将相同的WebSite添加到IIS并从那里运行它时,有时它仍然可以工作,但是在大多数情况下,甚至从一开始它就说:连接未关闭,连接当前状态为“打开”。我认为IIS引起了问题。

我尝试过的方法: 删除并重新安装IIS。 从其他池运行应用程序 将连接字符串更改为“ integrated Security = true”,但随后显示

“用户'IIS APPPOOL \ DefaultAppPool'登录失败”。

注意:

  

SQL Server 2014   IIS = 10.0   Windows 10

这是代码。

public class DAL
{
    static string connectionString = WebConfigurationManager.ConnectionStrings["SubsInfoConnectionString"].ConnectionString;
    static SqlConnection sqlConn = new SqlConnection(connectionString);


    public static AppSubscriber isAuthorized(string ICCID)
    {
        AppSubscriber appSubscriber = new AppSubscriber();

        int[] result = new int[]{0, 0};
        SqlCommand sqlCommand = new SqlCommand("spIsAuthorized4AndroidApp", sqlConn);
        sqlCommand.CommandType = CommandType.StoredProcedure;
        sqlCommand.Parameters.AddWithValue("@ICCID", ICCID);

        try
        {
            sqlConn.Open();
            SqlDataReader dataReader = sqlCommand.ExecuteReader();
            if (dataReader.Read())
            {

                appSubscriber.fullName = dataReader.GetString(0);
                appSubscriber.mNumber = dataReader.GetString(1);
                appSubscriber.ICCID = dataReader.GetString(2);
                appSubscriber.active = dataReader.GetBoolean(3);
                appSubscriber.expiryDate = dataReader.GetDateTime(4).Date.ToString("dd/MMM/yyy");
                appSubscriber.remainingDays = dataReader.GetInt32(5);

            }
        }
        catch (Exception e)
        {
            appSubscriber.fullName = e.Message;

        }
        finally
        {
            sqlConn.Close();
        }
        return appSubscriber;
    }

这是连接字符串

connectionString="data source=Haroon-PC;integrated security=false;Initial Catalog=myDatabase; User ID = user; Password = password; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient"

1 个答案:

答案 0 :(得分:0)

线程问题。您有两个请求同时运行相同的代码。您的第二个线程已执行“ sqlConn.Open();”。在“ sqlConn.Close();”之前从第一个开始。结果,您正在尝试打开已经打开的内容。

因此您可以 1)确保一次仅一个线程运行代码(确保在下一个线程打开之前关闭连接) 2)遵循最佳做法:

using (SqlConnection connection = new SqlConnection(connectionString))
{  
    connection.Open();  
    // Do work here; connection closed on following line.  
}

值得一读:https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlconnection?view=netframework-4.8