атрибут 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);
См. также раздел