有没有人知道是否有一个端口必须在SQL服务器上打开以允许服务代理流量?我们正在测试当你关闭SQL服务器上的所有端口(1433,445,3389)以及查询通知仍然有效时会发生什么。我们的印象是,必须打开4022服务代理才能使用默认侦听端口。
是否有SQL系统视图显示服务代理正在进行通信的端口?
是否有命令终止数据库上的所有活动查询通知,以便可以删除数据库?
由于
答案 0 :(得分:3)
来自How to: Activate Service Broker Networking (Transact-SQL):
Service Broker不会通过网络发送或接收消息 默认。要在实例中激活Service Broker网络,请创建 Service Broker的端点。
创建端点时,您专门指定要使用的端口:
CREATE ENDPOINT BrokerEndpoint
STATE = STARTED
AS TCP ( LISTENER_PORT = 4037 )
FOR SERVICE_BROKER ( AUTHENTICATION = WINDOWS );
Service Broker与其他代理实例通信时使用端口4022。你是如何使用Service Broker的?如果所有工作都在数据库内部,那么它永远不需要使用TCP端点。
答案 1 :(得分:3)
如果您的服务代理体系结构在服务器(端点)之间传递消息,那么它将需要除普通SQL端口之外的端口。
如果客户端代码(如查询通知)正在访问服务代理,则它会通过标准SQL连接使用SQL语句(带有一些新语法),并且此部分不使用任何其他端口。
答案 2 :(得分:3)
查询通知不需要Service Broker端点,因为它始终在本地传递消息,在您启动通知的同一个DB中。尽管将QN配置为向远程计算机发送通知是可能的,但基本上是闻所未闻的。请参阅The Mysterious Notification。
至于问题:Service Broker只需要打开配置的端点端口。您可以在sys.tcp_endpoints
中看到侦听端口。 如果配置的身份验证是Windows,则还需要Kerberos / NTLM(135,?389)所需的端口,以便对SSB连接进行身份验证。请注意,SSB所需的SMB端口(445)不。如果SSB端点配置的身份验证是证书,则不需要其他端口。请参阅How does Certificate based Authentication work。