实现多宿主 WSD 设备
WS 发现 和 Web 服务的设备配置文件 (DPWS) 不描述多宿主设备的实现。 本主题介绍 WSDAPI 中的多宿主设备支持,并向客户端和设备开发人员提供实现建议。 在本主题中,假设发现消息通过 IPv4 和 IPv6 (发送(如果可用) 具有相同消息 ID 和应用程序序列化信息)。
多宿主环境中的发现
如其他WS-Discovery功能的 Hello 和 XAddrs 部分中所述,WSDAPI 永远不会在 Hello 消息中提供 XAddrs。 这意味着可以在具有相同消息 ID 和应用程序序列化信息的所有网络接口上发送相同的 Hello 消息。 这样,客户端冲突检测可以更轻松地在客户端和设备共享多个子网时放弃同一设备中的多个 Hello 消息。
由于 XAddrs 未在 Hello 消息中发送,因此客户端实现必须发送 Resolve 消息才能获取相关的设备地址。 应在具有相同消息 ID 的所有客户端接口上发送“解析”,设备应根据需要筛选重复消息。 使用“解析”消息的相同消息 ID,设备可以根据需要选取与客户端通信的首选接口。
发送 ResolveMatch 消息时,设备应提供与消息单播的网络接口相关的 XAddrs 。 这种做法有助于避免多次客户端连接尝试和复杂的重试逻辑。
多宿主环境中的元数据交换
在多宿主环境中实现元数据交换比实现发现更困难,因为元数据版本控制。 如果客户端通过多个接口请求元数据,则客户端可以通过不同的接口接收多个 GetResponse 消息。 这些 GetResponse 消息可以包含具有相同元数据版本的不同 关系 元数据部分。 这会减少元数据版本号的值。
有一种替代方法,其中,单个 GetResponse 消息会随服务的所有地址一起发送响应。 此方法的缺点是,可能会披露专用信息,例如间接访问网络的拓扑。
在 Windows Vista 上,WSDAPI 提供的元数据仅包含对接收元数据请求的接口有效的地址。