次の方法で共有


MessageQueue.Send メソッド

定義

オブジェクトをキューに送信します。

オーバーロード

名前 説明
Send(Object)

この MessageQueueによって参照される非トランザクション キューにオブジェクトを送信します。

Send(Object, MessageQueueTransaction)

この MessageQueueによって参照されるトランザクション キューにオブジェクトを送信します。

Send(Object, MessageQueueTransactionType)

この MessageQueueによって参照されるキューにオブジェクトを送信します。

Send(Object, String)

この MessageQueue によって参照される非トランザクション キューにオブジェクトを送信し、メッセージのラベルを指定します。

Send(Object, String, MessageQueueTransaction)

この MessageQueue によって参照されるトランザクション キューにオブジェクトを送信し、メッセージのラベルを指定します。

Send(Object, String, MessageQueueTransactionType)

この MessageQueue によって参照されるキューにオブジェクトを送信し、メッセージのラベルを指定します。

Send(Object)

この MessageQueueによって参照される非トランザクション キューにオブジェクトを送信します。

public:
 void Send(System::Object ^ obj);
public void Send(object obj);
member this.Send : obj -> unit
Public Sub Send (obj As Object)

パラメーター

obj
Object

キューに送信するオブジェクト。

例外

Path プロパティが設定されていません。

-又は-

メッセージ キュー メソッドにアクセスするときにエラーが発生しました。

次のコード例では、メッセージ キューに接続し、キューにメッセージを送信します。

#using <system.dll>
#using <system.messaging.dll.>

using namespace System;
using namespace System::Messaging;
ref class MyNewQueue
{
public:
   void SendMessage()
   {
      
      // Connect to a queue on the local computer.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
      
      // Send a message to the queue.
      if ( myQueue->Transactional )
      {
         
         // Create a transaction.
         MessageQueueTransaction^ myTransaction = gcnew MessageQueueTransaction;
         
         // Begin the transaction.
         myTransaction->Begin();
         
         // Send the message.
         myQueue->Send( "My Message Data.", myTransaction );
         
         // Commit the transaction.
         myTransaction->Commit();
      }
      else
      {
         myQueue->Send( "My Message Data." );
      }

      return;
   }

};

int main()
{
   
   // Create a new instance of the class.
   MyNewQueue^ myNewQueue = gcnew MyNewQueue;
   
   // Send a message to a queue.
   myNewQueue->SendMessage();
   return 0;
}
using System;
using System.Messaging;

namespace MyProject
{

    /// <summary>
    /// Provides a container class for the example.
    /// </summary>
    public class MyNewQueue
    {

        //**************************************************
        // Provides an entry point into the application.
        //
        // This example sends a message to a queue.
        //**************************************************

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Send a message to a queue.
            myNewQueue.SendMessage();

            return;
        }

        //**************************************************
        // Sends a message to a queue.
        //**************************************************
        
        public void SendMessage()
        {
                        
            // Connect to a queue on the local computer.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            // Send a message to the queue.
            if (myQueue.Transactional)
            {
                // Create a transaction.
                MessageQueueTransaction myTransaction = new
                    MessageQueueTransaction();

                // Begin the transaction.
                myTransaction.Begin();

                // Send the message.
                myQueue.Send("My Message Data.", myTransaction);

                // Commit the transaction.
                myTransaction.Commit();
            }
            else
            {
                myQueue.Send("My Message Data.");
            }

            return;
        }
    }
}
Imports System.Messaging

Public Class MyNewQueue


        '
        ' Provides an entry point into the application.
        ' 
        ' This example sends a message to a queue.
        '

        Public Shared Sub Main()

            ' Create a new instance of the class.
            Dim myNewQueue As New MyNewQueue

            ' Send a message to a queue.
            myNewQueue.SendMessage()

            Return

        End Sub


        '
        ' Sends a message to a queue.
        '

        Public Sub SendMessage()

            ' Connect to a queue on the local computer.
            Dim myQueue As New MessageQueue(".\myQueue")

            ' Send a message to the queue.
            If myQueue.Transactional = True Then

                ' Create a transaction.
                Dim myTransaction As New MessageQueueTransaction

                ' Begin the transaction.
                myTransaction.Begin()

                ' Send the message.
                myQueue.Send("My Message Data.", myTransaction)

                ' Commit the transaction.
                myTransaction.Commit()

            Else
                myQueue.Send("My Message Data.")
            End If

            Return

        End Sub

