英語で読む

次の方法で共有


Acknowledgment 列挙型

定義

試行されたメッセージ配信の結果を指定します。

C#
public enum Acknowledgment
継承
Acknowledgment

フィールド

名前 説明
AccessDenied 32772

送信先キューにメッセージを送信するために必要な権限を送信元アプリケーションが持っていないことを示す否定到達受信確認。

BadDestinationQueue 32768

送信元アプリケーションが送信先キューを使用できない状態にあることを示す否定到達受信確認。

BadEncryption 32775

送信先キュー マネージャーが非公開メッセージを復号化できないことを示す否定到達受信確認。

BadSignature 32774

元のメッセージのデジタル署名が無効で、メッセージ キューが認証できないことを示す否定到達受信確認。

CouldNotEncrypt 32776

送信元キュー マネージャーが非公開メッセージを暗号化できないことを示す否定到達受信確認。

HopCountExceeded 32773

元のメッセージのホップ数 (中間サーバーの数を示します) が超過したことを示す否定到達受信確認。 最大ホップ数 15 はメッセージ キューによって設定され、不変です。

None 0

メッセージが受信確認メッセージではありません。

NotTransactionalMessage 32778

トランザクション キューに非トランザクション メッセージが送信されたことを示す否定到達受信確認。

NotTransactionalQueue 32777

非トランザクション キューにトランザクション メッセージが送信されたことを示す否定到達受信確認。

Purged 32769

メッセージが送信先キューに到達する前に削除されたことを示す否定到達受信確認。

QueueDeleted 49152

メッセージが読み取られる前にキューが削除されたことを示す否定読み取り受信確認。

QueueExceedMaximumSize 32771

送信先キューがフルのため、元のメッセージが配信されなかったことを示す否定到達受信確認。

QueuePurged 49153

メッセージが読み取られる前にキューが削除されたことを示す否定読み取り受信確認。

ReachQueue 2

元のメッセージが送信先キューに到達したことを示す肯定到達受信確認。

ReachQueueTimeout 32770

元のメッセージが送信先キューに到達する前に、キュー到達制限時間タイマーまたは受信制限時間タイマーがタイムアウトになったことを示す否定到達受信確認。

Receive 16384

元のメッセージが受信側アプリケーションにより受信されたことを示す肯定読み取り受信確認。

ReceiveTimeout 49154

受信制限時間タイマーがタイムアウトになる前に、キューから元のメッセージを受信できなかったことを示す否定読み取り受信確認。

次のコード例では、キューとの間で注文を含むメッセージを送受信します。 具体的には、元のメッセージがキューに到達するか、キューから取得されたときに、肯定的な受信確認を要求します。

C#
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 queue.
        //**************************************************

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

            // Create new queues.
            CreateQueue(".\\myQueue");
            CreateQueue(".\\myAdministrationQueue");

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

            // Receive messages from a queue.
            string messageId = myNewQueue.ReceiveMessage();

            // Receive acknowledgment message.
            if(messageId != null)
            {
                myNewQueue.ReceiveAcknowledgment(messageId, ".\\myAdministrationQueue");
            }

            return;
        }

        //**************************************************
        // Creates a new queue.
        //**************************************************

        public static void CreateQueue(string queuePath)
        {
            try	
            {
                if(!MessageQueue.Exists(queuePath))
                {
                    MessageQueue.Create(queuePath);
                }
                else
                {
                    Console.WriteLine(queuePath + " already exists.");
                }
            }
            catch (MessageQueueException e)
            {
                Console.WriteLine(e.Message);
            }
        }

        //**************************************************
        // Sends a string message to a queue.
        //**************************************************
        
        public void SendMessage()
        {

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

            // Create a new message.
            Message myMessage = new Message("Original Message");

            myMessage.AdministrationQueue = new MessageQueue(".\\myAdministrationQueue");
            myMessage.AcknowledgeType = AcknowledgeTypes.PositiveReceive | AcknowledgeTypes.PositiveArrival;

            // Send the Order to the queue.
            myQueue.Send(myMessage);

            return;
        }

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

            myQueue.MessageReadPropertyFilter.CorrelationId = true;

            // Set the formatter to indicate body contains an Order.
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(string)});

            string returnString = null;
            
            try
            {
                // Receive and format the message.
                Message myMessage =	myQueue.Receive();

                // Display message information.
                Console.WriteLine("____________________________________________");
                Console.WriteLine("Original message information--");
                Console.WriteLine("Body: " +myMessage.Body.ToString());
                Console.WriteLine("Id: " + myMessage.Id.ToString());
                Console.WriteLine("____________________________________________");

                returnString =  myMessage.Id;
            }
            
            catch (MessageQueueException)
            {
                // Handle Message Queuing exceptions.
            }

            // Handle invalid serialization format.
            catch (InvalidOperationException e)
            {
                Console.WriteLine(e.Message);
            }
            
            // Catch other exceptions as necessary.

            return returnString;
        }

        //**************************************************
        // Receives a message containing an Order.
        //**************************************************
        
        public void ReceiveAcknowledgment(string messageId, string queuePath)
        {
            bool found = false;
            MessageQueue queue = new MessageQueue(queuePath);
            queue.MessageReadPropertyFilter.CorrelationId = true;
            queue.MessageReadPropertyFilter.Acknowledgment = true;

            try
            {
                while(queue.PeekByCorrelationId(messageId) != null)
                {
                    Message myAcknowledgmentMessage = queue.ReceiveByCorrelationId(messageId);
            
                    // Output acknowledgment message information. The correlation Id is identical
                    // to the id of the original message.
                    Console.WriteLine("Acknowledgment Message Information--");
                    Console.WriteLine("Correlation Id: " + myAcknowledgmentMessage.CorrelationId.ToString());
                    Console.WriteLine("Id: " + myAcknowledgmentMessage.Id.ToString());
                    Console.WriteLine("Acknowledgment Type: " + myAcknowledgmentMessage.Acknowledgment.ToString());
                    Console.WriteLine("____________________________________________");

                    found = true;
                }
            }
            catch (InvalidOperationException e)
            {
                // This exception would be thrown if there is no (further) acknowledgment message
                // with the specified correlation Id. Only output a message if there are no messages;
                // not if the loop has found at least one.
                if(found == false)
                {	
                    Console.WriteLine(e.Message);
                }

                // Handle other causes of invalid operation exception.
            }
        }
    }
}

注釈

クラスは Acknowledgment 、メッセージ キューが管理キューに投稿する受信確認メッセージの種類と、受信確認メッセージを送信する条件を定義します。 受信確認の種類は、4 つのグループに大きく分けることができます。正の受信確認、肯定的な読み取りの受信確認、負の受信確認、および負の読み取り受信確認。

メッセージに関連付けられている管理キューは、 プロパティで Message.AdministrationQueue 指定されます。

メッセージ キューは、 Message.Acknowledgment 受信確認メッセージを作成するときに、 プロパティを Acknowledgment 列挙値のいずれかに設定します。 通常、プロパティ値は Message.Acknowledgment 、インスタンスがシステム送信受信確認メッセージを参照している場合にのみ意味があります。 受信確認メッセージ以外の Message.Acknowledgment メッセージの プロパティを読み取った場合、例外がスローされます。

メッセージ キューは、送信側アプリケーションが要求しない限り、受信確認メッセージを送信しません。 アプリケーションでは、 プロパティに適切な値を設定して、この要求を Message.AcknowledgeType 行います。 メッセージ キューは、元Messageの の プロパティで指定された管理キューにすべてのAdministrationQueue受信確認メッセージを送信します。

適用対象

製品 バージョン
.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