使用队列名字对象

队列名字对象用于以编程方式激活排队组件。 队列名字对象要求它接收要直接从其右侧的新名字对象调用的对象的类 ID (CLSID)。 当在左侧添加前缀时,新名字对象会将 CLSID 传递给其左侧的名字对象。

组件服务管理工具

不应用。

Visual Basic

GetObject 显示名称参数为“queue:/new:”,后跟要实例化的服务器对象的程序 ID 或字符串格式 GUID(带大括号或无大括号)。 以下示例演示了使用队列名字对象对组件进行三次有效激活:

  1. Set objMyQC = GetObject ("queue:/new:QCShip.Ship")
    
  2. Set objMyQC = GetObject ("queue:/new:{812DF40E-BD88-11D0-8A6D-00C04FC340EE}")
    
  3. Set objMyQC = GetObject ("queue:/new:812DF40E-BD88-11D0-8A6D-00C04FC340EE")
    

C/C++

CoGetObject 显示名称参数为“queue:/new:”,后跟要实例化的服务器对象的程序 ID 或字符串格式 GUID(带大括号或无大括号)。 以下示例演示了使用队列名字对象对组件进行三次有效激活:

  1. hr = CoGetObject (
      L"queue:/new:QCShip.Ship",
      NULL, IID_IShip, (void**)&pShip);
    
  2. hr = CoGetObject (
      L"queue:/new:{812DF40E-BD88-11D0-8A6D-00C04FC340EE}", 
      NULL, IID_IShip, (void**)&pShip);
    
  3. hr = CoGetObject (
      L"queue:/new:812DF40E-BD88-11D0-8A6D-00C04FC340EE",
      NULL, IID_IShip, (void**)&pShip);
    

注解

队列名字对象接受可选参数,这些参数会更改发送到消息队列的消息的属性。 例如,若要促使以优先级 6 发送消息队列消息,将按如下所示激活排队组件:

hr = CoGetObject (
  L"queue:Priority=6,ComputerName=MyComp/new:QCShip.Ship",
  NULL, IID_IShip, (void**)&pShip);

下表列出了影响目标队列的队列名字对象参数。

参数 说明
计算机名
指定消息队列队列路径名称的计算机名称部分。 消息队列队列路径名称的格式为 ComputerName<em>QueueName。 如果未指定,则使用与配置的应用程序关联的计算机名称。
QueueName
指定消息队列队列名称。 消息队列队列路径名称的格式为 ComputerName<em>QueueName。 如果未指定,则使用与配置的应用程序关联的队列名称。
若要获取非事务队列,可以先指定队列名称,然后创建同名的 COM+ 应用程序。
PathName
指定完整的消息队列队列路径名称。 如果未指定,将使用与配置的应用程序关联的消息队列队列路径名称。 若要覆盖目标名称,可以在以下窗体中为消息队列工作组安装指定路径:
Queue:PathName=ComputerName\PRIVATE$\AppName/new:Myproject.CMyClass
注意:C 和 Microsoft Visual C++ 编程语言都需要两个反斜杠来表示字符串文本中的一个反斜杠,例如芝加哥\工资单。
FormatName
将 COM+ 应用程序标记为排队时,COM+ 将创建一个消息队列队列,其名称与应用程序相同。 该队列的消息队列格式名称位于与 COM+ 应用程序关联的 COM+ 目录中。 若要覆盖目标名称,可以在以下窗体中为消息队列工作组安装指定格式名称:
Queue:FormatName=DIRECT=OS:ComputerName\PRIVATE$\AppName/new:ProgId
在 Active Directory 配置中,未将“PRIVATE$”指定为队列名称的一部分。

注意

可选的队列名字对象参数将按从左到右的顺序进行处理。 仅指定每个关键字一次。 指定 PathName 时,将同时替换 ComputerNameQueueName 参数。 特定的 FormatName 参数会删除 ComputerNameQueueNamePathName 参数的先前知识。

将排队组件侦听器与特定专用队列相关联

