没有启用应用程序监视器是代表队列XYZ的(No enabled application monito

2019-07-21 09:32发布

我创建将由“Service Broker的外部激活”服务使用一个控制台应用程序。 在配置文件“C:\ Program Files文件\服务代理\外部激活\ Config”中已经改变,但其写入例外日志文件为波纹管

异常错误= 32,没有使能应用监视器是代表队列的

下面是我的配置

<NotificationServiceList>
    <NotificationService name="ExternalActivatorService" id="100" enabled="true">
      <Description>My test notification service</Description>
      <ConnectionString>
        <!-- All connection string parameters except User Id and Password should be specificed here -->
        <Unencrypted>Data Source=localhost;Initial Catalog=Chapter4_ExternalActivation;Application Name=External Activator;Integrated Security=True;</Unencrypted>
      </ConnectionString>
    </NotificationService>
  </NotificationServiceList>
  <ApplicationServiceList>
        <ApplicationService name="ProcessingApplication" enabled="true">
      <OnNotification>
        <ServerName>localhost</ServerName>
        <DatabaseName>Chapter4_ExternalActivation</DatabaseName>
        <SchemaName>dbo</SchemaName>
        <QueueName>ExternalActivatorQueue</QueueName>
      </OnNotification>
      <LaunchInfo>
        <ImagePath>D:\Temp\ServiceBroker\9781590599990\Samples\Chapter4\02 ExternalProcessingApplication\ProcessingApplication\bin\Debug\ProcessingApplication.exe</ImagePath>
        <CmdLineArgs></CmdLineArgs>
        <WorkDir>D:\Temp\ServiceBroker\9781590599990\Samples\Chapter4\02 ExternalProcessingApplication\ProcessingApplication\bin\Debug</WorkDir>
      </LaunchInfo>
      <Concurrency min="1" max="1" />
    </ApplicationService>
  </ApplicationServiceList>

这里是SQL

CREATE DATABASE Chapter4_ExternalActivation
GO

ALTER DATABASE Chapter4_ExternalActivation
      SET ENABLE_BROKER;
GO

USE Chapter4_ExternalActivation
GO

--*********************************************
--*  Create the message type "RequestMessage"
--*********************************************
CREATE MESSAGE TYPE
[http://ssb.csharp.at/SSB_Book/c04/RequestMessage]
VALIDATION = WELL_FORMED_XML
GO

--*********************************************
--*  Create the message type "ResponseMessage"
--*********************************************
CREATE MESSAGE TYPE
[http://ssb.csharp.at/SSB_Book/c04/ResponseMessage]
VALIDATION = WELL_FORMED_XML
GO

--************************************************
--*  Create the contract "HelloWorldContract"
--************************************************
CREATE CONTRACT [http://ssb.csharp.at/SSB_Book/c04/HelloWorldContract]
(
    [http://ssb.csharp.at/SSB_Book/c04/RequestMessage] SENT BY INITIATOR,
    [http://ssb.csharp.at/SSB_Book/c04/ResponseMessage] SENT BY TARGET
)
GO

 --********************************************************
--*  Create the queues "InitiatorQueue" and "TargetQueue"
--*********************************************************
CREATE QUEUE InitiatorQueue
WITH STATUS = ON
GO

CREATE QUEUE TargetQueue
GO

 --**************************************************************
--*  Create the services "InitiatorService" and "TargetService"
--***************************************************************
CREATE SERVICE InitiatorService
ON QUEUE InitiatorQueue 
(
    [http://ssb.csharp.at/SSB_Book/c04/HelloWorldContract]
)
GO

CREATE SERVICE TargetService
ON QUEUE TargetQueue
(
    [http://ssb.csharp.at/SSB_Book/c04/HelloWorldContract]
)
GO

 --******************************************************************
--*  Deactivate the internal activation on the queue (if necessary)
--*******************************************************************
ALTER QUEUE TargetQueue
    WITH ACTIVATION (DROP)
GO

--*********************************************
--*  Create the event notification queue
--*********************************************
CREATE QUEUE ExternalActivatorQueue
GO

--*********************************************
--*  Create the event notification service
--*********************************************
CREATE SERVICE ExternalActivatorService
ON QUEUE ExternalActivatorQueue
(
    [http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]
)
GO

--***********************************************************************
--*  Subscribe to the QUEUE_ACTIVATION event on the queue "TargetQueue"
--***********************************************************************
CREATE EVENT NOTIFICATION EventNotificationTargetQueue
    ON QUEUE TargetQueue
    FOR QUEUE_ACTIVATION
    TO SERVICE 'ExternalActivatorService', 'current database';
GO

当我将消息发送到TargetService,新留言ExternalActivatorQueue到达。 当我开始“的Service Broker外部激活”服务时,出现错误。 任何想法,找出这个问题的根源?

Answer 1:

这可能会帮助你,如果问题仍然存在。

如果所有的SSSB对象和事件通知设置不当则需要看,消息是如何获得推通知队列。

下面是你必须使用并将其发送到通知队列中的消息格式,

DECLARE @RequestMsg XML
SELECT @RequestMsg = N'<EVENT_INSTANCE>
   <EventType>QUEUE_ACTIVATION</EventType>
   <PostTime>' + CONVERT(CHAR(24),GETDATE(),126) + '</PostTime> 
   <SPID>' + CAST(@@SPID AS VARCHAR(9)) + '</SPID> 
   <ServerName>ServerName</ServerName>   -- use @@SERVERNAME to eliminate hard code 
   <LoginName></LoginName>    -- you can skip this element 
   <UserName></UserName>      -- you can skip this element 
   <DatabaseName>DatabaseName</DatabaseName> -- use DB_NAME() to eliminate hard code 
   <SchemaName>dbo</SchemaName>
   <ObjectName>NotifyQueue</ObjectName>
   <ObjectType>QUEUE</ObjectType>
</EVENT_INSTANCE>';

另外要小心与该消息的每个部分应该匹配的[EAService.config]配置值,见上文XML结构评价的值。

 <ApplicationService name="myMessageApp" enabled="true">
  <OnNotification>
    <ServerName>ServerName</ServerName>
    <DatabaseName>DatabaseName</DatabaseName>
    <SchemaName>dbo</SchemaName>
    <QueueName>NotifyQueue</QueueName>
  </OnNotification>
  <LaunchInfo>

之所以这样做这种方式,存在业务逻辑里面做SSSB消息值的匹配EAService.Config的价值观,是越来越执行成功的匹配给定的应用。

希望这如果你有同样的问题还活着会帮助你。



Answer 2:

造成这种情况的更可能的原因是你在服务器名称元素使用“本地主机”。 我只是通过改变服务器名称为localhost复制它在我的工作示例。

该服务器名称和ConnectionString中的服务器必须是实际的计算机名 ,计算机名具体地说,不是DNS域名无论是。

如果您ConnectionString中的服务器本地主机,然后将服务启动后发生什么。 你不会得到一个错误,但不会进行激活。



文章来源: No enabled application monitor is on behalf of queue XYZ