【发布时间】:2021-06-11 14:00:49
【问题描述】:
前段时间在 SQL Server 2016 中,我创建了一个服务代理队列:
CREATE QUEUE [dbo].[NotificationsQueue]
WITH STATUS=ON,
RETENTION=OFF,
POISON_MESSAGE_HANDLING (STATUS=ON)
ON [PRIMARY]
GO
另外,我创建了一个服务:
CREATE SERVICE [ChangeNotifications]
AUTHORIZATION [dbo]
ON QUEUE [dbo].[NotificationsQueue]
(
[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]
)
GO
这很好,允许根据需要从一些监控队列的代码中发送 XML 消息。
我们的新要求是我们不想再被绑定到 XML。因此,由于系统 PostQueryNotification 合同中有 xml 验证,我想使用根本没有验证的默认值。
所以我改变了服务:
ALTER SERVICE ChangeNotifications (ADD CONTRACT [DEFAULT], DROP CONTRACT [http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification])
现在,当我从队列中读取 message_body 字段时,我得到了
Target service 'ChangeNotifications' does not support contract 'http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification'
所以我现在很困惑,因为我只做了很多博客告诉我在你想更改验证时应该做的事情。
我做错了什么?
【问题讨论】: