用于发送请求消息并接收相关的回复消息。
语法
HRESULT WsRequestReply(
  [in]           WS_CHANNEL                   *channel,
  [in]           WS_MESSAGE                   *requestMessage,
  [in]           const WS_MESSAGE_DESCRIPTION *requestMessageDescription,
  [in]           WS_WRITE_OPTION              writeOption,
                 const void                   *requestBodyValue,
  [in]           ULONG                        requestBodyValueSize,
  [in]           WS_MESSAGE                   *replyMessage,
  [in]           const WS_MESSAGE_DESCRIPTION *replyMessageDescription,
  [in]           WS_READ_OPTION               readOption,
  [in, optional] WS_HEAP                      *heap,
                 void                         *value,
  [in]           ULONG                        valueSize,
  [in, optional] const WS_ASYNC_CONTEXT       *asyncContext,
  [in, optional] WS_ERROR                     *error
);
参数
[in] channel
要执行请求-回复操作的通道。
[in] requestMessage
用于发送请求的消息对象。
消息对象应位于 WS_MESSAGE_STATE_EMPTY 或 WS_MESSAGE_STATE_INITIALIZED 中。
[in] requestMessageDescription
WS_MESSAGE_DESCRIPTION的操作字段用作请求消息的操作标头。 如果不需要任何操作,则此字段可能为 NULL 。
WS_MESSAGE_DESCRIPTION的 bodyElementDescription 字段用于序列化请求消息的正文。 如果不需要正文元素,则此字段可能为 NULL 。 有关如何根据 bodyElementDescription 序列化正文的信息,请参阅 WsWriteBody 。
[in] writeOption
是否需要 body 元素,以及如何分配值。 有关详细信息 ,请参阅WS_WRITE_OPTION 。
requestBodyValue
指向要在请求对象的正文中序列化的值的指针。
[in] requestBodyValueSize
正在序列化的请求值的大小(以字节为单位)。
[in] replyMessage
用于接收答复的消息对象。
消息对象应位于 WS_MESSAGE_STATE_EMPTY中。
[in] replyMessageDescription
WS_MESSAGE_DESCRIPTION的操作字段用于验证收到的回复消息的操作标头。 如果不需要任何操作,则此字段可能为 NULL 。 如果 为 NULL,则忽略收到的消息的操作标头(如果存在)。
WS_MESSAGE_DESCRIPTION的 bodyElementDescription 字段用于反序列化回复消息的正文。 如果不需要正文元素,则此字段可能为 NULL 。 有关如何根据 bodyElementDescription 反序列化正文的信息,请参阅 WsReadBody 。
[in] readOption
是否需要回复正文元素以及如何分配值。 有关详细信息,请参阅 WS_READ_OPTION 和 WsReadBody。
[in, optional] heap
用于分配反序列化回复正文值的堆。 如果给定类型不需要堆,则此参数可以为 NULL。
value
在何处存储正文的反序列化值。
此参数的解释取决于 WS_READ_OPTION。
如果回复 WS_MESSAGE_DESCRIPTION 的 bodyElementDescription 为 NULL,则不会触摸此参数。 在这种情况下,不需要指定 参数。
[in] valueSize
此参数的解释取决于 WS_READ_OPTION。
[in, optional] asyncContext
有关如何异步调用函数的信息;如果同步调用,则为 NULL 。
[in, optional] error
指定在函数失败时应存储其他错误信息的位置。
返回值
此函数可以返回其中一个值。
| 返回代码 | 说明 | 
|---|---|
| 
 | 回复消息包含错误。 可以使用 WsGetErrorProperty 从WS_ERROR中提取故障。 | 
| 
 | 异步操作仍处于挂起状态。 | 
| 
 | 操作已中止。 | 
| 
 | 由于 对象的当前状态,不允许此操作。 | 
| 
 | 远程终结点不存在或找不到。 | 
| 
 | 远程终结点拒绝访问。 | 
| 
 | 与远程终结点的连接已终止。 | 
| 
 | 远程终结点无法处理请求。 | 
| 
 | 远程终结点当前未在此位置使用。 | 
| 
 | 由于重载,远程终结点无法处理请求。 | 
| 
 | 无法访问远程终结点。 | 
| 
 | 终结点地址 URL 无效。 | 
| 
 | 输入数据的格式不是预期的,或者没有预期的值。 | 
| 
 | 该操作未在分配的时间内完成。 | 
| 
 | HTTP 代理服务器拒绝访问。 | 
| 
 | HTTP 代理服务器无法处理请求。 | 
| 
 | 超出配额。 | 
| 
 | 对于收到的数据,安全验证未成功。 | 
| 
 | Windows Web Services 框架中的安全操作失败。 | 
| 
 | 服务器拒绝了安全令牌,因为它已过期。 | 
| 
 | HTTP 代理服务器需要 HTTP 身份验证方案“basic”。 | 
| 
 | HTTP 代理服务器需要 HTTP 身份验证方案“digest”。 | 
| 
 | HTTP 代理服务器需要 HTTP 身份验证方案“协商”。 | 
| 
 | HTTP 代理服务器需要 HTTP 身份验证方案“NTLM”。 | 
| 
 | 远程终结点需要 HTTP 身份验证方案“基本”。 | 
| 
 | 远程终结点需要 HTTP 身份验证方案“digest”。 | 
| 
 | 远程终结点需要 HTTP 身份验证方案“协商”。 | 
| 
 | 远程终结点需要 HTTP 身份验证方案“NTLM”。 | 
| 
 | 根据当前系统时钟或已签名文件中的时间戳进行验证时,所需证书不在有效期内。 | 
| 
 | 证书 CN 名称与传递的值不匹配。 | 
| 
 | 证书链已处理,但在信任提供程序不信任的根证书中终止。 | 
| 
 | 该证书对于请求的用法无效。 | 
| 
 | 吊销功能无法检查吊销,因为吊销服务器已脱机。 | 
| 
 | 内存不足。 | 
| 
 | 一个或多个参数无效。 | 
| 
 | 此函数可能会返回上面未列出的其他错误。 | 
注解
消息与 WS_ADDRESSING_VERSION相关。 有关关联请求回复消息的详细信息,请参阅 通道层概述 。
要求
| 要求 | 值 | 
|---|---|
| 最低受支持的客户端 | Windows 7 [桌面应用 |UWP 应用] | 
| 最低受支持的服务器 | Windows Server 2008 R2 [桌面应用 |UWP 应用] | 
| 目标平台 | Windows | 
| 标头 | webservices.h | 
| Library | WebServices.lib | 
| DLL | WebServices.dll |