End Class

次のコード例では、アプリケーション定義の Order クラスをキューに送信し、そのキューからメッセージを受信します。

注釈

このオーバーロードを使用して、 obj パラメーターを含むメッセージを、 MessageQueueによって参照されるキューに送信します。 キューに送信するオブジェクトには、 Message または任意のマネージド オブジェクトを指定できます。 Message以外のオブジェクトを送信した場合、オブジェクトはシリアル化され、メッセージの本文に挿入されます。

このオーバーロードを使用してトランザクション キューにメッセージを送信すると、メッセージは配信不能キューに送信されます。 メッセージを他のメッセージを含むトランザクションの一部にする場合は、パラメーターとして MessageQueueTransaction または MessageQueueTransactionType を受け取るオーバーロードを使用します。

Send(Object)を呼び出す前に Formatter プロパティを設定しない場合、フォーマッタは既定でXmlMessageFormatterに設定されます。

DefaultPropertiesToSend プロパティは、Message以外のオブジェクトに適用されます。 DefaultPropertiesToSend メンバーを使用してラベルや優先度などを指定した場合、これらの値は、アプリケーションがキューに送信するときにMessage型ではないオブジェクトを含むメッセージに適用されます。 Messageを送信すると、Messageに設定されたプロパティ値がDefaultPropertiesToSendよりも優先され、メッセージのMessage.FormatterプロパティがキューのMessageQueue.Formatterプロパティよりも優先されます。

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象

Send(Object, MessageQueueTransaction)

この MessageQueueによって参照されるトランザクション キューにオブジェクトを送信します。

public:
 void Send(System::Object ^ obj, System::Messaging::MessageQueueTransaction ^ transaction);
public void Send(object obj, System.Messaging.MessageQueueTransaction transaction);
member this.Send : obj * System.Messaging.MessageQueueTransaction -> unit
Public Sub Send (obj As Object, transaction As MessageQueueTransaction)

パラメーター

obj
Object

キューに送信するオブジェクト。

transaction
MessageQueueTransaction

MessageQueueTransaction オブジェクトです。

例外

transaction パラメーターはnull

Path プロパティが設定されていません。

-又は-

メッセージ キュー アプリケーションは、トランザクションの使用が正しくありませんでした。

-又は-

メッセージ キュー メソッドにアクセスするときにエラーが発生しました。

次のコード例では、トランザクション キューに文字列を送信し、そのキューからメッセージを受信します。

#using <system.dll>
#using <system.messaging.dll>

using namespace System;
using namespace System::Messaging;

/// <summary>
/// Provides a container class for the example.
/// </summary>
ref class MyNewQueue
{
public:

   //*************************************************
   // Sends a message to a queue.
   //*************************************************
   void SendMessageTransactional()
   {
      // Connect to a queue on the local computer.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myTransactionalQueue" );

      // Send a message to the queue.
      if ( myQueue->Transactional )
      {
         // Create a transaction.
         MessageQueueTransaction^ myTransaction = gcnew MessageQueueTransaction;

         // Begin the transaction.
         myTransaction->Begin();

         // Send the message.
         myQueue->Send( "My Message Data.", myTransaction );

         // Commit the transaction.
         myTransaction->Commit();
      }

      return;
   }


   //*************************************************
   // Receives a message containing an Order.
   //*************************************************
   void ReceiveMessageTransactional()
   {
      // Connect to a transactional queue on the local computer.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myTransactionalQueue" );

      // Set the formatter.
      array<Type^>^p = gcnew array<Type^>(1);
      p[ 0 ] = String::typeid;
      myQueue->Formatter = gcnew XmlMessageFormatter( p );

      // Create a transaction.
      MessageQueueTransaction^ myTransaction = gcnew MessageQueueTransaction;
      try
      {
         // Begin the transaction.
         myTransaction->Begin();

         // Receive the message. 
         Message^ myMessage = myQueue->Receive( myTransaction );
         String^ myOrder = static_cast<String^>(myMessage->Body);

         // Display message information.
         Console::WriteLine( myOrder );

         // Commit the transaction.
         myTransaction->Commit();
      }
      catch ( MessageQueueException^ e ) 
      {
         // Handle nontransactional queues.
         if ( e->MessageQueueErrorCode == MessageQueueErrorCode::TransactionUsage )
         {
            Console::WriteLine( "Queue is not transactional." );
         }

         // Else catch other sources of MessageQueueException.
         // Roll back the transaction.
         myTransaction->Abort();
      }

      // Catch other exceptions as necessary, such as 
      // InvalidOperationException, thrown when the formatter 
      // cannot deserialize the message.
      return;
   }
};

