随机错误500 "ConnectionString属性尚未初始化"

4

自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()  

如果您需要进一步的信息,请不要犹豫,随时向我提问。我对此感到困惑......非常乐意接受任何帮助。
谢谢!

最好的问候,
凯文


你的代码中是否到处都有对 ConfigurationManager.ConnectionStrings("BosstobossDbBase").ConnectionString 的调用?或者你已经进行了封装? - Aheho
FYI 保存 web.config 文件会导致应用程序池回收。你是否有内存容量问题? - Brock Hensley
2个回答

0
我会更改 web.config 文件为以下内容,看看是否有帮助:
 <connectionStrings> 
     <remove name="BosstobossDbBase" />
     <add name="BosstobossDbBase" connectionString="Server=server_ip; Database=database_name;User=login; password=pass" providerName="System.Data.SqlClient"/> 
 </connectionStrings> 

谢谢。我会尝试这个方法,如果问题仍然存在,我会再联系你的。 - Kevin
很遗憾,在夜间仍然出现了connectionString错误,具有相同的行为(网站工作了几个小时,然后变得无法访问,直到我执行我帖子中描述的三种方法之一):( - Kevin

0

我长时间以来一直面临着同样的问题。 我有一个在ASP.Net v2.0上运行正常的应用程序,突然有一天我开始收到这个错误。

我通过以下方式解决了它:

打开inetmgr并单击主服务器。 在“功能视图”中,单击“连接字符串”。 在我的情况下,有两个连接字符串被所有应用程序继承。 结果其中一个字符串无效,当我删除它时,一切都恢复正常。

那台机器上的一个用户在某个时候添加了该字符串,导致所有应用程序都崩溃了。

希望这可以帮助到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接