sql-server - 服务代理 - 将服务更改为默认合同会导致错误
问题描述
前段时间在 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'
所以我现在很困惑,因为当你想更改验证时,我只做了很多博客告诉我的事情。
我究竟做错了什么?
解决方案
根据您使用的名称,您是否正在实施查询通知?如果是这样,我认为您无法控制正在使用的合同。也就是说,任何试图发送查询通知的进程都会(在某些时候)发出类似以下的问题:
begin dialog @handle
from service sourceService
to service 'ChangeNotifications'
on contract [http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]
因为您已经从服务中删除了该合同,所以它不再有效并且错误地出现了。
推荐阅读
- javascript - 如何将数据数组转换为 Leaflet LatLngs 数组?
- python - 带有“命名捕获组”的正则表达式来捕获模式或替代模式
- python-3.x - 如何从 Azure 服务总线读取一堆消息 - 使用 Python 订阅?
- php - 借助 sort() 函数对有序整数数组进行排序的 PHP 类
- android - Android中的图像存储位置
- java - 如何使用 selenium 处理 Web 应用程序的测试执行中间的会话超时弹出窗口
- visual-studio-2019 - 断点不突出线
- c - 将未知长度的字符串与已知长度的字符串进行比较
- python - 如何在同一个 Docker 中使用 mysql 运行 django web 应用程序?错误(docker-compose up -d 似乎工作正常)
- python - 调度方法时缺少参数 self