RpcServerUseAllProtseqs 函数 (rpcdce.h)

RpcServerUseAllProtseqs 函数告知 RPC 运行时库使用所有受支持的协议序列来接收远程过程调用。

语法

RPC_STATUS RpcServerUseAllProtseqs(
  unsigned int MaxCalls,
  void         *SecurityDescriptor
);

parameters

MaxCalls

ncacn_ip_tcp协议序列的积压工作队列长度。 所有其他协议序列都忽略此参数。 使用 RPC_C_PROTSEQ_MAX_REQS_DEFAULT 指定默认值。 请参阅“备注”。

SecurityDescriptor

指向为安全子系统提供的可选参数的指针。 仅用于 ncacn_npncalrpc 协议序列。 所有其他协议序列都忽略此参数。 不建议在终结点上使用安全描述符来确保服务器的安全。 此参数不显示在此 API 的 DCE 规范中。

返回值

含义
RPC_S_OK
调用成功。
RPC_S_NO_PROTSEQS
没有受支持的协议序列。
RPC_S_OUT_OF_MEMORY
内存不足。
RPC_S_INVALID_SECURITY_DESC
安全描述符无效。
 
注意 有关有效错误代码的列表,请参阅 RPC 返回值
 

注解

注意 不建议侦听所有支持的协议序列,因为这会导致服务器侦听所有协议序列,包括非主流协议序列。 建议服务器仅侦听 主流 协议序列。
 
服务器应用程序调用 RpcServerUseAllProtseqs 以向 RPC 运行时库注册所有受支持的协议序列。 若要接收远程过程调用,服务器必须向 RPC 运行时库注册至少一个协议序列。 有关 Microsoft RPC 支持的协议序列的列表,请参阅参考主题 字符串绑定

对于服务器注册的每个协议序列,RPC 运行时库会创建一个或多个终结点,服务器通过这些终结点接收远程过程调用请求。 RPC 运行时库为每个协议序列创建不同的终结点。 终结点名称由 RPC 运行时或操作系统生成。 例如,对于 ncacn_ip_tcp,端口号由 RPC 运行时动态确定,具体取决于可用性和注册表设置。

注意 使用 RpcServerUseAllProtseqs 函数不会导致服务器侦听以下协议序列:
 
注意 若要侦听这些协议序列中的任何一个,必须单独选择每个序列。
 
对于 MaxCalls,应用程序提供的值只是一个提示。 RPC 运行时或 Windows 套接字提供程序可能会重写 值。 例如,在 Windows XP 或 Windows 2000 专业版上,该值限制为 5。 忽略大于 5 的值,改用 5。 在 Windows Server 2003 和 Windows 2000 Server 上,将遵循该值。

应用程序必须小心地在 MaxCalls 中传递合理的值。 服务器、高级服务器或数据中心服务器上的较大值可能会导致使用大量非分页池内存。 使用过小的值也是不利的,因为如果积压队列用尽,则可能会导致 TCP RST 从服务器满足 TCP SYN 数据包。 应用程序开发人员在确定 MaxCalls 的正确值时,应平衡内存占用量和可伸缩性要求。

将计算机配置为使用选择性绑定时,成功返回并不保证服务器已为计算机上存在的所有网络接口创建终结点。 RPC 运行时可能无法侦听某些网络接口,具体取决于选择性绑定设置。 此外,如果接口尚未收到使用 DHCP 的 IP 地址,则 RPC 服务器在分配 DHCP 地址之前不会侦听网络接口。 成功返回意味着服务器正在侦听至少一个网络接口;可以通过调用 RpcServerInqBindings 函数来获取可接收远程过程调用的绑定句柄的完整列表。

有关详细信息,请参阅 服务器端绑定。 为了选择性地注册协议序列,服务器调用 RpcServerUseProtseqRpcServerUseProtseqIfRpcServerUseProtseqEp

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 rpcdce.h (包括 Rpc.h)
Library Rpcrt4.lib
DLL Rpcrt4.dll

请参阅

RpcBindingToStringBinding

RpcBindingVectorFree

RpcEpRegister

RpcEpRegisterNoReplace

RpcNsBindingExport

RpcServerInqBindings

RpcServerListen

RpcServerRegisterIf

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf

编写安全 RPC 客户端或服务器