//*************************************************
// Provides an entry point into the application.
// 
// This example sends and receives a message from
// a transactional queue.
//*************************************************
int main()
{
   // Create a new instance of the class.
   MyNewQueue^ myNewQueue = gcnew MyNewQueue;

   // Send a message to a queue.
   myNewQueue->SendMessageTransactional();

   // Receive a message from a queue.
   myNewQueue->ReceiveMessageTransactional();
   return 0;
}
using System;
using System.Messaging;

namespace MyProject
{

    /// <summary>
    /// Provides a container class for the example.
    /// </summary>
    public class MyNewQueue
    {

        //**************************************************
        // Provides an entry point into the application.
        //
        // This example sends and receives a message from
        // a transactional queue.
        //**************************************************

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Send a message to a queue.
            myNewQueue.SendMessageTransactional();

            // Receive a message from a queue.
            myNewQueue.ReceiveMessageTransactional();
        
            return;
        }

        //**************************************************
        // Sends a message to a queue.
        //**************************************************
        
        public void SendMessageTransactional()
        {
                        
            // Connect to a queue on the local computer.
            MessageQueue myQueue = new
                MessageQueue(".\\myTransactionalQueue");

            // Send a message to the queue.
            if (myQueue.Transactional)
            {
                // Create a transaction.
                MessageQueueTransaction myTransaction = new
                    MessageQueueTransaction();

                // Begin the transaction.
                myTransaction.Begin();

                // Send the message.
                myQueue.Send("My Message Data.", myTransaction);

                // Commit the transaction.
                myTransaction.Commit();
            }

            return;
        }

        //**************************************************
        // Receives a message containing an Order.
        //**************************************************
        
