Поделиться через


атрибут message

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

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

Параметры

optional-attribute-list

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

function-name

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

optional-parameter-attributes

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

param-name

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

Комментарии

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

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

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

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

  • Очередь сообщений (Майкрософт) должна быть реализована в клиентской и серверной системах, а системы должны быть видимы друг для друга, как определено область установки очереди сообщений.
  • Привязка должна использовать известные конечные точки и транспортный протокол ncadg_mq .
  • Функция не может содержать выходные параметры или возвращаемый тип, отличный от void. Обратите внимание, что последнее ограничение делает атрибут [message] непригодным для методов интерфейса COM (объект) в настоящее время. В следующем выпуске 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