COM+ 排队组件侦听器仅从与标记为排队的 COM+ 应用程序关联的队列接收。 将 COM+ 应用程序标记为排队时,COM+ 将创建一个消息队列队列,其名称与应用程序相同。 该队列的消息队列格式名称位于与 COM+ 应用程序关联的 COM+ 目录中。 当 COM+ 应用程序已启动并被标记为侦听时,将启动 COM+ 应用程序进程中的侦听器并打开队列。 下表列出了影响消息队列消息的队列名字对象参数。

参数 说明
AppSpecific
指定无符号整数,例如 AppSpecific=12345。
AuthLevel
指定消息身份验证级别。 经过身份验证的消息经过数字签名,并且需要证书,用户才能发送消息。 可接受的值:
  • MQMSG_AUTH_LEVEL_NONE,0
  • MQMSG_AUTH_LEVEL_ALWAYS,1
交付
指定消息传送选项。 对于事务队列,此值将被忽略。 可接受的值:
  • MQMSG_DELIVERY_EXPRESS,0
  • MQMSG_DELIVERY_RECOVERABLE,1
EncryptAlgorithm
指定消息队列将用于加密和解密消息的加密算法。 可接受的值:
  • CALG_RC2, CALG_RC4
  • EncryptAlgorithm 的消息队列可接受的任何整数值。
HashAlgorithm
指定加密哈希函数。 可接受的值:
  • CALG_MD2、CALG_MD4、CALG_MD5、CALG_SHA、CALG_SHA1、CALG_MAC、CALG_SSL3_SHAMD5、CALG_HMAC、CALG_TLS1PRF
  • HashAlgorithm 的消息队列可接受的任何整数值。
期刊
指定消息队列消息日记选项。 可接受的值:
  • MQMSG_JOURNAL_NONE,0
  • MQMSG_DEADLETTER,1
  • MQMSG_JOURNAL,2
标签
指定最多 MQ_MAX_MSG_LABEL_LEN 个字符的消息标签字符串。
MaxTimeToReachQueue
指定消息到达队列的最长时间(以秒为单位)。
可接受的值:
  • INFINITE
  • LONG_LIVED
  • 秒数
MaxTimeToReceive
指定目标应用程序收到消息的最长时间(以秒为单位)。 可接受的值:
  • INFINITE
  • LONG_LIVED
  • 秒数
优先级
在允许的消息队列值内指定消息优先级。
可接受的值:
  • MQ_MIN_PRIORITY,0
  • MQ_MAX_PRIORITY,7
  • MQ_DEFAULT_PRIORITY,3
  • 介于 0 和 7 之间的数字。
PrivLevel
指定用于加密消息的隐私级别。
可接受的值:
  • MQMSG_PRIV_LEVEL_NONE, NONE, 0
  • MQMSG_PRIV_LEVEL_BODY, BODY,
  • MQMSG_PRIV_LEVEL_BODY_BASE, BODY_BASE, 1
  • MQMSG_PRIV_LEVEL_BODY_ENHANCED, BODY_ENHANCED, 3
跟踪
指定跟踪消息队列路由中使用的跟踪选项。
可接受的值:
  • MQMSG_TRACE_NONE,0
  • MQMSG_SEND_ROUTE_TO_REPORT_QUEUE,1

COM+ 管理 SDK 函数的完整集可使用 COM 对象获得。 这允许任何程序根据需要启动和停止 COM+ 应用程序。

注意

启动 COM+ 应用程序时,它是正在运行的应用程序,而不是应用程序中的各个组件。 如果应用程序调用非排队组件,则会启动包含组件的 COM+ 应用程序。 如果启用了侦听器检查框,侦听器也会启动并开始处理排队组件的消息。 虽然可以通过这种方式启动排队组件服务,但如果将排队组件和非排队组件打包成单个 COM+ 应用程序,请确保在执行非排队组件时真正希望排队组件启动。 如果情况并非如此,可将排队组件打包成独立于其他组件的 COM+ 应用程序。

激活组件队列