自2010年7月我们的网站上线以来,我一直使用同样的ConnectionString,并且从未遇到过连接和与数据库交互的任何问题。
然而,自2011年7月以来,我一直遇到随机的“ConnectionString属性未初始化”的错误。
- 这个错误是如何发生的?
我们的网站在可变时间段内运行良好(从几小时到几周,尽管我注意到今天更多的是几小时),意味着与数据库的查询工作正常,人们可以登录等。然后,在某个时刻,ConnectionString错误就会发生。
从此刻开始,我们的网站变得无法访问,并且无论我们尝试访问哪个页面都会返回此错误。
有时候,经过10-15分钟,我们的网站会自行恢复正常,并保持正常运行,直到错误再次出现。但大多数情况下,我必须使用以下三种方法之一才能使其重新工作:
1)再次保存Web Config文件,不添加/更改任何内容
2)在IIS中停止和启动站点
3)重新启动服务器
我们的服务器上还有开发站点。然而,它从未向我抛出过这种随机错误。生产站点和开发站点之间唯一的区别是不同的数据库、SQL用户和Web Config中的身份验证模式(生产 = Windows,开发 = forms)
- 自2010年7月以来我们的服务器有哪些变化?
.net framework在2011年3月升级到4。
自2011年6月以来,网站物理目录已从原始IIS目录移至同一服务器上的另一个分区(基本上只是对站点目录进行了剪切/粘贴,并在IIS中更改了应用程序物理路径)。
每次更新Windows Server 2008时都会应用更新。
- 我尝试过什么来解决这个问题?
1)首先,我尝试将我们的站点目录放回IIS inetpub/wwwroot中。但是没有任何改变。
2)我尝试将与我们的开发站点相同的目录权限设置为我们的生产站点。但仍然没有任何改变。
3)我比较了开发/生产两个应用程序池,但没有任何区别。
4)当然,我在许多网站上搜索,看是否有人也遇到了这个问题。我找到的与我的问题最相关的主题是:
Web.config - ConnectionString property has not been initialized
但是,我不明白如何检查“随机应用于我的Web根文件夹的权限”。
- 当错误发生时主页的堆栈跟踪 :
at System.Data.SqlClient.SqlConnection.PermissionDemand()
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
at Database.listeCategories(enuTypeCategorie typeCategorie, enuOrdre ordre, enuActif actif, Boolean withFirstRow, Boolean libTous)
at user_controls_criteresAnnonce.set_secteur(Int32 value)
at user_controls_criteresAnnonce.initValues()
at _default.Page_Load(Object sender, EventArgs a)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
由于错误在弹出时涉及任何页面,因此源始终不同。
- 系统信息:
开发和生产站点运行在Windows Server 2008 SP2和IIS 7上。
数据库在SQL Server 2005下运行。
.NET框架为4(ASP版本写在服务器管理器中:ASP.NET 4.0.30319.0)。
ConnectionString存储在Web Config文件中,格式如下:
<connectionStrings>
<add name="BosstobossDbBase" connectionString="Server=server_ip; Database=database_name; User=login; password=pass" providerName="System.Data.SqlClient"/>
</connectionStrings>
在尝试进行任何数据库连接之前,将connectionString赋值给一个SqlConnection对象,如下所示(conn在类中声明):
conn = New SqlConnection()
conn.ConnectionString = ConfigurationManager.ConnectionStrings("BosstobossDbBase").ConnectionString
conn.Open()
如果您需要进一步的信息,请不要犹豫,随时向我提问。我对此感到困惑......非常乐意接受任何帮助。
谢谢!
最好的问候,
凯文