适用范围:SQL Server 
Azure 数据工厂中的 SSIS Integration Runtime
消息队列(又称为 MSMQ)使开发人员可以通过发送和接收消息,轻松实现与应用程序之间的快速可靠通信。 消息队列既可位于本地计算机,也可位于远程计算机;既可以是公共的,也可以是私有的。 在 Integration Services 中,MSMQ 连接管理器和消息队列任务不支持向远程计算机上的私有队列发送消息。 但通过使用脚本任务,可轻松地向远程私有队列发送消息。
注意
如果希望创建可更方便地重用于多个包的任务,请考虑以此脚本任务示例中的代码为基础,创建自定义任务。 有关详细信息,请参阅 开发自定义任务。
说明
下面的示例使用一个现有 MSMQ 连接管理器以及 System.Messaging 命名空间的对象和方法,向远程私有消息队列发送包含在包变量中的文本。 对 MSMQ 连接管理器的 M:Microsoft.SqlServer.Dts.ManagedConnections.MSMQConn.AcquireConnection(System.Object) 方法的调用可返回 MessageQueue 对象,其 Send 方法可完成此任务。
配置此脚本任务示例
- 使用默认名称创建一个 MSMQ 连接管理器。 设置有效远程私有队列的路径,格式如下: - FORMATNAME:DIRECT=OS:<computername>\private$\<queuename>
- 创建一个名为 MessageText 的 String 类型的 Integration Services 变量,将消息文本传入脚本。 输入默认消息作为该变量的值。 
- 向设计图面添加一个脚本任务,并对其进行编辑。 在“脚本任务编辑器”的“脚本”选项卡中,将 - MessageText变量添加到 ReadOnlyVariables 属性中,使该变量在脚本内可用。
- 单击“编辑脚本”,打开 Microsoft Visual Studio Tools for Applications (VSTA) 脚本编辑器。 
- 在脚本项目中添加对 System.Messaging 命名空间的引用。 
- 用下面部分中的代码替换脚本窗口中的内容。 
代码
Imports System  
Imports Microsoft.SqlServer.Dts.Runtime  
Imports System.Messaging  
  
Public Class ScriptMain  
  
    Public Sub Main()  
  
        Dim remotePrivateQueue As MessageQueue  
        Dim messageText As String  
  
        remotePrivateQueue = _  
            DirectCast(Dts.Connections("Message Queue Connection Manager").AcquireConnection(Dts.Transaction), _  
            MessageQueue)  
        messageText = DirectCast(Dts.Variables("MessageText").Value, String)  
        remotePrivateQueue.Send(messageText)  
  
        Dts.TaskResult = ScriptResults.Success  
  
    End Sub  
  
End Class  
using System;  
using Microsoft.SqlServer.Dts.Runtime;  
using System.Messaging;  
  
public class ScriptMain  
{  
  
    public void Main()  
        {  
  
            MessageQueue remotePrivateQueue = new MessageQueue();  
            string messageText;  
  
            remotePrivateQueue = (MessageQueue)(Dts.Connections["Message Queue Connection Manager"].AcquireConnection(Dts.Transaction) as MessageQueue);  
            messageText = (string)(Dts.Variables["MessageText"].Value);  
            remotePrivateQueue.Send(messageText);  
  
            Dts.TaskResult = (int)ScriptResults.Success;  
  
        }  
  
}