message 属性
[message] 属性指示远程过程调用被视为从客户端到服务器的消息。
[message, optional-attribute-list] void function-name(
[in, optional-parameter-attributes] param-name,. . .);
参数
-
optional-attribute-list
-
应用于函数的其他属性。 只有 [local]、 [nocode]、 [code] 和 [optimize] 属性才能与 [message] 属性一起使用。
-
function-name
-
IDL 文件中定义的函数的名称。
-
optional-parameter-attributes
-
将应用于 参数的零个或多个 MIDL 属性。
-
param-name
-
IDL 文件中定义的参数的名称。
备注
作为来自客户端的消息,具有 [message] 属性的远程过程调用通过 ncadg_mq 消息队列传输异步传递到服务器。 可以通过指定 ncadg_mq 传输协议来指示同步模式消息传送,而无需使用 [message] 属性。
通过指定异步模式消息传送, [message] 属性允许客户端进行远程过程调用并立即返回,即使服务器应用程序未响应也是如此。 如果目标服务器不可用,将存储调用,直到服务器可用。
此外,使用异步模式消息传送可以控制服务器的接收队列的消息队列属性。 有关为服务器进程选择服务质量、呼叫优先级和呼叫生存期的详细信息,请参阅 RpcBindingSetOption 。
以下限制也适用于 [message] 属性:
- Microsoft 消息队列必须在客户端和服务器系统中实现,并且系统必须彼此可见,由消息队列安装范围确定。
- 绑定必须使用已知的终结点和 ncadg_mq 传输协议。
- 函数不能包含 除 void 以外的输出参数或返回类型。 请注意,后一个限制使 [message] 属性目前不适用于 COM (对象) 接口方法。 下一版本的 MIDL 将允许 [message] 函数返回error_status_t或 HRESULT。
- 在调用 RpcServerUseProtseqEpEx (ncadg_mq) 之前,必须通过调用 RpcServerRegisterIf 或 RpcServerRegisterIfEx 来注册包含至少一个 [message] 调用的任何接口。 否则,将在注册接口之前读取等待服务器的队列的调用,并且调用将失败。
示例
[message] void DisplayString(
[in, string] char * p1);
[message] void VarDataArray(
[in, size_is(iSize)] ARRAY_TYPE lpMyArray,
[in] int iSize,
[in] unsigned long ulChksum);
另请参阅