【发布时间】:2014-03-28 20:12:05
【问题描述】:
我正在尝试学习 Service Broker 的基础知识,并创建了一个最初基于 SSMS 模板的应用程序。但是我无法向我的队列发送消息。它只是说消息类型不是服务合同的一部分。
我需要重新创建的绝对最低限度是以下批次:
USE [test_db]
GO
CREATE MESSAGE TYPE [test_message]
AUTHORIZATION [dbo]
VALIDATION = WELL_FORMED_XML
GO
CREATE CONTRACT [test_contract]
AUTHORIZATION [dbo] (
[test_message] SENT BY ANY
)
GO
CREATE QUEUE [dbo].[test_queue]
WITH STATUS = ON
,RETENTION = OFF
--,ACTIVATION (
-- STATUS = ON
-- ,PROCEDURE_NAME = [dbo].[test_activator]
-- ,MAX_QUEUE_READERS = 1
-- ,EXECUTE AS N'dbo'
--)
ON [PRIMARY]
GO
CREATE SERVICE [test_service]
AUTHORIZATION [dbo]
ON QUEUE [dbo].[test_queue] (
[test_contract]
)
GO
BEGIN TRANSACTION
DECLARE @dialog_handle UNIQUEIDENTIFIER
BEGIN DIALOG @dialog_handle
FROM SERVICE test_service
TO SERVICE N'test_service';
SEND ON CONVERSATION @dialog_handle
MESSAGE TYPE test_message (N'<test />');
END CONVERSATION @dialog_handle;
COMMIT TRANSACTION
GO
...产生:
Msg 8431, Level 16, State 1, Line 10
The message type 'test_message' is not part of the service contract.
我只需要能够在同一个数据库中发送异步消息。没有需要考虑的远程连接,我什至不需要处理回复。
我已经检查并再次检查了消息类型、合同、队列和服务都存在,并且合同的属性表明消息类型包含
我错过了什么?
【问题讨论】:
标签: sql sql-server-2008 service-broker