0

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

今天我们进来并注意到在生产中,在任何应用程序的产品站点地图上根本没有显示任何菜单项。开发和质量检查看起来不错。在我们实现 SQLSiteMapProvider 之前很久,我们已经有很长一段时间没有在 prod 中对 SQL Server 进行任何维护了。我们最近也没有更新任何网络应用程序。

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

由于这有点紧急,我接下来要做的就是在 prod 的站点地图表中插入一个虚拟记录,看看会发生什么。噗,就像魔术一样,菜单项恢复了,一切都很好。我删除了虚拟菜单项,它同步没有问题。

不过这有点吓人,我想弄清楚为什么会这样,这样以后就不会再发生了。有谁之前经历过这个吗?如果您从未使用过 SqlSiteMapProvider - 它只是使用 SqlDependencyCache/ ASP.NET 缓存来存储菜单项,那么如果返回链接的存储过程的结果集发生更改,它会告诉 ASP.NET 这发生了并重新填充站点地图/缓存...

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

非常感谢您的任何指导。

编辑:这一切都来自于在我的存储过程中有一个 SET NOCOUNT ON。谨防!这在任何地方的 MSDN 文档中都没有,真的让我有一阵子搞砸了!

4

2 回答 2

1

SqlDependency 并不完全是稳定的动力源。这里有一些文章可能会有所启发:

于 2009-12-21T18:18:53.533 回答
0

检查我的编辑;)

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

于 2010-10-19T20:26:20.930 回答