其他WS-Discovery功能

在某些情况下, Web 服务的设备配置文件 (DPWS) 和相关规范不会显式定义实现功能。 例如, WS-Discovery 规范不定义多宿主环境中的客户端和主机行为。 实现 WSDAPI 时,某些发现功能已添加到规范中定义的功能之外。

WSDAPI 还实现 WS-Discovery v1.1 CD1 的选定部分,以便通过 HTTP 与发现代理通信。

本主题的目的是介绍 WSDAPI 实现的发现功能,但未在 DPWS 或 WS-Discovery 规范中另有说明。

IPv6 地址和 soap.udp URI 格式

SOAP-over-UDP 和 WS-Discovery未显式描述文本 IPv6 地址如何以 soap.udp URI 格式表示。 RFC 2396,标题为“统一资源标识符 (URI) :通用语法”,指示 soap.udp URI 格式不支持文本 IPv6 地址。

为简单起见,WSDAPI 识别 soap.udp 方案中括在方括号中的 IPv6 地址。 例如,该地址 soap.udp://[2001:abcd:0001:0002:0003:0004:0005:0032]:3702 由 WSDAPI 识别。 这类似于在 HTTP 中处理 IPv6 地址的方式。

Hello 和 XAddrs

WSDAPI 的 DPWS 宿主对象永远不会在消息正文中使用 XAddrs 发送WS-Discovery Hello 消息。 如果客户端需要获取 XAddrs,则客户端在收到 Hello 消息后始终发送 Resolve 消息。

此方法有两个优点。 首先,基于 WSDAPI 构建的设备永远不会公开泄露专用网络的 IP 地址的 XAddrs。 其次,基于 WSDAPI 构建的设备仅公开可供客户端访问的 XAddrs,这意味着永远不会将 IPv6 地址发送到 IPv4 客户端。

收到 “探测 ”或“解析”消息时,响应中仅发送单个 XAddr。 发送的 XAddr 对应于接收请求的本地地址。 如果请求通过 IPv6 跨子网接收,则 WSDAPI 将在响应中提供全局 IPv6 地址。

首选地址

设备可以在 HelloProbeMatchResolveMatch 消息中提供多个 XAddr。 服务也可以在具有不同传输地址的多个终结点上提供。 在这些情况下,WSDAPI 将尝试在找到的第一个可用地址上与设备通信。 如果地址来自可用协议,例如安装 IPv4 的计算机上的 IPv4 或安装了 IPv6 的计算机上的 IPv6,则可以使用该地址。 此外,如果地址来自不在本地子网上的设备或服务,则仅当它是 IPv4、IPv6 站点本地或 IPv6 链接本地时才可用。

元数据交换中的 WSDL

基于 WSDAPI 构建的设备和服务不会在元数据交换中提供其 WSDL,除非由应用程序扩展以提供此信息。 默认情况下,WSDL 预配不是编程模型的一部分。

APP_MAX_DELAY

DPWS 将APP_MAX_DELAY定义为接收探测和发送 ProbeMatch 之间的随机延迟间隔,为 5,000 毫秒。 Windows 防火墙要求 UDP 的多播请求/单播响应模型只能在 4 秒防火墙时段内工作。 因此,WSDAPI 将在 2,500 毫秒或更短的时间段内传输响应,而不是 APP_MAX_DELAY 描述的 5,000 毫秒的时段。

IANA 端口预留

默认情况下,WSDAPI 对 HTTP 流量使用 TCP 端口 5357,对 HTTPS 流量使用 TCP 端口 5358。 这些端口通过 HTTP.sys 中的 URL 预留为较低特权进程保留,并且也通过 IANA 保留。

UDP 端口共享

WSDAPI 使用端口共享。 发送到端口 3702 的单播消息可能无法由所有基于 WSDAPI 的应用程序正确处理。 如果应用程序以独占方式绑定到端口 3702,则可能会阻止基于 WSDAPI 的应用程序正确使用该端口。

WS-Discovery v1.1 CD1 代理

WSDAPI 将搜索实现 WS-Discovery v1.1 CD1 托管模式协议的发现代理并与之通信。 WS-Discovery v1.1 CD1 是 WS-Discovery 的第一个修订版,包含用于代理与客户端或设备之间通信的 HTTP 协议的显式说明。

为了限制多播请求中使用的并发版本数,WSDAPI 在 2005/04 命名空间中发送WS-Discovery探测请求,但搜索WS-Discovery v1.1 CD1 DiscoveryProxy 类型。 如果代理响应,WSDAPI 会将 HTTP 探测或解析请求发送到 WS-Discovery v1.1 CD1 中定义的指定代理终结点。