Acknowledgment 列挙体

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

<Serializable>
Public Enum Acknowledgment
[C#]
[Serializable]
public enum Acknowledgment
[C++]
[Serializable]
__value public enum Acknowledgment
[JScript]
public
   Serializable
enum Acknowledgment

解説

Acknowledgment クラスは、メッセージ キューによって管理キューにポストされる受信確認メッセージのタイプと、受信確認メッセージ送信の原因となる条件を定義します。受信確認のタイプは 4 つのグループに大別できます。肯定到達受信確認、肯定読み取り受信確認、否定到達受信確認、および否定読み取り受信確認です。

メモ   メッセージに関連付ける管理キューは Message.AdministrationQueue プロパティで指定します。

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

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

メンバ

メンバ名 説明
AccessDenied 送信先キューにメッセージを送信するために必要な権限を送信元アプリケーションが持っていないことを示す否定到達受信確認。
BadDestinationQueue 送信元アプリケーションが送信先キューを使用できない状態にあることを示す否定到達受信確認。
BadEncryption 送信先キュー マネージャが非公開メッセージを復号化できないことを示す否定到達受信確認。
BadSignature 元のメッセージのデジタル署名が無効で、メッセージ キューが認証できないことを示す否定到達受信確認。
CouldNotEncrypt 送信元キュー マネージャが非公開メッセージを暗号化できないことを示す否定到達受信確認。
HopCountExceeded 元のメッセージのホップ数 (中間サーバーの数を示します) が超過したことを示す否定到達受信確認。
メモ   最大ホップ数は 15 です。この値はメッセージ キューが設定し、変更できません。
None メッセージが受信確認メッセージではありません。
NotTransactionalMessage トランザクション キューに非トランザクション メッセージが送信されたことを示す否定到達受信確認。
NotTransactionalQueue 非トランザクション キューにトランザクション メッセージが送信されたことを示す否定到達受信確認。
Purged メッセージが送信先キューに到達する前に削除されたことを示す否定到達受信確認。
QueueDeleted メッセージが読み取られる前にキューが削除されたことを示す否定読み取り受信確認。
QueueExceedMaximumSize 送信先キューがフルのため、元のメッセージが配信されなかったことを示す否定到達受信確認。
QueuePurged メッセージが読み取られる前にキューが削除されたことを示す否定読み取り受信確認。
ReachQueue 元のメッセージが送信先キューに到達したことを示す肯定到達受信確認。
ReachQueueTimeout 元のメッセージが送信先キューに到達する前に、キュー到達制限時間タイマまたは受信制限時間タイマがタイムアウトになったことを示す否定到達受信確認。
Receive 元のメッセージが受信側アプリケーションにより受信されたことを示す肯定読み取り受信確認。
ReceiveTimeout 受信制限時間タイマがタイムアウトになる前に、キューから元のメッセージを受信できなかったことを示す否定読み取り受信確認。

使用例

[Visual Basic, C#, C++] オーダーを含んでいるメッセージをキューに送信し、またオーダーを含んでいるメッセージをキューから受信する例を次に示します。これは特に、元のメッセージがキューに到着するか、元のメッセージがキューから取得されたときに、肯定受信確認を要求します。

 
Imports System
Imports 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 Shared Sub Main()
         ' Create a new instance of the class.
         Dim myNewQueue As New MyNewQueue()
         
         ' Create new queues.
         CreateQueue(".\myQueue")
         CreateQueue(".\myAdministrationQueue")
         
         ' Send messages to a queue.
         myNewQueue.SendMessage()
         
         ' Receive messages from a queue.
         Dim messageId As String = myNewQueue.ReceiveMessage()
         
         ' Receive acknowledgment message.
         If Not (messageId Is Nothing) Then
            myNewQueue.ReceiveAcknowledgment(messageId, ".\myAdministrationQueue")
         End If
         
         Return
      End Sub 'Main
      
      
      '**************************************************
      ' Creates a new queue.
      '**************************************************
      Public Shared Sub CreateQueue(queuePath As String)
         Try
            If Not MessageQueue.Exists(queuePath) Then
               MessageQueue.Create(queuePath)
            Else
               Console.WriteLine((queuePath + " already exists."))
            End If
         Catch e As MessageQueueException
            Console.WriteLine(e.Message)
         End Try
      End Sub 'CreateQueue
       
      
      
      '**************************************************
      ' Sends a string message to a queue.
      '**************************************************
      Public Sub SendMessage()
         
         ' Connect to a queue on the local computer.
         Dim myQueue As New MessageQueue(".\myQueue")
         
         ' Create a new message.
         Dim myMessage As New Message("Original Message")
         
         myMessage.AdministrationQueue = New MessageQueue(".\myAdministrationQueue")
         myMessage.AcknowledgeType = AcknowledgeTypes.PositiveReceive Or AcknowledgeTypes.PositiveArrival
         
         ' Send the Order to the queue.
         myQueue.Send(myMessage)
         
         Return
      End Sub 'SendMessage
      
      
      
      '**************************************************
      ' Receives a message containing an Order.
      '**************************************************
      Public Function ReceiveMessage() As String
         ' Connect to the a queue on the local computer.
         Dim myQueue As New MessageQueue(".\myQueue")
         
         myQueue.MessageReadPropertyFilter.CorrelationId = True
         
         
         ' Set the formatter to indicate body contains an Order.
         myQueue.Formatter = New XmlMessageFormatter(New Type() {GetType(String)})
         
         Dim returnString As String = Nothing
         
         Try
            ' Receive and format the message. 
            Dim myMessage As Message = 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
         ' Handle Message Queuing exceptions.
         
         ' Handle invalid serialization format.
         Catch e As InvalidOperationException
            Console.WriteLine(e.Message)
         End Try
         
         ' Catch other exceptions as necessary.
         Return returnString
      End Function 'ReceiveMessage
      
      
      '**************************************************
      ' Receives a message containing an Order.
      '**************************************************
      Public Sub ReceiveAcknowledgment(messageId As String, queuePath As String)
         Dim found As Boolean = False
         Dim queue As New MessageQueue(queuePath)
         queue.MessageReadPropertyFilter.CorrelationId = True
         queue.MessageReadPropertyFilter.Acknowledgment = True
         
         Try
            While Not (queue.PeekByCorrelationId(messageId) Is Nothing)
               Dim myAcknowledgmentMessage As Message = 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
            End While
         Catch e As InvalidOperationException
            ' 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 Then
               Console.WriteLine(e.Message)
            End If
         End Try 
      End Sub 'ReceiveAcknowledgment ' Handle other causes of invalid operation exception.
   End Class 'MyNewQueue
End Namespace 'MyProject 

[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.
            }

        }
    }
}

