我们有一个C#Web应用程序,它使用SQL依赖关系来缓存缓存的查询数据。虽然一切正常,但我们发现在生产环境中会产生很多错误。
第一条错误消息是:
Service Broker需要访问数据库中的主密钥 'SubscriberManager'。错误代码:32。主密钥必须存在并且 需要服务主密钥加密。
它显示在服务器事件日志和SQL服务器日志文件中。我相信消息的实际内容是一个红色的鲱鱼,因为我创建了一个数据库主密钥。
我也试过
我在研究问题时看到其他人有类似的错误,但错误代码几乎总是25或26而不是32.我一直无法找到任何告诉我这些错误代码的含义,所以我不是确定其意义。
同时发生这种情况我们有时也会从.net中得到错误,说明如下:
System.InvalidOperationException:不使用SqlDependency时 提供选项值,必须调用SqlDependency.Start() 正在执行的每个服务器
应用程序在Application_Start中调用SqlDependency.Start 事件虽然。
然而,这些错误是奇怪的间歇性的,它们不会在每次特定页面被击中时发生,甚至不会在每次创建或触发通知时发生。我已经尝试附加SQL事件探查器并监视代理事件,并看到创建的通知没有任何问题。
最后我看到很多这样的错误:
会话句柄上的查询通知对话框 '{2FA2445B-1667-E311-943C-02C798B618C6}'。由于以下原因而关闭 错误:'
-8490
不能 找到远程服务 'SqlQueryNotificationService-7303d251-1eb2-4f3a-9e08-d5d17c28b6cf' 因为它不存在。'。
据我所知,由于SqlDependency.Stop不会清理我们在其中一台生产服务器上看到数以千计的数据库中的所有内容,因此其中一定数量是正常的。
令人沮丧的是,我们几年来一直使用SQL通知而没有问题,所以在我们的应用程序或服务器设置中必须更改某些内容才会导致此问题,但此时我不知道是什么。
应用程序是在Windows 2012服务器上运行的.net 4.0 MVC和WCF,调用SQL 2012服务器也在Windows 2012上运行。
答案 0 :(得分:0)
根据Microsoft的说法,如果SQL Server缺少资源特别是内存,则会导致生成这些错误。