字符串绑定

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

ObjectUUID@ProtocolSequenceNetworkAddress[EndpointOption]

参数

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 item@group@organization形式的 StreetTalk 服务器名称 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 协议序列时,可以指定本地计算机的名称,但这样做是完全不必要的。

终结点

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

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

选项

特定于协议的选项。 不需要选项字段。 每个选项都由 {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 安全

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

选项名称 价值
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 Effective = FALSE;所有令牌特权设置(包括设置为 OFF 的设置)都包含在服务器上的令牌中,并且可由服务器启用。 特权仅适用于同机 RPC 调用。
标识 服务器包含有关客户端的信息,但无法模拟。
模拟 服务器可以代表本地系统中的客户端执行作(传输级安全性不支持委派)。
静态 当服务器使用传输安全性时,服务器不会看到客户端安全标识中的更改。 这是远程命名管道(ncacn_np)传输级别安全性的唯一模式。 调用方的身份保存在该绑定句柄上的第一个远程过程调用期间,而不是在创建绑定句柄时保存。
True Effective = TRUE;服务器上令牌中仅包含设置为 ON 的令牌特权设置。 如果使用此选项,则服务器无法打开设置为 OFF 的权限。 特权仅适用于同机 RPC 调用。

有关安全选项的详细信息,安全

言论

字符串绑定中不允许使用空格,除非 选项 语法需要。 NetworkAddressEndpointOption 字段的默认设置因 ProtocolSequence 成员的值而异。

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

字符串绑定包含绑定句柄的字符表示形式和绑定句柄的偶尔部分。 字符串绑定可用于表示绑定句柄的某些部分,但它们不能用于进行远程过程调用。 必须首先通过调用 RpcBindingFromStringBinding将其转换为绑定句柄。

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

在开发分布式应用程序期间,服务器可以使用字符串绑定将其绑定信息传达给客户端,以建立客户端-服务器关系,而无需使用终结点映射数据库或名称服务数据库。 若要建立此类关系,请使用函数 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 传输