Прочитать на английском

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


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 (object obj);

Параметры

obj
Object

Объект, отправляемый в очередь.

Исключения

Свойство Path не установлено.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем примере кода выполняется подключение к очереди сообщений и отправка сообщения в очередь.

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 == true)
            {
                // 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;
        }
    }
}

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

Комментарии

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

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

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

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

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

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

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

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Send(Object, MessageQueueTransaction)

Отправляет объект в транзакционную очередь, на которую ссылается этот объект MessageQueue.

public void Send (object obj, System.Messaging.MessageQueueTransaction transaction);

Параметры

obj
Object

Объект, отправляемый в очередь.

Исключения

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

Свойство Path не установлено.

-или-

Приложение Message Queuing указало на неверное использование транзакции.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем примере кода строка отправляется в очередь транзакций, а затем из нее поступает сообщение.

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 == true)
            {
                // 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;
        }
    }
}

Комментарии

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

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

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

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

MessageQueueTransaction параметр учитывает подразделения потоков, поэтому, если ваше подразделение находится в STAсостоянии , вы не сможете использовать транзакцию в нескольких потоках. Visual Basic задает для потока STAmain состояние , поэтому необходимо применить MTAThreadAttribute в подпрограмме Main . В противном случае при отправке транзакционного сообщения с помощью другого потока создастся исключение MessageQueueException. Применяется MTAThreadAttribute с помощью следующего фрагмента.

<System.MTAThreadAttribute>
 public sub Main()

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

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

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

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Send(Object, MessageQueueTransactionType)

Отправляет объект в очередь, на которую ссылается этот объект MessageQueue.

public void Send (object obj, System.Messaging.MessageQueueTransactionType transactionType);

Параметры

obj
Object

Объект, отправляемый в очередь.

transactionType
MessageQueueTransactionType

Одно из значений MessageQueueTransactionType, описывающее тип контекста транзакции, связываемого с сообщением.

Исключения

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

Свойство Path не установлено.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем коде показано использование функции Send(Object, MessageQueueTransactionType).


// 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 очереди.

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

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

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

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Send(Object, String)

Отправляет объект в нетранзакционную очередь, на которую ссылается этот объект MessageQueue, и задает метку сообщения.

public void Send (object obj, string label);

Параметры

obj
Object

Объект, отправляемый в очередь.

label
String

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

Исключения

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

Свойство Path не установлено.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем коде показано использование функции Send(Object, String).


// 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 очереди.

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

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

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

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Send(Object, String, MessageQueueTransaction)

Отправляет объект в транзакционную очередь, на которую ссылается этот объект MessageQueue, и задает метку сообщения.

public void Send (object obj, string label, System.Messaging.MessageQueueTransaction transaction);

Параметры

obj
Object

Объект, отправляемый в очередь.

label
String

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

Исключения

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

-или-

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

Свойство Path не установлено.

-или-

Приложение Message Queuing указало на неверное использование транзакции.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем коде показано использование функции Send(Object, String, MessageQueueTransaction).


// 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 для , имеют приоритет над DefaultPropertiesToSend свойством сообщения, а свойство сообщения Message.Formatter имеет приоритет над свойством MessageQueue.Formatter очереди.

MessageQueueTransaction учитывает потоки, поэтому, если состояние квартиры — STA, транзакцию нельзя использовать в нескольких потоках. Visual Basic задает для потока STAmain состояние , поэтому необходимо применить MTAThreadAttribute в подпрограмме Main . В противном случае при отправке транзакционного сообщения с помощью другого потока создастся исключение MessageQueueException. Примените с MTAThreadAttribute помощью следующего фрагмента.

<System.MTAThreadAttribute>
 public sub Main()

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

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

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

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Send(Object, String, MessageQueueTransactionType)

Отправляет объект в очередь, на которую ссылается этот объект MessageQueue, и задает метку сообщения.

public void Send (object obj, string label, System.Messaging.MessageQueueTransactionType transactionType);

Параметры

obj
Object

Объект, отправляемый в очередь.

label
String

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

transactionType
MessageQueueTransactionType

Одно из значений MessageQueueTransactionType, описывающее тип контекста транзакции, связываемого с сообщением.

Исключения

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

Приложение Message Queuing указало на неверное использование транзакции.

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

Свойство Path не установлено.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем коде показано использование функции Send(Object, String, MessageQueueTransactionType).


// 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 очереди.

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

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

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

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1