我今天早上有一个完美工作的SQL Server Service Broker,直到我测试它是如何从崩溃中恢复的。
我通过网络在服务器之间的消息传递会话期间强制系统关闭发件人。我发送大约5mb大小的二进制消息。有自动程序可以发送,回复和接收消息并从两端结束对话,我的设置使用证书进行安全保护。
我现在无法从服务器端发送任何消息。
消息传递链的两端都有队列,似乎毒性消息处理不会导致此问题。发件人方接受新邮件但未发送邮件。
发件人方传输队列包含transmission_status
由于以下错误,Service Broker端点无法侦听连接:' 10013(尝试以其访问权限禁止的方式访问套接字。)'。
运行ALTER ENDPOINT myendpoint STATE = STARTED
会返回与上面相同的错误。
运行select * from sys.endpoints
无论如何都会以state_desc = STARTED
显示端点..
正在运行select state_desc from [sender_database].sys.conversation_endpoints
会显示state_desc = CONVERSING
所有结果。
正在运行SELECT COUNT(*) FROM dbo.sender_queue
会返回0
。
我的端点正在使用的端口没有其他流量,至少不是netstat
或TCPView工具可见的任何流量。端口具有允许来自防火墙的流量的规则,sqlagent
和sqlsrvr
进程也有额外的规则可供使用。
在发件人方使用带ssbdiagnose -level info configuration from service...
的ssbdiagnose工具会显示(非新)错误
服务sender_service的路由被归类为REMOTE。这将导致邮件被转发。
以及有关即使在消息传递工作时始终存在的证书的其他一些错误。带有RUNTIME
标志的Ssbdiagnose根本没有显示任何内容。
来自目标方的Ssbdiagnose现在说在连接期间发生了异常。目标数据库还有一些回复消息卡在传输队列中,空transmission_status
。
修改:似乎有时目标端的状态会更改为错误10060 connection failed..
。
我还可以做些什么来诊断问题并修复它?
编辑:我尝试更改端点使用的端口,但会抛出相同的错误。
编辑:我可以互相ping服务器。目标端带有RUNTIME
选项的Ssbdiagnose表示无法找到与我的发送方端点/数据库的路由地址对应的SQL Server连接。
答案 0 :(得分:0)
由于以下错误,Service Broker端点无法侦听连接:
'10013(An attempt was made to access a socket in a way forbidden by its access permissions.)'
WSAEACCESS
(10013)是一个相当不寻常的套接字侦听错误。我以前从未见过它。快速搜索显示KB3039044:错误10013(WSAEACCES)在Windows 中对排除端口的第二次绑定失败时返回这是Windows Server 2008R2,2012和2012R2中的已确认错误,当排除时一系列端口(netsh ... add excludedportrange ...
)。所以我的第一个问题是,你是否在一个受影响的服务器操作系统上,你实际上是在使用网络端口排除范围吗?
我强烈建议您针对此问题打开Microsoft支持案例并跟进它们,确保网络人员参与其中(同样,WSAEACCESS
是一种相当不寻常的症状)。这不是常见问题之一,很难通过论坛讨论进行诊断。