其他 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 地址。 例如,WSDAPI 可识别地址 soap.udp://[2001:abcd:0001:0002:0003:0004:0005:0032]:3702。 这类似于在 HTTP 中处理 IPv6 地址的方式。

Hello 和 XAddrs

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

此方法有两个优点。 首先,基于 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 将 TCP 端口 5357 用于 HTTP 流量,将 TCP 端口 5358 用于 HTTPS 流量。 这些端口通过 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 中定义的指定代理终结点。