2.2.1.5 COM+ Queued Components Protocol (COMQC)

The Component Object Model Plus (COM+) Queued Components Protocol (COMQC) [MC-COMQC] enables a client to invoke methods asynchronously on a server in scenarios of limited or intermittent connectivity. The client writes all necessary states to a self-contained binary large object (BLOB) and sends it to the server over a message queuing transport protocol when connectivity is available. After receiving the BLOB, the server parses it and replays the method calls.

The Component Object Model Plus (COM+) Queued Components Protocol interacts with the MSMQ protocols. The layering of the protocol stack is illustrated in [MC-COMQC] section 1.3.

COMQC relies on DCE 1.1: Remote Procedure Call [C706] and the OLE Automation Protocol [MS-OAUT] to marshal the parameters of the recorded method calls, the Message Queuing (MSMQ): Queue Manager Client Protocol [MS-MQMP] for transport, and Message Queuing (MSMQ): Data Structures [MS-MQMQ] for common data formats. COMQC is limited to calls made on COM+ protocol objects. COMQC supports higher layer application functionality, but no other protocols rely on it.

COMQC is asynchronous and one-way, with information flowing exclusively from the client to the server.

The COMQC server receives COMQC messages and dispatches the recorded method calls. Each COMQC server is associated with a single COM+ application using COMQC and services messages for all server objects in that COMQC application. Each COMQC server has its own message queue. There can be multiple COMQC servers for each machine.

The COMQC client records method calls, packages them into a COMQC message, and transmits the message to the message queuing infrastructure. The COMQC client queues calls to a single COMQC server object and therefore connects to a single message queue. A higher-layer application protocol can maintain multiple COMQC clients that queue calls to different server objects, but they are independent clients unrelated to each other. Even if a client application uses COMQC to queue calls to multiple server objects in the same COM+ application, and therefore to the same message queue and the same COMQC server, this scenario involves a separate conceptual COMQC client per server object.

COMQC is appropriate for performing asynchronous method calls when the client and the server do not have constant connectivity and a message queuing mechanism is available. It is not appropriate for use when the client application relies on output parameter values or return values from the method calls.