MessageQueue.Send メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オブジェクトをキューに送信します。
オーバーロード
| 名前 | 説明 |
|---|---|
| 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
キューに送信するオブジェクト。
例外
例
次のコード例では、メッセージ キューに接続し、キューにメッセージを送信します。
#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()
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
| ワークグループ モード | 在庫有り |
|---|---|
| ローカル コンピューター | はい |
| ローカル コンピューターと直接の形式名 | はい |
| リモート コンピューター | いいえ |
| リモート コンピューターと直接の形式名 | はい |
こちらもご覧ください
- DefaultPropertiesToSend
- Message
- MessageQueueTransaction
- Transactional
- Peek()
- Receive()
- BeginPeek()
- BeginReceive()
適用対象
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 つではありません。
例
次のコード例は、 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プロパティよりも優先されます。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
| ワークグループ モード | 在庫有り |
|---|---|
| ローカル コンピューター | はい |
| ローカル コンピューターと直接の形式名 | はい |
| リモート コンピューター | いいえ |
| リモート コンピューターと直接の形式名 | はい |
こちらもご覧ください
- MessageQueueTransactionType
- DefaultPropertiesToSend
- Message
- Transactional
- Peek()
- Receive()
- BeginPeek()
- BeginReceive()
適用対象
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。
例
次のコード例は、 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 オブジェクトです。
例外
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()
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
| ワークグループ モード | 在庫有り |
|---|---|
| ローカル コンピューター | はい |
| ローカル コンピューターと直接の形式名 | はい |
| リモート コンピューター | いいえ |
| リモート コンピューターと直接の形式名 | はい |
こちらもご覧ください
- DefaultPropertiesToSend
- Message
- MessageQueueTransaction
- Transactional
- Label
- Peek()
- Receive()
- BeginPeek()
- BeginReceive()
適用対象
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 つではありません。
例
次のコード例は、 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プロパティよりも優先されます。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
| ワークグループ モード | 在庫有り |
|---|---|
| ローカル コンピューター | はい |
| ローカル コンピューターと直接の形式名 | はい |
| リモート コンピューター | いいえ |
| リモート コンピューターと直接の形式名 | はい |
こちらもご覧ください
- MessageQueueTransactionType
- DefaultPropertiesToSend
- Message
- Transactional
- Label
- Peek()
- Receive()
- BeginPeek()
- BeginReceive()