首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

service borker奇怪的有关问题,最后50分

2012-01-31 
service borker奇怪的问题,最后50分随便新建一个数据库,执行以下脚本,serviceborker都能正常运行。但如果附

service borker奇怪的问题,最后50分
随便新建一个数据库,执行以下脚本,service   borker都能正常运行。
但如果附加的数据库或者是还原的数据库,执行以下脚本,连队列消息都发送不了。会是什么原因?
------------------------------
CREATE   TABLE   CLICKLOG
(
id   INT   IDENTITY(1,1),
departure   char(3),
destination   char(3),
LeaveDate   datetime,
returndate   datetime,
flightid   int,
clickdate   datetime,
ipaddress   varchar(50)
);
go
CREATE   MESSAGE   TYPE   [RecordClick]   VALIDATION   =   NONE;

CREATE   CONTRACT   [ClickContract]  

(

[RecordClick]   SENT   BY   INITIATOR

);  

CREATE   QUEUE   [ClickQueue];

CREATE   SERVICE   [ClickService]   ON   QUEUE   [ClickQueue]([ClickContract]);

GO
CREATE   QUEUE   [RecordClickQueue];

CREATE   SERVICE   [RecordClickService]   ON   QUEUE   [RecordClickQueue];
go

---------------------
----------------------


CREATE   PROCEDURE   clicklogadditem
AS  

BEGIN
    DECLARE   @Handle   UNIQUEIDENTIFIER;    
                DECLARE   @MessageType   SYSNAME;      
                DECLARE   @Message   XML   ;              
DECLARE@Departure   char(3);
DECLARE@Destination   char(3);
DECLARE@LeaveDate   datetime;
DECLARE@ReturnDate   datetime;
DECLARE@Flightid   int;
DECLARE@clickDate   datetime   ;
DECLARE@IpAddress   varchar(50);
                RECEIVE   TOP   (1)        
                @Handle   =   conversation_handle,        
                @MessageType   =   message_type_name,  
                @Message   =   message_body        
                FROM   [ClickQueue];                                      
                  IF(@Handle   IS   NOT   NULL   AND   @Message   IS   NOT   NULL)
BEGIN                  
            SELECT   @Departure   =   CAST(CAST(@Message.query( '/Params/Departure/text() ')   AS   NVARCHAR(MAX))   AS   char(3))                    
            SELECT   @Destination   =   CAST(CAST(@Message.query( '/Params/Destination/text() ')   AS   NVARCHAR(MAX))   AS   char(3))                          
            SELECT   @LeaveDate   =   CAST(CAST(@Message.query( '/Params/LeaveDate/text() ')   AS   NVARCHAR(MAX))   AS   Datetime)
            SELECT   @ReturnDate   =   CAST(CAST(@Message.query( '/Params/ReturnDate/text() ')   AS   NVARCHAR(MAX))   AS   Datetime)


            SELECT   @Flightid   =   CAST(CAST(@Message.query( '/Params/Flightid/text() ')   AS   NVARCHAR(MAX))   AS   int)
            SELECT   @clickDate   =   CAST(CAST(@Message.query( '/Params/clickDate/text() ')   AS   NVARCHAR(MAX))   AS   Datetime)
            SELECT   @IpAddress   =   CAST(CAST(@Message.query( '/Params/IpAddress/text() ')   AS   NVARCHAR(MAX))   AS   varchar(50))
INSERT   INTO   Clicklog(Departure   ,Destination   ,LeaveDate   ,ReturnDate,Flightid   ,clickDate   ,IpAddress)  
  values(@Departure   ,@Destination   ,@LeaveDate   ,@ReturnDate,@Flightid   ,@clickDate,@IpAddress);    
END
--select   *   from   clicklog
END

GO
------------
-------------
CREATE   PROCEDURE   sendclicklog

(
  @Departure   char(3),
@Destination   char(3),
@LeaveDate   datetime,
@ReturnDate   datetime,
@Flightid   int,
@clickDate   datetime   ,
@IpAddress   varchar(50)
)

AS

BEGIN
    DECLARE   @MessageBody   XML        
CREATE   TABLE   #ProcParams     (    
Departure   char(3),
Destination   char(3),
LeaveDate   datetime,
ReturnDate   datetime,
Flightid   int,
clickDate   datetime   ,
IpAddress   varchar(50)
        )      
INSERT   INTO   #ProcParams(Departure   ,Destination   ,LeaveDate   ,ReturnDate,Flightid   ,clickDate   ,IpAddress)    
VALUES(@Departure   ,@Destination   ,@LeaveDate   ,@ReturnDate,@Flightid   ,@clickDate,@IpAddress)    
            SELECT   @MessageBody   =   (SELECT   *   FROM   #ProcParams   FOR   XML   PATH   ( 'Params '),   TYPE);

            DECLARE   @Handle   UNIQUEIDENTIFIER;
            BEGIN   DIALOG   CONVERSATION   @Handle    
      FROM   SERVICE   [RecordClickService]        
    TO   SERVICE   'ClickService '          
  ON   CONTRACT   [ClickContract]          
  WITH   ENCRYPTION   =   OFF,   LIFETIME   =   600;
            SEND   ON   CONVERSATION   @Handle     MESSAGE   TYPE   [RecordClick](@MessageBody);
END
GO


ALTER   QUEUE   [ClickQueue]   WITH   ACTIVATION  

(

STATUS   =   ON,

MAX_QUEUE_READERS   =   1,

PROCEDURE_NAME   =   clicklogadditem,

EXECUTE   AS   OWNER

);

GO
------------------------------------


EXECUTE   sendclicklog   'd ', 'g ', '1/9/2005 ', '1/9/2005 ',30, '1/9/2005 ', '1110 '

select   *   from   clicklog
select   *   from   clickqueue

------解决方案--------------------


新建一个数据库是90的

而附加的数据库或者是还原的数据库却是80的

以上脚本只能在90以上版本执行,建议将数据库升级到90
[解决办法]
有可能是数据库的 Service Broker 功能禁用了, 楼主试试执行下面的语句把选项开启

ALTER DATABASE 库名
SET ENABLE_BROKER

热点排行