Атрибут сообщения

Атрибут [message] указывает, что удаленный вызов процедуры должен рассматриваться как сообщение от клиента к серверу.

[message, optional-attribute-list] void function-name(
    [in, optional-parameter-attributes] param-name,. . .);

Параметры

необязательный список атрибутов

Другие атрибуты, применяемые к функции. С атрибутом [message] могут использоваться только атрибуты[local], [nocode], [code[optimize].

имя функции

Имя функции, как определено в IDL-файле.

необязательные атрибуты-параметр

Ноль или более атрибутов MIDL, которые будут применены к параметру.

param-name

Имя параметра, как определено в файле IDL.

Remarks

По мере отправки сообщений от клиента удаленные вызовы процедур с атрибутом [message] доставляются серверу асинхронно по ncadg_mq транспорту очереди сообщений. Вы можете указать обмен сообщениями в синхронном режиме, указав ncadg_mq транспортный протокол без использования атрибута [message] .

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

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

Следующие ограничения также применяются к атрибуту [message] :

  • Очередь сообщений Майкрософт должна быть реализована в клиентских и серверных системах, а системы должны быть видны друг другу в соответствии с областью установки очереди сообщений.
  • Привязка должна использовать известные конечные точки и протокол транспорта ncadg_mq .
  • Функция не может содержать выходные параметры или возвращаемый тип, отличный от void. Обратите внимание, что последнее ограничение делает атрибут [message] непригодным для методов интерфейса COM (object) в настоящее время. Следующий выпуск MIDL позволит функциям [message] возвращать error_status_t или HRESULT.
  • Любой интерфейс, содержащий по крайней мере один вызов [message], должен быть зарегистрирован путем вызова RpcServerRegisterIf или RpcServerRegisterIfEx перед вызовом RpcServerUseProtseqEpEx(ncadg_mq). В противном случае вызовы, ожидающие в очереди сервера, будут считываться до регистрации интерфейса, и вызовы завершаются сбоем.

Примеры

[message] void DisplayString(
    [in, string] char * p1);
 
[message] void VarDataArray(
    [in, size_is(iSize)] ARRAY_TYPE lpMyArray,
    [in] int iSize,
    [in] unsigned long ulChksum);

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

Код

Местных

ncadg_mq

nocode

Оптимизировать

Очередь сообщений RPC

RpcBindingSetOption

RpcBindingInqOption

void