スクリプト タスクによるリモート プライベート メッセージ キューへの送信
メッセージ キュー (MSMQ) では、開発者がメッセージを送受信することにより、アプリケーション プログラムとすばやく確実に通信できます。 メッセージ キューは、ローカル コンピューターまたはリモート コンピューターに存在し、パブリックであることも、プライベートであることもあります。 Integration Services の MSMQ 接続マネージャーとメッセージ キュー タスクでは、リモート コンピューター上のプライベート キューへの送信はサポートされません。 ただし、スクリプト タスクを使用することにより、リモート プライベート キューにメッセージを簡単に送信できます。
注 |
---|
複数のパッケージでより簡単に再利用できるタスクを作成する場合は、このスクリプト タスク サンプルのコードを基にした、カスタム タスクの作成を検討してください。 詳細については、「カスタム タスクの開発」を参照してください。 |
説明
次の例では、既存の MSMQ 接続マネージャーを System.Messaging 名前空間のオブジェクトおよびメソッドと共に使用して、パッケージ変数に含まれているテキストをリモート プライベート メッセージ キューに送信します。 MSMQ 接続マネージャーの M:Microsoft.SqlServer.Dts.ManagedConnections.MSMQConn.AcquireConnection(System.Object) メソッドを呼び出すと、このタスクを実行する Send メソッドを持つ MessageQueue オブジェクトが返されます。
このスクリプト タスクの例を構成するには
既定の名前を使用して MSMQ 接続マネージャーを作成します。 有効なリモート プライベート キューのパスを次の形式で設定します。
FORMATNAME:DIRECT=OS:<computername>\private$\<queuename>
メッセージ テキストをスクリプトに渡すために、String 型の MessageText という名前の Integration Services 変数を作成します。 この変数の値として既定のメッセージを入力します。
スクリプト タスクをデザイン画面に追加して編集します。 [スクリプト タスク エディター] の [スクリプト] タブで、ReadOnlyVariables プロパティに MessageText 変数を追加し、この変数をスクリプト内で使用できるようにします。
[スクリプトの編集] をクリックして、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;
}
}
|