【发布时间】:2011-12-10 04:47:30
【问题描述】:
自从我们的网站于 2010 年 7 月上线以来,我一直在使用相同的 ConnectionString,并且在连接和与我们的数据库交互时从未遇到任何问题。
但是,自 2011 年 7 月以来,我不断收到随机的“ConnectionString 属性尚未初始化”错误。
- 错误是如何发生的?
我们的网站在可变的时间段内运行良好(从几个小时到几个星期,虽然我注意到今天更多几个小时),这意味着数据库查询工作正常,人们可以登录等等。而且然后,在某些时候,就会发生 connectionString 错误。
从这一刻起,我们的网站变得无法访问,并且对于我们尝试访问的任何页面都不断返回此错误。
有时,在 10 到 15 百万之后,我们的网站会自行恢复在线,并且运行良好,直到再次弹出错误。但大多数时候,我必须使用以下 3 种方法之一才能使其再次工作:
1) 再次保存 Web Config 文件,无需添加/更改任何内容
2) 在 IIS 中停止和启动站点
3) 重启服务器
我们的服务器上也有开发站点。但是,它从未向我抛出这个随机错误。我们的开发站点和生产站点的唯一区别是Web Config中的数据库、sql用户和身份验证模式不同(生产= Windows,开发=表单)
- 自 2010 年 7 月以来,我们的服务器发生了什么变化?
.net 框架于 2011 年 3 月从 3.5 升级到 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)
由于错误涉及弹出的任何页面,因此来源总是不同的。
- 系统信息:
网站(开发和生产)在带有 IIS 7 的 Windows Server 2008 SP2 上运行。
数据库在 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 的调用?还是你封装了?
-
仅供参考,保存 web.config 文件会导致应用程序池回收。你有内存容量问题吗?
标签: asp.net iis-7 windows-server-2008-r2