我正在 2 台服务器 A 和 B 之间建立 Service Broker 通信,我们将调用它们。我以这篇文章为例。
A 是 SQL 2005,B 是 SQL 2012。它不起作用,而且我无法找到一个很好的原因。我能看到的是:
接收端的 Profiler 甚至不显示任何 Service Broker 事件,这表明没有任何东西可以访问它。
但是使用 ssbdiagnose 如下,它表示恭喜,您没有错误:
C:\Users\me>ssbdiagnose -level info -E configuration from service ServerAServiceTest -S ServerA -d MyDB to Service ServerBServiceTest -S ServerB -d MyDB on Contract myContract
Microsoft SQL Server 11.0.2100.60
Service Broker Diagnostic Utility
0 Errors, 0 Warnings
同样在传输队列中,我看到的唯一看起来特别不正常的是“to_broker_instance”为空,尽管我在设置路由时明确指定了该信息。
此外,transmission_status 中没有显示任何错误。
此外,SQL Server 错误日志没有任何意义。
至于防火墙问题,嗯,这些是无法从外部访问的测试服务器,所以我尝试完全关闭防火墙。
一件麻烦的事情,我会得到这些:
在目标队列中排队消息时发生异常。错误:15581 状态:7. 请在数据库中创建主密钥或在会话中打开主密钥,然后再执行此操作。
我打开钥匙,这些就消失了。但是我不应该每次想要做某事时都必须反复打开钥匙,不是吗?我怀疑这是问题的一部分,即使如上所述错误消失了。
很抱歉这个有点悬而未决的问题 - 即使是一些帮助确定从哪里获得更多信息错误或调试信息也会很棒。这对我来说是新的领域。
数据库主密钥是否由服务主密钥加密?如果没有,db引擎没有办法自动打开它。要检查,请查看
sys.asymmetric_keys
,特别是该pvt_key_encryption_type_desc
列。如果你发现它不是,你可以这样做