        public  void ReceiveMessageTransactional()
        {
            // Connect to a transactional queue on the local computer.
            MessageQueue myQueue = new
                MessageQueue(".\\myTransactionalQueue");

            // Set the formatter.
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(String)});
            
            // Create a transaction.
            MessageQueueTransaction myTransaction = new
                MessageQueueTransaction();

            try
            {
                // Begin the transaction.
                myTransaction.Begin();
                
                // Receive the message.
                Message myMessage =	myQueue.Receive(myTransaction);
                String myOrder = (String)myMessage.Body;

                // Display message information.
                Console.WriteLine(myOrder);

                // Commit the transaction.
                myTransaction.Commit();
            }
            
            catch (MessageQueueException e)
            {
                // Handle nontransactional queues.
                if (e.MessageQueueErrorCode ==
                    MessageQueueErrorCode.TransactionUsage)
                {
                    Console.WriteLine("Queue is not transactional.");
                }
                
                // Else catch other sources of MessageQueueException.

                // Roll back the transaction.
                myTransaction.Abort();
            }

            // Catch other exceptions as necessary, such as
            // InvalidOperationException, thrown when the formatter
            // cannot deserialize the message.

            return;
        }
    }
}
Imports System.Messaging

   
Public Class MyNewQueue


        '
        ' Provides an entry point into the application.
        ' 
        ' This example sends and receives a message from
        ' a transactional queue.
        '

        Public Shared Sub Main()

            ' Create a new instance of the class.
            Dim myNewQueue As New MyNewQueue

            ' Send a message to a queue.
            myNewQueue.SendMessageTransactional()

            ' Receive a message from a queue.
            myNewQueue.ReceiveMessageTransactional()

            Return

        End Sub


        '
        ' Sends a message to a queue.
        '

        Public Sub SendMessageTransactional()

            ' Connect to a queue on the local computer.
            Dim myQueue As New MessageQueue(".\myTransactionalQueue")

            ' Send a message to the queue.
            If myQueue.Transactional = True Then
                ' Create a transaction.
                Dim myTransaction As New MessageQueueTransaction

                ' Begin the transaction.
                myTransaction.Begin()

                ' Send the message.
                myQueue.Send("My Message Data.", myTransaction)

                ' Commit the transaction.
                myTransaction.Commit()
            End If

            Return

        End Sub


        '
        ' Receives a message containing an Order.
        '

        Public Sub ReceiveMessageTransactional()

            ' Connect to a transactional queue on the local computer.
            Dim myQueue As New MessageQueue(".\myTransactionalQueue")

            ' Set the formatter.
            myQueue.Formatter = New XmlMessageFormatter(New Type() _
                {GetType([String])})

            ' Create a transaction.
            Dim myTransaction As New MessageQueueTransaction

            Try

                ' Begin the transaction.
                myTransaction.Begin()

                ' Receive the message. 
                Dim myMessage As Message = _
                    myQueue.Receive(myTransaction)
                Dim myOrder As [String] = CType(myMessage.Body, _
                    [String])

                ' Display message information.
                Console.WriteLine(myOrder)

                ' Commit the transaction.
                myTransaction.Commit()


            Catch e As MessageQueueException

                ' Handle nontransactional queues.
                If e.MessageQueueErrorCode = _
                    MessageQueueErrorCode.TransactionUsage Then

                    Console.WriteLine("Queue is not transactional.")

                End If

                ' Else catch other sources of a MessageQueueException.


                ' Roll back the transaction.
                myTransaction.Abort()


                ' Catch other exceptions as necessary, such as 
                ' InvalidOperationException, thrown when the formatter
                ' cannot deserialize the message.

            End Try

            Return

        End Sub

End Class

注釈

このオーバーロードを使用して、transaction パラメーターによって定義された内部トランザクション コンテキストを使用して、MessageQueueによって参照されるトランザクション キューにobj パラメーターを含むメッセージを送信します。 キューに送信するオブジェクトには、 Message または任意のマネージド オブジェクトを指定できます。 Message以外のオブジェクトを送信した場合、オブジェクトはシリアル化され、メッセージの本文に挿入されます。

このオーバーロードを使用して非トランザクション キューにメッセージを送信する場合、メッセージは例外をスローせずに配信不能キューに送信される可能性があります。

Send(Object)を呼び出す前に Formatter プロパティを設定しない場合、フォーマッタは既定でXmlMessageFormatterに設定されます。

DefaultPropertiesToSend プロパティは、Message以外のオブジェクトに適用されます。 DefaultPropertiesToSend メンバーを使用してラベルや優先度などを指定した場合、これらの値は、アプリケーションがキューに送信するときにMessage型ではないオブジェクトを含むメッセージに適用されます。 Messageを送信すると、Messageに設定されたプロパティ値がDefaultPropertiesToSendよりも優先され、メッセージのMessage.FormatterプロパティがキューのMessageQueue.Formatterプロパティよりも優先されます。

MessageQueueTransaction はスレッドアパートメント対応であるため、アパートメントの状態が STA場合、複数のスレッドでトランザクションを使用することはできません。 Visual Basic では、メイン スレッドの状態がSTAに設定されるため、Main サブルーチンにMTAThreadAttributeを適用する必要があります。 それ以外の場合、別のスレッドを使用してトランザクション メッセージを送信すると、 MessageQueueException 例外がスローされます。 次のフラグメントを使用して、 MTAThreadAttribute を適用します。

<System.MTAThreadAttribute>
 public sub Main()

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象

Send(Object, MessageQueueTransactionType)

この MessageQueueによって参照されるキューにオブジェクトを送信します。

public:
 void Send(System::Object ^ obj, System::Messaging::MessageQueueTransactionType transactionType);
public void Send(object obj, System.Messaging.MessageQueueTransactionType transactionType);
member this.Send : obj * System.Messaging.MessageQueueTransactionType -> unit
Public Sub Send (obj As Object, transactionType As MessageQueueTransactionType)

