windows-nt/Source/XPSP1/NT/inetsrv/msmq/sdk/samples/mqtestoa/readme.txt
2020-09-26 16:20:57 +08:00

29 lines
2.4 KiB
Plaintext

Sample: MQTESTOA
Purpose:
This console-app application demonstrates how to send and receive messages between processes using the MSMQ COM components in C.
The application can be run in either "sender" or "receiver" mode, on either DS enabled or DS disabled computer.
Overview:
Instead of using the MSMQ SDK C API, the MSMQ COM components are used to send/receive messages.
The mqtestoa application takes a single param: either "-s" or "-r". Where "-s" specifies a sending instance of the application and "-r" specifies a receiving instance.
The application runs either in direct mode or in standard mode. If the application is running on a DS enabled computer , the user is asked whether he wishes to
connect with a DS disabled computer. If so, the connection will be in direct mode. This means that a private queue is used and that no DS queries are made.
Otherwise, the connection will be in standard mode, which means that a public queue is used. When running on a DS disabled computer, the connection can only be direct.
When ran in receiver mode, the application creates and opens a local queue of a specific type (indicated by setting the PROPID_Q_TYPE queue property: a constant guid
is used by this app). Subsequently, it enters a loop that waits for a message to arrive on that queue, which is then just displayed. The loop is terminated when the message
with the body "quit" arrives. Then the queue is deleted and the application exits.
When ran in standard sender mode, the application queries the MQIS to obtain all queues whose type matches that set by the receiving instance. In direct mode, the user
is asked for the computer name of the receiver, and a handle to this queue is created, assuming it exists; If it doesn't, all messages will simply be lost. (To avoid that, a local
acknowledgement queue should be created and the messages sent should be configured to ask for acknowledgement messages. Then, if a NACK message is received, the
user can be notified of the nonexistance of the queue.)
Subsequently the sender enters a loop that prompts the user for a string which is sent as the body of a message to each of the matching queues or the private queue.
This loop is terminated when the user enters the string "quit". Finally, the queues are closed (not deleted) and the application exits.
Note that since the receiver deletes its queue, the receiving instance should be invoked before sending instances.