指定协议序列

服务器应用程序必须选择要在通过网络与客户端通信时使用的一个或多个协议序列。 协议序列的选择依赖于网络。 请参阅解释绑定信息和选择协议序列

服务器程序可能允许客户端使用网络支持的任何协议序列进行连接。 为此,请调用 RpcServerUseAllProtseqs 并将RPC_C_PROTSEQ_MAX_REQS_DEFAULT作为第一个参数传递。 但是,这不是建议的方法。 相反,将 ncalrpc 用于本地呼叫,对远程调用 使用ncacn_ip_tcpncacn_http 通常就足够了。 异质网络并不常见,几乎所有网络都支持 TCP/IP。

如果希望客户端将动态终结点的端口分配限制为特定的端口范围,请改为调用 RpcServerUseAllProtseqsEx 。 此函数特定于 Microsoft RPC,对于通过防火墙的远程过程调用非常有用。 它使用额外的参数将端口分配控制标志传递给函数。 请参阅 为端口分配和选择性绑定配置注册表

开发服务器的接口时,可以在 MIDL 文件中指定协议序列和终结点信息。 如果这样做,服务器应使用 RpcServerUseAllProtseqsIf 注册 IDL 文件中提供的所有协议序列和关联的终结点信息。 此外,还有相应的 RpcServerUseAllProtseqsIfEx 函数,该函数还允许服务器传递端口分配控制标志。

如果要将客户端和服务器程序配置为与指定的协议序列通信,服务器应用程序应调用 RpcServerUseProtseq。 有关 Microsoft RPC 协议序列的完整列表,请参阅 协议序列常量

Microsoft RPC 还提供 RpcServerUseProtseqEx ,使应用程序能够选择特定的协议序列和控制动态端口分配。

除了面向连接的协议外,Microsoft RPC 还支持数据报 (无连接) 协议。 建议使用面向连接的协议;数据报协议具有与面向连接的协议不同的功能集,并且仅当分布式系统开发人员需要仅在数据报协议中可用的功能时才应使用。 使用数据报协议时可用的一些功能包括:

  • 数据报支持 UDP 和 IPX 无连接传输协议。
  • 由于不需要建立和维护连接,因此数据报 RPC 协议所需的资源开销更少。
  • 数据报可实现更快的绑定。
  • 与面向连接的 RPC 一样,默认情况下,数据报 RPC 调用是 非幂等的。 这意味着保证不会多次执行调用。 但是,可以在 IDL 文件中将函数标记为幂等函数,告知 RPC 多次执行函数以响应单个客户端请求是无害的。 这允许运行时在服务器上保持较少的状态。 请注意,只有在不稳定的网络上极少数情况下才会重新执行幂等调用。
  • 数据报 RPC 支持 广播 IDL 属性。 通过广播,客户端可以同时向多个服务器发出消息。 这允许客户端找到网络上的多个可用服务器之一,或同时控制多个服务器。 请注意,数据报广播仅在本地链接内有效,通常不会跨路由器。 广播调用是隐式幂等的。 如果调用包含 [out] 参数,则仅返回第一个服务器响应。 服务器响应后,通过该绑定句柄的所有未来 RPC 将仅发送到该服务器,包括具有广播属性的调用。 若要发送另一个广播,请创建新的绑定句柄或在现有句柄上调用 RpcBindingReset
  • 数据报 RPC 支持 可能 IDL 属性。 这允许客户端向服务器发送调用,而无需等待响应或确认。 调用不能包含 [out] 参数。 使用 [maybe] 调用的调用是隐式幂等的。