パラメーター

obj
Object

キューに送信するオブジェクト。

transactionType
MessageQueueTransactionType

メッセージに関連付けるトランザクション コンテキストの種類を記述する、 MessageQueueTransactionType 値の 1 つ。

例外

transactionType パラメーターは、MessageQueueTransactionType メンバーの 1 つではありません。

Path プロパティが設定されていません。

-又は-

メッセージ キュー メソッドにアクセスするときにエラーが発生しました。

次のコード例は、 Send(Object, MessageQueueTransactionType)の使用方法を示しています。


// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message^ msg = gcnew Message("Example Message Body");

// Send the message.
queue->Send(msg, MessageQueueTransactionType::Single);

queue->Close();

// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message msg = new Message("Example Message Body");

// Send the message.
queue.Send(msg, MessageQueueTransactionType.Single);

注釈

このオーバーロードを使用して、transactionType パラメーターで定義されたトランザクション コンテキストを使用して、obj パラメーターを含むメッセージをMessageQueueによって参照されるキューに送信します。 メッセージの送信に使用するスレッドに外部トランザクション コンテキストが既にアタッチされている場合は、transactionType パラメーターのAutomaticを指定します。 メッセージを 1 つの内部トランザクションとして送信する場合は、 Single を指定します。 非トランザクション スレッドにトランザクション メッセージを送信する場合は、 None を指定できます。

キューに送信するオブジェクトには、 Message または任意のマネージド オブジェクトを指定できます。 Message以外のオブジェクトを送信した場合、オブジェクトはシリアル化され、メッセージの本文に挿入されます。

Send(Object)を呼び出す前に Formatter プロパティを設定しない場合、フォーマッタは既定でXmlMessageFormatterに設定されます。

DefaultPropertiesToSend プロパティは、Message以外のオブジェクトに適用されます。 DefaultPropertiesToSend メンバーを使用してラベルや優先度などを指定した場合、これらの値は、アプリケーションがキューに送信するときにMessage型ではないオブジェクトを含むメッセージに適用されます。 Messageを送信すると、Messageに設定されたプロパティ値がDefaultPropertiesToSendよりも優先され、メッセージのMessage.FormatterプロパティがキューのMessageQueue.Formatterプロパティよりも優先されます。

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象

Send(Object, String)

この MessageQueue によって参照される非トランザクション キューにオブジェクトを送信し、メッセージのラベルを指定します。

public:
 void Send(System::Object ^ obj, System::String ^ label);
public void Send(object obj, string label);
member this.Send : obj * string -> unit
Public Sub Send (obj As Object, label As String)

パラメーター

obj
Object

キューに送信するオブジェクト。

label
String

メッセージのラベル。

例外

label パラメーターはnull

Path プロパティが設定されていません。

-又は-

メッセージ キュー メソッドにアクセスするときにエラーが発生しました。

次のコード例は、 Send(Object, String)の使用方法を示しています。


// Connect to a queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");

// Create a new message.
Message^ msg = gcnew Message("Example Message Body");

// Send the message.
queue->Send(msg, "Example Message Label");

queue->Close();

// Connect to a queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");

// Create a new message.
Message msg = new Message("Example Message Body");

// Send the message.
queue.Send(msg, "Example Message Label");

注釈

このオーバーロードを使用して、 obj パラメーターを含むメッセージを、 MessageQueueによって参照されるキューに送信します。 このオーバーロードでは、メッセージを識別する文字列ラベルを指定できます。 キューに送信するオブジェクトには、 Message、構造体、データ オブジェクト、または任意のマネージド オブジェクトを指定できます。 Message以外のオブジェクトを送信した場合、オブジェクトはシリアル化され、メッセージの本文に挿入されます。

メッセージ ラベルはメッセージ キュー ラベルとは異なりますが、どちらもアプリケーションに依存し、メッセージ キューに対する継承の意味はありません。

このオーバーロードを使用してトランザクション キューにメッセージを送信すると、メッセージは配信不能キューに送信されます。 メッセージを他のメッセージを含むトランザクションの一部にする場合は、パラメーターとして MessageQueueTransaction または MessageQueueTransactionType を受け取るオーバーロードを使用します。

