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 传输协议。
- 该函数不能包含输出参数或 无效以外的返回类型。 请注意,后一个限制使 COM (对象) 接口方法不适用于 [message] 属性。 MIDL 的下一个版本将允许 [message] 函数返回error_status_t或 HRESULT。
- 在调用 RpcServerUseProtseqEpEx (ncadg_mq) 之前,必须注册至少包含一个 [message] 调用的任何接口,方法是调用 RpcServerRegisterIf 或RpcServerRegisterIfEx。 否则,在注册接口之前,将读取等待服务器队列的调用,并且调用将失败。
示例
[message] void DisplayString(
[in, string] char * p1);
[message] void VarDataArray(
[in, size_is(iSize)] ARRAY_TYPE lpMyArray,
[in] int iSize,
[in] unsigned long ulChksum);
另请参阅