问题标签 [service-broker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
567 浏览

sql-server - Service Broker 中的私钥问题

我们正在尝试按照 MSDN 中的教程通过 Service Broker 在一个 SQL 引擎中的两个 SQL 实例之间进行对话。为了简单起见,我们发送 Encryption = OFF 的对话框,因此我们不需要处理 Master key、Certificate... 并且它在本地工作站中工作。

声明 @RequestMsg NVARCHAR(100);

开始交易;

BEGIN DIALOG @InitDlgHandle 从服务 [//InstDB/2InstSample/InitiatorService] 到 SERVICE N'//TgtDB/2InstSample/TargetService' ON CONTRACT [//BothDB/2InstSample/SimpleContract] WITH ENCRYPTION = OFF;

SELECT @RequestMsg = N'目标服务的消息。';

发送对话@InitDlgHandle MESSAGE TYPE [//BothDB/2InstSample/RequestMessage] (@RequestMsg);

选择 @RequestMsg 作为 SentRequestMsg;

提交交易;去

但是,在移动到服务器后,使用相同的脚本,目标数据库在 initDB 发出消息后的 SQL 跟踪中一直显示“找不到私钥,消息无法传递”。

我的问题是,既然我们设置了加密 = OFF,为什么目标数据库显示缺少证书?

我们使用 SQL 2005 SP2 , Windows 2003

感谢任何输入。

0 投票
3 回答
2518 浏览

asp.net - 查询通知错误

我们有这个关于 SQL 查询通知服务的奇怪问题。我们有一个使用 QN 服务运行的主 Web 应用程序,因此当监控数据发生更改时,Web 中的缓存项会从 SQL 获得通知。它运行良好。奇怪的是,当其他支持的 Web 服务尝试将 QN 订阅注册到 SQL 2005 SP2 并发生此错误时

“系统异常:SqlDependency.Start 已为服务器多次调用命令执行,但当前命令没有匹配的服务器/用户/数据库 Start() 调用”

此错误仅在 SQLDependency 中针对特定实例数据库的 SQL 查询时发生。另一个实例数据库工作得很好。

对于 QN / 服务代理问题,找不到太多资源。希望有类似经历的朋友可以分享一下知识。

0 投票
4 回答
158984 浏览

sql-server-2005 - 启用 SQL Server Broker 时间过长

我有一个 Microsoft SQL Server 2005,我尝试使用这些 T-SQL 为我的数据库启用代理:

Alter Database需要很长时间来处理。现在已经半个多小时了,它还在运行。不确定它是在等待其他东西还是我必须先清理任何东西,例如删除服务代理下的所有消息、合同、队列和服务?

0 投票
2 回答
1864 浏览

sql-server - SQL Service Broker 消息中的汉字

我在数据库中设置了多个 SQL Service Broker 队列,但之前没有遇到过这个问题。包含 XML 的消息正在转换为似乎主要是中文字符的内容。当我在将 XML 放入消息队列之前检查存储 XML 的变量时,我可以看到它是英文的并且是良好的 XML 格式。当我从队列中选择时,我会收到汉字。当我使用外部 C# 应用程序从队列中拉出时,这些字符也是我收到的。奇怪的是,如果我使用 DBArtisan 查看队列,我会看到格式良好的 XML。

下面的 XML 放入队列时会转换为下面的汉字


下面是我用来将消息放入队列并选择它的 T-SQL。

0 投票
1 回答
12423 浏览

sql-server-2005 - 使用 Sql Server 2005 的 Service Broker - 消息卡在队列中

我正在配置一个简单的服务代理实现。在本地,我们使用 SQL Server 2008 Express,一切正常。一旦代码在我们的生产服务器(SQL SERVER 2005)上运行,消息就会卡在接收者队列中。以下代码不完整,但说明了队列和服务的基本配置方式:

安装服务后,会以这种方式触发消息:

所有消息都卡在“MyReceiverQueue”中。如果我手动执行“spProcessMessage”,则消息会正常处理。

更多细节:
- sys.transmission_queue为空
- sys.conversation_endpoints声明两个服务都是“正在转换”
- 启用了代理,并且将数据库配置为与 SQL 2005 兼容

任何想法为什么不自动处理这些消息?

非常感谢您的时间。

--

好的,在玩了一会儿之后,我得到了ssbdiagnose工作。正如 Remus 所说,它位于:C:\Program Files\Microsoft SQL Server\100\Tools\Binn。我以这种方式使其在本地工作:

然后,我在我们的生产服务器上试了一下:

检测到的第一个错误

服务器上的另一个数据库具有与服务代理相同的 GUID。我只需要重新生成 GUID:

第二个错误用户执行存储过程的权限有关

升级这些权限后,一切都开始正常工作。

非常感谢 Remus 为我指明了正确的方向。我有点长,但我希望细节能帮助其他开发人员。

0 投票
2 回答
7532 浏览

sql-server - Sql Server Service Broker:如何为简单的队列场景构建对话?

我是 Sql Server Service Broker 新手,我正在尝试掌握为(看似)简单的用例设置 Service Broker 的最佳方法:我想创建一个简单的工作队列,其中一个应用程序将工作项放入队列,并且单独的应用程序从该队列中提取工作项并处理它们。第一个应用程序不需要从第二个应用程序获取状态消息。我希望队列存在于单个 Sql Server 实例中。

最让我困惑的是对话/对话与这种情况的关系。我知道您只能在对话/对话的上下文中发送/接收消息,但是由于两个应用程序之间没有来回的聊天,我对何时是创建新对话的正确时间感到迷茫。两个极端的选择似乎是:

  • 每次我将工作项排入队列时,我都会开始新的对话。因此,每个对话最终都会包含一条消息。
  • 在部署时,我手动创建了一个无限期对话。当需要将工作项排入队列时,我总是将其作为单个对话的一部分发送。

走这两条路线的后果是什么?

此外,在第一种情况下,似乎我需要进行一些 END CONVERSATION,以便 Sql Server 能够在内部清理资源。有什么指导什么时候可以把它们放在正确的地方吗?(或者最终依赖对话超时可能会更好?)

0 投票
1 回答
6565 浏览

sql-server - Sql Server Service Broker 对话组

有人可以解释服务代理中的对话组吗?

目前,我正在使用服务代理将消息从一个 SQL 服务器发送到另一个。在发送服务器上,我正在尝试关联消息,以便在接收端对它们进行串行处理。根据文档,对话组似乎非常适合这一点,但在接收服务器上,消息被分配到与我在发送消息时指定的不同的对话组。

我在网上搜索,发现这种行为似乎是有意的(http://social.msdn.microsoft.com/forums/en-US/sqlservicebroker/thread/baf48074-6804-43ab-844a-cb28a6dce02b/) ,但后来我对来自(http://msdn.microsoft.com/en-us/library/ms178624.aspx)的语法的有用性感到困惑

如果会话组没有收到来自发件人的消息,并且使用相同会话组 id 发送的消息在接收端没有相同的会话组 id,那么上面的代码有什么意义?

0 投票
2 回答
2479 浏览

sql-server - 让 Service Broker 在检测有毒消息方面不那么激进?

Sql Service Broker 使用以下启发式方法来确定您的队列中何时有消息阻止您的应用程序执行任何有用的工作:

“Service Broker 提供自动有害消息检测。当包含 RECEIVE 语句的事务回滚五次时,Service Broker 会通过自动将队列状态设置为 OFF 来禁用事务接收消息的所有队列。” ( http://msdn.microsoft.com/en-us/library/ms166137.aspx )

我对这种基本方法很好,但是有没有办法将重试次数从五次更改为更高的值,也许是二十次?

这对我有用的原因是我当前用来处理队列的代码是 Sql Server 之外的一个应用程序,它有大约 10 个工作线程,每个工作线程都有一个独立的 SqlConnection,每个都执行自己独立的接收语句。如果此应用程序因某种原因而死,这可能会导致每个工作线程的单独回滚事务,这足以禁用队列。相反,我希望能够在不禁用队列的情况下终止我的应用程序。我可能应该重写应用程序以使用单个 SqlConnection,但如果我能说类似的话会容易得多

这样的事情可能吗?

0 投票
1 回答
1384 浏览

sql-server - SQL Server 消息代理 - 外部激活

我在受限网络中有一个 Sql Server。我需要以某种方式从外部获取数据。

我想利用 Message Broker 的使用。我的想法是外部数据库将消息放在队列上,然后我需要一个位于受限 LAN 内部的服务来侦听(轮询?)这些消息,然后对它们采取行动。我不能让外部队列在受限 LAN 中发起正常的代理对话。

我的问题是我是否应该查看代理外部激活器以坐在受限 LAN 内并收听新消息然后对其采取行动?有没有人有这方面的经验。外部激活器的文档/示例非常薄,消息代理尚不支持独白。

msmq 是更好的选择吗?

0 投票
1 回答
503 浏览

c# - 使用数据集的 SQL Server 服务代理

我正在将控制台应用程序转换为从SQL Server 2005 中的Service Broker运行。

该应用程序大量使用DataSet

数据集应该在SQLCLR中工作吗?如何定义要使用的连接?有这方面的文件吗?

谢谢你的帮助!