【问题标题】:Service Broker required portService Broker 所需端口
【发布时间】:2011-11-29 18:28:13
【问题描述】:

有谁知道是否有一个绝对必须在 SQL 服务器上打开的端口才能允许服务代理通信?我们正在测试当您关闭 SQL 服务器上除 (1433、445、3389) 之外的所有端口并且查询通知仍然有效时会发生什么。我们的印象是,必须打开 4022 才能让服务代理作为默认侦听端口工作。

是否有一个 SQL 系统视图来显示服务代理在哪个端口上进行通信?

是否有一个命令可以终止数据库上的所有活动查询通知,以便删除数据库?

谢谢

【问题讨论】:

    标签: sql sql-server service-broker


    【解决方案1】:

    如果您的服务代理架构在服务器(端点)之间传递消息,那么它将需要普通 SQL 端口以外的端口。

    如果客户端代码(例如查询通知)正在访问服务代理,则它通过标准 SQL 连接使用 SQL 语句(带有一些新语法),这部分不使用任何额外的端口。

    【讨论】:

    • 我们使用标准的ADO.Net代码来接收sql依赖通知,所以听起来它使用标准的sql端口进行通信。谢谢
    【解决方案2】:

    来自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。您如何使用服务代理?如果所有工作都在您的数据库内部,那么它永远不需要使用 TCP 端点。

    【讨论】:

    • 为了让它工作,我们在我们想要使用的每个数据库上启用了代理服务,然后从我们用来连接到我们调用的数据库的每个服务器 SQLdependency.Start() (.NET)。我不必在我的任何环境中运行之前的 create endpoint 语句来使 SQLDependencies 工作。关于 SQLDependency 如何使用服务代理,我是否遗漏了什么?我们要做的就是让我们的服务器建立 sql 依赖关系,然后在底层数据更改时让 sql 引发事件。到目前为止它有效,但我只需要找出我以前问题的答案。谢谢
    【解决方案3】:

    查询通知不需要 Service Broker 端点,因为它始终在本地传递消息,在您启动通知的同一数据库中。尽管将 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      相关资源
      最近更新 更多