PNRP 和 WSASetService
PNRP 使用 WSASetService 函数来注册或删除 对等名称。
注册名称
注册包括一个对等名称和一组可以联系服务的终结点。 注册特定于 PNRP 云。 注册对等方后,注册和将注册信息传播到其他节点之间存在延迟。 在此期间,其他节点可能无法解析新注册的对等方。
服务注册不是永久性的。
- 如果注册对等名称的客户端进程退出或调用 WSACleanup,则取消注册对等名称。
- 如果指定的对等名称已由当前进程在同一个云中注册,则它将被替换为新的注册值。
注册对等名称时,必须指示以下参数值:
- essOperation 参数的值必须为 RNRSERVICE_REGISTER。
- dwControlFlags 参数必须为零 (0) 。
注册对等名称时,lpqsRegInfo 参数引用的 LPWSAQUERYSET 结构必须包含以下值:
-
dwSize
-
指定此结构的大小。
-
lpszServiceInstanceName
-
指定要注册的对等名称。 如果 对等名称 不安全,则标识是可选的。 如果标识指定为 NULL,则 PNRP 默认使用计算机本地标识。
-
lpServiceClassID
-
必须SVCID_PNRPNAME。
-
lpVersion
-
已忽略。 设置为 NULL。
-
lpszComment
-
已忽略。 但是,字符串仍需要少于 40 个字符,包括 NULL 终止符。
-
dwNameSpace
-
必须是 NS_PNRPNAME 或 NS_ALL。
-
lpNSProviderID
-
必须为 NS_PROVIDER_PNRPNAME 或 NULL。
-
lpszContext
-
必须是云名称、空字符串或 NULL。 如果此值为 NULL 或空字符串,则使用默认云“Global”。 否则,它必须指向有效的云名称。
-
dwNumberOfProtocols
-
已忽略。 将 设置为零 (0) 。
-
lpszQueryString
-
已忽略。 设置为 NULL。
-
dwNumberOfCsAddrs
-
指定服务注册的地址数。 可以为单个名称注册的最大地址数为 10。
-
lpcsaBuffer
-
指向要注册的地址列表的指针。
-
dwOutputFlags
-
已忽略。 将 设置为零 (0) 。
-
lpBlob
-
指向指向 PNRPINFO 结构的 BLOB 结构的指针。 必须设置 PNRPINFO 结构中的特定参数。 有关详细信息,请参阅以下 PNRPINFO 结构部分。
PNRPINFO 结构
如果设置了 LPWSAQUERYSET 结构的 lpBlob 成员,则必须设置 PNRPINFO 结构的以下成员:
-
dwSize
-
指定此结构的大小。
-
lpwszIdentity
-
指定使用 PeerIdentityCreate 创建的对等名称的标识。 如果对等名称不安全,则标识是可选的。 如果标识指定为 NULL,则 PNRP 默认使用计算机本地标识。
-
nMaxResolve
-
已忽略。 将 设置为零 (0) 。
-
dwTimeout
-
已忽略。 将 设置为零 (0) 。
-
dwLifetime
-
指定刷新操作之间的秒数。
-
enResolveCriteria
-
已忽略。 将 设置为零 (0) 。
-
dwFlags
-
必须为零 (0) 或 PNRPINFO_HINT。 默认值为零 (0)。 这意味着 PNRP ID 的服务位置部分是使用 saHint 中的 IP 地址生成的。 否则,将使用 lpcsaBuffer 成员的第一个 IPv6 条目中的第一个 IP 地址生成服务位置。
-
saHint
-
指定提示的 IPv6 地址。
-
enNameState
-
已忽略。 将 设置为零 (0) 。
注销对等名称
以下列表标识了有关注销对等名称的重要信息。
- 只有注册对等名称的应用程序才能取消注册。
- 如果调用 WSACleanup ,则会自动取消注册对等名称。
- PNRP 始终删除整个服务名称注册。 它不允许删除单个地址。
- 注销名称时, essOperation 参数的值必须为 RNRSERVICE_DELETE。
- PNRP 不支持 值RNRSERVICE_DEREGISTER。
- dwControlFlags 参数必须为零 (0) 。
注销名称时,lpqsRegInfo 参数引用的 LPWSAQUERYSET 结构必须包含以下值:
-
dwSize
-
指定此结构的大小。
-
lpszServiceInstanceName
-
指定要注销的对等名称。
-
lpServiceClassID
-
必须 SVCID_PNRPNAME。
-
lpVersion
-
已忽略。 设置为 NULL。
-
lpszComment
-
已忽略。 设置为 NULL。
-
dwNameSpace
-
必须是 NS_PNRPNAME 或 NS_ALL。
-
lpNSProviderID
-
必须为 NS_PROVIDER_PNRPNAME 或 NULL。
-
lpszContext
-
必须是云名称、空字符串或 NULL。 如果此值为 NULL 或空字符串,则使用默认云“Global”。 否则,它必须指向有效的云名称。
-
dwNumberOfProtocols
-
已忽略。 将 设置为零 (0) 。
-
lpszQueryString
-
已忽略。 设置为 NULL。
-
dwNumberOfCsAddrs
-
已忽略。 设置为 NULL。
-
lpcsaBuffer
-
已忽略。 设置为 NULL。
-
dwOutputFlags
-
已忽略。 将 设置为零 (0) 。
-
lpBlob
-
指向指向 PNRPINFO 结构的 BLOB 结构的指针。 lpBlob 结构的 lpszIdentity 成员标识用于注册对等名称的标识的名称。 其余成员必须设置为注册名称时使用的相同值。
相关主题
-
WSASetService