[C++] 
#using <mscorlib.dll>
#using <system.dll>
#using <system.messaging.dll>

using namespace System;
using namespace System::Messaging;

__gc class MyNewQueue 
{
public:
    static void CreateQueue(String* queuePath) 
    {
        try 
        {
            if (!MessageQueue::Exists(queuePath)) 
            {
                MessageQueue::Create(queuePath);
            }
            else 
            {
                Console::WriteLine("{0} already exists.", queuePath );
            }
        } 
        catch (MessageQueueException* e) 
        {
            Console::WriteLine(e->Message);
        }

    }

public:
    void SendMessage() 
    {

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

        // Create a new message.
        Message* myMessage = new Message(S"Original Message");
        myMessage->AdministrationQueue = new MessageQueue(S".\\myAdministrationQueue");
        myMessage->AcknowledgeType = (AcknowledgeTypes)(AcknowledgeTypes::PositiveReceive | AcknowledgeTypes::PositiveArrival);

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

        return;
    }



public:
    String* ReceiveMessage() 
    {
        // Connect to the a queue on the local computer.
        MessageQueue* myQueue = new MessageQueue(S".\\myQueue");

        myQueue->MessageReadPropertyFilter->CorrelationId = true;

        Type* p __gc[] = new Type*[1];
        p[0] =    __typeof(String);
        myQueue->Formatter = new XmlMessageFormatter( p );

        String* returnString = 0;

        try 
        {
            // Receive and format the message. 
            Message* myMessage = myQueue->Receive(); 

            // Display message information.
            Console::WriteLine(S"____________________________________________");
            Console::WriteLine(S"Original message information--");
            Console::WriteLine(S"Body: {0}", myMessage->Body);
            Console::WriteLine(S"Id: {0}", myMessage->Id);
            Console::WriteLine(S"____________________________________________");

            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;
    }

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) != 0) 
            {
                Message* myAcknowledgmentMessage = queue->ReceiveByCorrelationId(messageId);

                // Output acknowledgment message information. The correlation Id is identical
                // to the id of the original message.
                Console::WriteLine(S"Acknowledgment Message Information--");
                Console::WriteLine(S"Correlation Id: {0}", myAcknowledgmentMessage->CorrelationId);
                Console::WriteLine(S"Id: {0}", myAcknowledgmentMessage->Id);
                Console::WriteLine(S"Acknowledgment Type: {0}", __box(myAcknowledgmentMessage->Acknowledgment));
                Console::WriteLine(S"____________________________________________");

                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.
        }

    }
};

int main() 
{
    // Create a new instance of the class.
    MyNewQueue* myNewQueue = new MyNewQueue();

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

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

    // Receive messages from a queue.
    String* messageId = myNewQueue->ReceiveMessage(); 

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

    return 0;
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Messaging

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: System.Messaging (System.Messaging.dll 内)

参照

System.Messaging 名前空間