メッセージを送信する前に、このMessageQueue インスタンスの Path プロパティを指定する必要があります。 Send(Object)を呼び出す前に Formatter プロパティを設定しない場合、フォーマッタは既定でXmlMessageFormatterに設定されます。

DefaultPropertiesToSend プロパティは、Message以外のオブジェクトに適用されます。 DefaultPropertiesToSend メンバーを使用してラベルや優先度などを指定した場合、これらの値は、アプリケーションがキューに送信するときにMessage型ではないオブジェクトを含むメッセージに適用されます。 Messageを送信すると、Messageに設定されたプロパティ値がDefaultPropertiesToSendよりも優先され、メッセージのMessage.FormatterプロパティがキューのMessageQueue.Formatterプロパティよりも優先されます。

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象

Send(Object, String, MessageQueueTransaction)

この MessageQueue によって参照されるトランザクション キューにオブジェクトを送信し、メッセージのラベルを指定します。

public:
 void Send(System::Object ^ obj, System::String ^ label, System::Messaging::MessageQueueTransaction ^ transaction);
public void Send(object obj, string label, System.Messaging.MessageQueueTransaction transaction);
member this.Send : obj * string * System.Messaging.MessageQueueTransaction -> unit
Public Sub Send (obj As Object, label As String, transaction As MessageQueueTransaction)

パラメーター

obj
Object

キューに送信するオブジェクト。

label
String

メッセージのラベル。

transaction
MessageQueueTransaction

MessageQueueTransaction オブジェクトです。

例外

label パラメーターはnull

-又は-

transaction パラメーターはnull

Path プロパティが設定されていません。

-又は-

メッセージ キュー アプリケーションで、トランザクションの使用状況が正しくありませんでした。

-又は-

メッセージ キュー メソッドにアクセスするときにエラーが発生しました。

次のコード例は、 Send(Object, String, MessageQueueTransaction)の使用方法を示しています。


// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message^ msg = gcnew Message("Example Message Body");

// Create a message queuing transaction.
MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction();

try
{
    // Begin a transaction.
    transaction->Begin();

    // Send the message to the queue.
    queue->Send(msg, "Example Message Label", transaction);

    // Commit the transaction.
    transaction->Commit();
}
catch (Exception^ ex)
{
    // Cancel the transaction.
    transaction->Abort();

    // Propagate the exception.
    throw ex;
}
finally
{
    // Dispose of the transaction object.
    delete transaction;
    queue->Close();
}

// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message msg = new Message("Example Message Body");

// Create a message queuing transaction.
MessageQueueTransaction transaction = new MessageQueueTransaction();

try
{
    // Begin a transaction.
    transaction.Begin();

    // Send the message to the queue.
    queue.Send(msg, "Example Message Label", transaction);

    // Commit the transaction.
    transaction.Commit();
}
catch (System.Exception e)
{
    // Cancel the transaction.
    transaction.Abort();

    // Propagate the exception.
    throw e;
}
finally
{
    // Dispose of the transaction object.
    transaction.Dispose();
}

注釈

このオーバーロードを使用して、transaction パラメーターによって定義された内部トランザクション コンテキストを使用して、MessageQueueによって参照されるトランザクション キューにobj パラメーターを含むメッセージを送信します。 このオーバーロードでは、メッセージを識別する文字列ラベルを指定できます。 キューに送信するオブジェクトには、 Message、構造体、データ オブジェクト、または任意のマネージド オブジェクトを指定できます。 Message以外のオブジェクトを送信した場合、オブジェクトはシリアル化され、メッセージの本文に挿入されます。

メッセージ ラベルはメッセージ キュー ラベルとは異なりますが、どちらもアプリケーションに依存し、メッセージ キューに対する継承の意味はありません。

このオーバーロードを使用して非トランザクション キューにメッセージを送信する場合、メッセージは例外をスローせずに配信不能キューに送信される可能性があります。

Send(Object)を呼び出す前に Formatter プロパティを設定しない場合、フォーマッタは既定でXmlMessageFormatterに設定されます。

