【发布时间】:2009-12-21 17:08:24
【问题描述】:
我们有几个使用站点地图的 ASP.NET 应用程序,该站点地图是通过 SqlSiteMapProvider 示例的 VB.NET 实现填充的,该示例位于 Wicked Code。它被编译成一个 DLL,然后从服务器上的 GAC 以及我们的本地安装和引用。它已经在生产中运行了几个月。我还应该注意我们使用的是 SQL Server 2008
今天我们进来并注意到在生产中,对于任何应用程序,prod 的站点地图上根本没有显示任何菜单项。开发和质量检查看起来不错。在我们实现 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 文档中都没有,真的让我有一段时间搞砸了!
【问题讨论】:
标签: asp.net sql-server-2008 sitemap sqldependency service-broker