字符串绑定

字符串绑定是一个无符号字符串,由表示绑定对象 UUID、RPC 协议序列、网络地址以及终结点和终结点选项的字符串组成。

ObjectUUID@ProtocolSequenceNetworkAddress[EndpointOption]

parameters

ObjectUUID

由远程过程调用操作的 对象的 UUID。 在服务器上,RPC 运行时库将对象类型映射到管理器入口点向量 (函数指针数组,) 调用正确的管理器例程。 有关如何将对象 UUID 映射到管理器入口点向量的讨论,请参阅 注册接口

ProtocolSequence

字符串,表示 RPC 协议 ((例如 ncacn) )的有效组合、传输协议 ((例如 TCP) )和网络协议 ((例如 IP) )。 Microsoft RPC 支持协议 序列常量中指定的以下协议。

NetworkAddress

用于接收远程过程调用的系统的网络地址。

注意

自 Windows XP 起,不支持以下协议序列:

网络地址的格式和内容取决于指定的协议序列,如下所示。

协议序列 网络地址 示例
ncacn_nb_tcp 计算机名称 myserver
ncacn_nb_ipx 计算机名称 myserver
ncacn_nb_nb 计算机名称 myserver
ncacn_ip_tcp 四个八进制 Internet 地址或主机名。 如果安装了 IPv6 网络堆栈,则完全支持 IPv6,并且也接受 IPv6 地址。 128.10.2.30 anynode.microsoft.com
ncacn_np 服务器名称 (前导双反斜杠是可选的) myserver \\myotherserver
ncacn_spx IPX Internet 地址或服务器名称 ~0000000108002B30612C myserver
ncacn_dnet_nsp 区域和节点语法 4.120
ncacn_at_dsp 计算机名称(可选)后跟 @ 和 AppleTalk 区域名称。 如果未提供区域,则默认为客户端的区域 @* servername@zonename servername
ncacn_vns_spp 格式的 StreetTalk 服务器名称item@group@organization printserver@sdkdocs@microsoft
ncadg_mq 服务器名称 myserver
ncacn_http Internet 地址 (四个八进制名称或友好名称,或本地服务器名称 128.10.2.30 somesvr@anywhere.com mylocalsvr
ncadg_ip_udp 四个八进制 Internet 地址或主机名 128.10.2.30 anynode.microsoft.com
ncadg_ipx IPX Internet 地址或服务器名称 ~0000000108002B30612C myserver
ncalrpc 计算机名称 thismachine

网络地址字段是可选的。 如果未指定网络地址,则字符串绑定将引用本地主机。 使用 ncalrpc 协议序列时,可以指定本地计算机的名称,但这样做是完全不必要的。

端点

接收远程过程调用的进程的终结点或地址。 终结点前面可以有关键字 (keyword) endpoint=。 如果服务器已将其绑定注册到终结点映射器,则指定终结点是可选的。 请参阅 RpcEpRegister

终结点的格式和内容取决于指定的协议序列,如以下终结点/选项表所示。

选项

特定于协议的选项。 选项字段不是必需的。 每个选项都由使用语法=选项名称选项值的 {name, value} 对指定。 为每个协议序列定义选项,如以下 Endpoint/Option 表所示。

协议序列 端点 示例 选项名
ncacn_nb_tcp 介于 1 和 254 之间的整数。 Microsoft 保留介于 0 和 32 之间的许多值。 100
ncacn_nb_ipx (如上) (如上)
ncacn_nb_nb (如上) (如上)
ncacn_ip_tcp Internet 端口号。 1025
ncacn_np 命名管道。 名称必须以“\\pipe”开头。 \\pipe\\pipename 安全性
ncacn_spx 介于 1 和 65535 之间的整数。 5000
ncacn_dnet_nsp DECnet 阶段 IV 对象编号 (必须前面有 # 字符) 或对象名称。 mailserver #17
ncacn_at_dsp 一个字符串,最长为 22 个字节。 myservicesendpoint
ncacn_vns_spp Vines SPP 端口号介于 250 和 511 之间。 500
ncadg_mq 介于 1 和 65535 之间的整数。 5000
ncacn_http Internet 端口号。 2215 HTTP 和 RPC 代理服务器名称,HttpConnection 选项
ncadg_ip_udp Internet 端口号。 1025
ncadg_ipx 介于 1 和 65535 之间的整数。 5000
ncalrpc 指定应用程序或服务名称的字符串。 字符串不能包含任何反斜杠字符。 my_printer 安全性

ncacn_http协议序列支持的 HttpConnectionOption 选项名称采用以下值。

选项名
HttpConnectOption UseHttpProxy

HttpConnectionOption 允许在建立 HTTP 连接时指示 RPC 的行为。 UseHttpProxy 值指示 RPC 始终通过 Http 代理路由其流量,包括客户端在 Internet Explorer 中将 Internet 选项设置为绕过本地地址的代理服务器时。 此选项指示客户端通过 Http 代理强制连接到 RPC 代理。 这加快了建立连接的时间,因为它绕过了在使用 HTTP 代理之前对 RPC 服务器的任何延迟搜索。

如果使用此 HttpConnectionOption 选项,并且客户端上的 Internet Explorer 未配置为使用该 Http 代理,则连接可能会失败并 RPC_S_INVALID_NETWORK_OPTIONS

HttpConnectOption=UseHttpProxy

有关 HttpConnectionOption 的详细信息,请参阅 使用 HTTP 作为 RPC 传输

ncalrpc、ncacn_np、ncadg_ip_udp和ncadg_ipx协议序列支持 的安全 选项名称采用以下选项值。

选项名 选项值
安全性 {identification | anonymous | impersonation}{dynamic | static}{true | false}

如果指定了安全选项名称,还必须提供每个安全选项值集中的一个条目。 选项值必须用单空格字符分隔。 例如,以下 选项 字段有效:

Security=identification dynamic true
Security=impersonation static true

安全选项值具有以下含义。

安全选项值 说明
匿名 客户端对服务器而言是匿名的。
动态 当服务器使用传输安全性时,服务器会看到客户端安全标识中的更改。 这是 LRPC (ncalrpc) 传输级别安全性的默认模式,也是本地命名管道 (ncacn_np) 传输级别安全性的默认模式。
False 有效 = FALSE;所有令牌特权设置(包括设置为 OFF 的这些设置)都包含在服务器上的令牌中,并且可由服务器启用。 权限仅与同一计算机 RPC 调用相关。
标识 服务器包含有关客户端的信息,但无法模拟。
模拟 服务器可以代表本地系统中的客户端进行操作, (传输级别安全性不支持委派) 。
静态 当服务器使用传输安全性时,服务器不会看到客户端安全标识的更改。 这是远程命名管道唯一可用的模式, (ncacn_np) 传输级别安全性。 调用方标识在绑定句柄上的第一次远程过程调用期间保存,而不是在创建绑定句柄时保存。
True 有效 = TRUE;服务器上的令牌中仅包含设置为 ON 的令牌特权设置。 如果使用此选项,则服务器无法打开设置为 OFF 的权限。 权限仅与同一计算机 RPC 调用相关。

有关安全选项的详细信息,请参阅 安全性

备注

除非 Option 语法要求,否则字符串绑定中不允许有空格。 NetworkAddressEndpointOption 字段的默认设置因 ProtocolSequence 成员的值而异。

对于所有字符串绑定字段,单个反斜杠字符 (\) 解释为转义字符。 若要指定单个文本反斜杠字符,必须提供两个反斜杠字符 (\\) 。

字符串绑定包含绑定句柄的字符表示形式,有时还包含绑定句柄的一部分。 字符串绑定方便表示绑定句柄的一部分,但它们不能用于进行远程过程调用。 必须先通过调用 RpcBindingFromStringBinding 将它们转换为绑定句柄。

此外,字符串绑定不包含绑定句柄中的所有信息。 例如,与绑定句柄关联的身份验证信息(如果有)不会转换为通过调用 RpcBindingToStringBinding 返回的字符串绑定。

在开发分布式应用程序期间,服务器可以使用字符串绑定将其绑定信息传达给客户端,以建立客户端-服务器关系,而无需使用终结点映射数据库或名称服务数据库。 若要建立此类关系,请使用函数 RpcBindingToStringBinding 将一个或多个绑定句柄从绑定句柄向量转换为字符串绑定,并将字符串绑定提供给客户端。

示例

下面是有效字符串绑定的示例。 在这些示例中,为方便起见,使用 obj-uuid 以字符串形式表示有效的 UUID。 示例显示 obj-uuid,而不是显示 UUID 308FB580-1EB2-11CA-923B-08002B1075A7。

obj-uuid@ncadg_mq:mymqserver
obj-uuid@ncacn_http:major7.microsoft.com[2225]
obj_uuid@ncacn_http:major7.microsoft.com[,HttpProxy=proxysvr:80,
    RpcProxy=websvr1.microsoft.com:80]
obj_uuid@ncacn_http:major7.microsoft.com[,HttpProxy=proxysvr:80,
    RpcProxy=websvr1.microsoft.com:80,HttpConnectOption=UseHttpProxy]
obj-uuid@ncacn_ip_tcp:16.20.16.27[2001]
obj-uuid@ncacn_ip_tcp:16.20.16.27[endpoint=2001]
obj-uuid@ncacn_nb_nb:
obj-uuid@ncacn_nb_nb:[100]
obj-uuid@ncacn_np:
obj-uuid@ncacn_np:[\\pipe\\p3,Security=impersonation static true]
obj-uuid@ncacn_np:\\\\marketing[\\pipe\\p2\\p3\\p4]
obj-uuid@ncacn_np:\\\\marketing[endpoint=\\pipe\\p2\\p3\\p4]
obj-uuid@ncacn_np:\\\\sales
obj-uuid@ncacn_np:\\\\sales[\\pipe\\p1,Security=identification dynamic true]
obj-uuid@ncalrpc:
obj-uuid@ncalrpc:[object1_name_demonstrating_that_these_can_be_lengthy]
obj-uuid@ncalrpc:[object2_name,Security=anonymous static true]
obj-uuid@ncacn_vns_spp:server@group@org[500]
obj-uuid@ncacn_dnet_nsp:took[elf_server]
obj-uuid@ncacn_dnet_nsp:took[endpoint=elf_server]
obj-uuid@ncadg_ip_udp:128.10.2.30
obj-uuid@ncadg_ip_udp:maryos.microsoft.com[1025]
obj-uuid@ncadg_ipx: ~0000000108002B30612C[5000]
obj-uuid@ncadg_ipx:printserver
obj-uuid@ncacn_spx:annaw[4390]
obj-uuid@ncacn_spx:~0000000108002B30612C

RpcBindingFromStringBinding

RpcBindingToStringBinding

RpcEpRegister

使用 HTTP 作为 RPC 传输