DefaultPropertiesToSend プロパティは、Message以外のオブジェクトに適用されます。 DefaultPropertiesToSend メンバーを使用してラベルや優先度などを指定した場合、これらの値は、アプリケーションがキューに送信するときにMessage型ではないオブジェクトを含むメッセージに適用されます。 Messageを送信する場合、Messageに設定されたプロパティ値がDefaultPropertiesToSendよりも優先され、メッセージの Message.Formatter プロパティがキューのMessageQueue.Formatter プロパティよりも優先されます

MessageQueueTransaction はスレッドアパートメント対応であるため、アパートメントの状態が STA場合、複数のスレッドでトランザクションを使用することはできません。 Visual Basic では、メイン スレッドの状態がSTAに設定されるため、Main サブルーチンにMTAThreadAttributeを適用する必要があります。 それ以外の場合、別のスレッドを使用してトランザクション メッセージを送信すると、 MessageQueueException 例外がスローされます。 次のフラグメントを使用して、 MTAThreadAttribute を適用します。

<System.MTAThreadAttribute>
 public sub Main()

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象

Send(Object, String, MessageQueueTransactionType)

この MessageQueue によって参照されるキューにオブジェクトを送信し、メッセージのラベルを指定します。

public:
 void Send(System::Object ^ obj, System::String ^ label, System::Messaging::MessageQueueTransactionType transactionType);
public void Send(object obj, string label, System.Messaging.MessageQueueTransactionType transactionType);
member this.Send : obj * string * System.Messaging.MessageQueueTransactionType -> unit
Public Sub Send (obj As Object, label As String, transactionType As MessageQueueTransactionType)

パラメーター

obj
Object

キューに送信するオブジェクト。

label
String

メッセージのラベル。

transactionType
MessageQueueTransactionType

メッセージに関連付けるトランザクション コンテキストの種類を記述する、 MessageQueueTransactionType 値の 1 つ。

例外

label パラメーターはnull

メッセージ キュー アプリケーションで、トランザクションの使用状況が正しくありませんでした。

transactionType パラメーターは、MessageQueueTransactionType メンバーの 1 つではありません。

Path プロパティが設定されていません。

-又は-

メッセージ キュー メソッドにアクセスするときにエラーが発生しました。

次のコード例は、 Send(Object, String, MessageQueueTransactionType)の使用方法を示しています。


// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message^ msg = gcnew Message("Example Message Body");

// Send the message.
queue->Send(msg, "Example Message Label",
    MessageQueueTransactionType::Single);

queue->Close();

// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message msg = new Message("Example Message Body");

// Send the message.
queue.Send(msg, "Example Message Label",
    MessageQueueTransactionType.Single);

注釈

このオーバーロードを使用して、transactionType パラメーターで定義されたトランザクション コンテキストを使用して、obj パラメーターを含むメッセージをMessageQueueによって参照されるキューに送信します。 メッセージの送信に使用するスレッドに外部トランザクション コンテキストが既にアタッチされている場合は、transactionType パラメーターのAutomaticを指定します。 メッセージを 1 つの内部トランザクションとして送信する場合は、 Single を指定します。 非トランザクション スレッドにトランザクション メッセージを送信する場合は、 None を指定できます。

キューに送信するオブジェクトには、 Message または任意のマネージド オブジェクトを指定できます。 Message以外のオブジェクトを送信した場合、オブジェクトはシリアル化され、メッセージの本文に挿入されます。 このオーバーロードでは、メッセージを識別する文字列ラベルを指定できます。

メッセージ ラベルはメッセージ キュー ラベルとは異なりますが、どちらもアプリケーションに依存し、メッセージ キューに対する継承の意味はありません。

Send(Object)を呼び出す前に Formatter プロパティを設定しない場合、フォーマッタは既定でXmlMessageFormatterに設定されます。

DefaultPropertiesToSend プロパティは、Message以外のオブジェクトに適用されます。 DefaultPropertiesToSend メンバーを使用してラベルや優先度などを指定した場合、これらの値は、アプリケーションがキューに送信するときにMessage型ではないオブジェクトを含むメッセージに適用されます。 Messageを送信すると、Messageに設定されたプロパティ値がDefaultPropertiesToSendよりも優先され、メッセージのMessage.FormatterプロパティがキューのMessageQueue.Formatterプロパティよりも優先されます。

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象