Поделиться через


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 в качестве параметра.

Если свойство не задано Formatter перед вызовом Send(Object), по умолчанию для метода форматирования используется значение 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 имеет значение 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

Комментарии

Используйте эту перегрузку для отправки сообщения, содержащего obj параметр в очередь транзакций, на которую ссылается MessageQueueстрока, используя внутренний контекст транзакции, определенный transaction параметром. Объект, отправляемый в очередь, может быть или любым управляемым Message объектом. При отправке любого объекта, отличного от объекта Message, объект сериализуется и вставляется в текст сообщения.

Если вы используете эту перегрузку для отправки сообщения в очередь без транзакций, сообщение может быть отправлено в очередь недоставленных писем без исключения.

Если свойство не задано Formatter перед вызовом Send(Object), по умолчанию для метода форматирования используется значение XmlMessageFormatter.

Свойство DefaultPropertiesToSend применяется к любому объекту, отличному Messageот объекта. Если указать, например, метку или приоритет с помощью DefaultPropertiesToSend элемента, эти значения применяются к любому сообщению, содержащим объект, который не является типом Message , когда приложение отправляет его в очередь. При отправке Messageзначения свойств, заданные для Message приоритета DefaultPropertiesToSend , и свойство сообщения Message.Formatter имеет приоритет над свойством очереди MessageQueue.Formatter .

MessageQueueTransaction учитывает потоки квартиры, поэтому если ваше состояние STAквартиры имеет значение, вы не можете использовать транзакцию в нескольких потоках. Visual Basic задает состояние основного потока STA, поэтому необходимо применить MTAThreadAttribute в подпрограмме Main . В противном случае отправка транзакционного сообщения с помощью другого потока вызывает 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 значений, описывающее тип контекста транзакции для связывания с сообщением.

Исключения

Параметр transactionType не является одним из MessageQueueTransactionType членов.

Свойство 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);

Комментарии

Используйте эту перегрузку для отправки сообщения, содержащего obj параметр в очередь, на которую ссылается MessageQueueобъект, с помощью контекста транзакции, определенного transactionType параметром. Укажите Automatic для transactionType параметра, если у вас уже есть внешний контекст транзакции, подключенный к потоку, который вы хотите использовать для отправки сообщения. Укажите Single , нужно ли отправлять сообщение как одну внутреннюю транзакцию. Можно указать None , нужно ли отправлять транзакционные сообщения в поток, отличный от транзакций.

Объект, отправляемый в очередь, может быть или любым управляемым Message объектом. При отправке любого объекта, отличного от объекта Message, объект сериализуется и вставляется в текст сообщения.

Если свойство не задано Formatter перед вызовом Send(Object), по умолчанию для метода форматирования используется значение 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 в качестве параметра.

Перед Path отправкой сообщения необходимо указать свойство для этого MessageQueue экземпляра. Если свойство не задано Formatter перед вызовом Send(Object), по умолчанию для метода форматирования используется значение 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

Метка сообщения.

Исключения

Параметр 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();
}

Комментарии

Используйте эту перегрузку для отправки сообщения, содержащего obj параметр в очередь транзакций, на которую ссылается MessageQueueстрока, используя внутренний контекст транзакции, определенный transaction параметром. С помощью этой перегрузки можно указать строковую метку, которая идентифицирует сообщение. Объект, который отправляется в очередь, может быть Messageструктурой, объектом данных или любым управляемым объектом. При отправке любого объекта, отличного от объекта Message, объект сериализуется и вставляется в текст сообщения.

Метка сообщения отличается от метки очереди сообщений, но оба зависят от приложения и не имеют значения для очереди сообщений.

Если вы используете эту перегрузку для отправки сообщения в очередь без транзакций, сообщение может быть отправлено в очередь недоставленных писем без исключения.

Если свойство не задано Formatter перед вызовом Send(Object), по умолчанию для метода форматирования используется значение XmlMessageFormatter.

Свойство DefaultPropertiesToSend применяется к любому объекту, отличному Messageот объекта. Если указать, например, метку или приоритет с помощью DefaultPropertiesToSend элемента, эти значения применяются к любому сообщению, содержащим объект, который не является типом Message , когда приложение отправляет его в очередь. При отправке Messageзначения свойств, заданные для Message приоритета, а свойство сообщения Message.Formatter имеет приоритет DefaultPropertiesToSend над свойством очередиMessageQueue.Formatter.

MessageQueueTransaction учитывает потоки квартиры, поэтому если ваше состояние STAквартиры имеет значение, вы не можете использовать транзакцию в нескольких потоках. Visual Basic задает состояние основного потока STA, поэтому необходимо применить MTAThreadAttribute в подпрограмме Main . В противном случае отправка транзакционного сообщения с помощью другого потока вызывает 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 значений, описывающее тип контекста транзакции для связывания с сообщением.

Исключения

Параметр label имеет значение null.

Приложение очереди сообщений указало неправильное использование транзакций.

Параметр transactionType не является одним из MessageQueueTransactionType членов.

Свойство 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);

Комментарии

Используйте эту перегрузку для отправки сообщения, содержащего obj параметр в очередь, на которую ссылается MessageQueueобъект, с помощью контекста транзакции, определенного transactionType параметром. Укажите Automatic для transactionType параметра, если у вас уже есть внешний контекст транзакции, подключенный к потоку, который вы хотите использовать для отправки сообщения. Укажите Single , нужно ли отправлять сообщение как одну внутреннюю транзакцию. Можно указать None , нужно ли отправлять транзакционные сообщения в поток, отличный от транзакций.

Объект, отправляемый в очередь, может быть или любым управляемым Message объектом. При отправке любого объекта, отличного от объекта Message, объект сериализуется и вставляется в текст сообщения. С помощью этой перегрузки можно указать строковую метку, которая идентифицирует сообщение.

Метка сообщения отличается от метки очереди сообщений, но оба зависят от приложения и не имеют значения для очереди сообщений.

Если свойство не задано Formatter перед вызовом Send(Object), по умолчанию для метода форматирования используется значение XmlMessageFormatter.

Свойство DefaultPropertiesToSend применяется к любому объекту, отличному Messageот объекта. Если указать, например, метку или приоритет с помощью DefaultPropertiesToSend элемента, эти значения применяются к любому сообщению, содержащим объект, который не является типом Message , когда приложение отправляет его в очередь. При отправке Messageзначения свойств, заданные для Message приоритета DefaultPropertiesToSend, и свойство сообщения Message.Formatter имеет приоритет над свойством очереди MessageQueue.Formatter .

В следующей таблице показано, доступен ли этот метод в различных режимах рабочей группы.

Режим рабочей группы В наличии
Локальный компьютер Да
Имя локального компьютера и прямого формата Да
Удаленный компьютер Нет
Имя удаленного компьютера и прямого формата Да

См. также раздел

Применяется к