生产MYSqlSiteMapProvider问题 - 所有项目'消失'?

时间:2009-12-21 17:08:24

标签: asp.net sql-server-2008 sitemap sqldependency service-broker

我们有几个使用站点地图的ASP.NET应用程序,该站点地图是通过在Wicked Code找到的SqlSiteMapProvider示例的VB.NET实现填充的。它被编译为DLL,然后从服务器上的GAC和我们的本地人安装和引用。它已经在生产中工作了好几个月了。我还应该注意到我们正在使用SQL Server 2008

今天我们进来并注意到在制作中,在任何应用程序的prod中,站点地图上根本没有显示任何菜单项。开发与发展QA看起来很好。在我们甚至实现SQLSiteMapProvider之前的很长一段时间里,我们还没有对SQL Server做过任何维护。我们最近也没有更新任何网络应用程序。

我做的第一件事是将prod web.config设置为我的IDE中的web.config并运行应用程序 - 仍然是同样的问题。这应该排除IIS问题,因为错误也在我的机器上复制。

由于这有点紧迫,我接下来要做的只是在prod中的sitemap表中插入一条虚拟记录,看看会发生什么。噗,像魔术一样,菜单项目都恢复了,一切都很好。我删除了虚拟菜单项,并且没有问题同步。

虽然这有点可怕,但我想弄清楚为什么会发生这种情况,以致将来不会再发生这种情况。有谁之前经历过这个吗?如果您从未使用过SqlSiteMapProvider - 它只是使用SqlDependencyCache / ASP.NET缓存来存储菜单项,那么如果返回链接的存储过程的结果集发生了变化,它会告诉ASP.NET这种情况发生了并重新填充了站点地图/缓存...

也许是网络服务器与之间的联系; SQL Server莫名其妙地死了?插入一条记录使其“唤醒”并重新连接?也许有一个超时值或某种IsStillConnected()函数我需要检查PageLoad以确保连接仍然是完好的?或者也许ASP.NET认为存储过程由于某种原因没有返回任何值,直到我们将记录插入表中?有没有人见过这个问题?

非常感谢任何指导。

编辑:所有这些都来自我的存储过程中的SET NOCOUNT ON。谨防!这在任何地方的MSDN文档中都没有,真的搞砸了我一段时间!

2 个答案:

答案 0 :(得分:1)

SqlDependency并不是稳定的强大动力。以下是一些可能会有所启发的文章:

答案 1 :(得分:0)

检查我的编辑;)

这一切都来自我的存储过程中的SET NOCOUNT ON。谨防!这在任何地方的MSDN文档中都没有,真的搞砸了我一段时间!