使用 WSD 调试客户端验证多播流量

如果通用主机和客户端可以在网络上相互看到,但实际主机和客户端无法看到对方,则问题很可能出在通过网络在终结点之间发送的消息中。 有关泛型主机和客户端的详细信息,请参阅 将泛型主机和客户端用于 UDP WS-Discovery。 由于整个网络跟踪可能难以收集、筛选和读取,因此 WSD 调试客户端工具可用于打印WS-Discovery消息的多播端。

多播模式下的 WSD 调试客户端只能检查一半的消息,因为客户端无法打印单播消息。 如果对单播流量感兴趣,请直接跳到 检查 UDP WS-Discovery 的网络跟踪

此过程显示一个方法,该方法将显示网络上的所有多播流量。 若要仅显示传入和传出设备的多播流量,请参阅下面的 筛选 WSD 调试客户端结果 部分。

使用 WSD 调试客户端验证多播流量

  1. 将主机和客户端配置为跨网络运行 (即,确保主机和客户端将在) 的不同计算机上运行。
  2. 打开命令提示符并运行以下命令: WSDDebug_client.exe /mode 多播
  3. 通过启动主机和客户端或在网络资源管理器中按 F5 来重现故障。
  4. 验证消息是否正在多播。

如果所需的消息显示在 WSD 调试客户端输出中,则应用程序失败可能位于多播消息内容中,或者存在于相应单播响应消息的存在或内容中。 按照 检查 UDP WS-Discovery 的网络跟踪中的说明继续故障排除。

如果所需的消息显示在 WSD 调试客户端输出中,则很可能已确定应用程序问题的根源。 多播流量很可能未在网络上传输。 当应用程序未正确枚举多播适配器时,可能会发生此故障。 应用程序必须通过所有网络接口显式发送多播流量;否则,可能不会为环回接口或其他接口生成数据包。 若要验证数据包是否未出现在网络上,请按照 检查 UDP WS-Discovery 的网络跟踪 中的说明操作,并查找缺少多播消息的证据。

验证消息是否正在多播

始终验证 探测 消息是否正在进行多播。 (可选)验证 HelloResolve 消息是否正在多播。 请注意,并非所有应用程序都使用 Resolve 消息。 有关客户端和主机使用的消息模式的详细信息,请参阅发现和元数据交换消息模式入门与 WSDAPI 故障排除

必须触发消息才能发送,如上面的步骤 3 中所述。 WSD 调试客户端将原始 SOAP 消息显示为输出。 由于 WSD 调试客户端在多播模式下打印的所有消息都是通过多播套接字接收的,因此不会显示消息目标地址。

以下示例 WSD 调试客户端输出显示一条探测消息。 <wsa:Action> 元素将消息标识为探测消息。 <检查 wsa:Action> 字段,验证收到的消息是否为探测消息。

UDP message at 05/08/07 10:06:55 from soap.udp://[127.0.0.1:49334]
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="https://www.w3.org/2003/05/soap-envelope" xmlns:wsa="h
ttp://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="https://schemas.xmlso
ap.org/ws/2005/04/discovery" xmlns:wsdp="https://schemas.xmlsoap.org/ws/2006/02/d
evprof"><soap:Header><wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:T
o><wsa:Action>https://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action>
<wsa:MessageID>urn:uuid:256ad815-1576-4e59-8efc-4c1e0f15fdd2</wsa:MessageID></so
ap:Header><soap:Body><wsd:Probe><wsd:Types>wsdp:Device</wsd:Types></wsd:Probe></
soap:Body></soap:Envelope>

以下示例 WSD 调试客户端输出显示 Hello 消息。 <wsa:Action> 元素将消息标识为 Hello 消息。

UDP message at 05/08/07 10:10:49 from soap.udp://[[::1]:49343]
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="https://www.w3.org/2003/05/soap-envelope" xmlns:wsa="h
ttp://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="https://schemas.xmlso
ap.org/ws/2005/04/discovery" xmlns:wsdp="https://schemas.xmlsoap.org/ws/2006/02/d
evprof"><soap:Header><wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:T
o><wsa:Action>https://schemas.xmlsoap.org/ws/2005/04/discovery/Hello</wsa:Action>
<wsa:MessageID>urn:uuid:8999e29a-b056-4345-9e13-f42dbedab28a</wsa:MessageID><wsd
:AppSequence InstanceId="1" SequenceId="urn:uuid:abb0a2a1-6efc-4242-b8e7-c02484a
6eea2" MessageNumber="1"></wsd:AppSequence></soap:Header><soap:Body><wsd:Hello><
wsa:EndpointReference><wsa:Address>urn:uuid:02a76d74-82d0-43e6-ab09-16f54ab81ac6
</wsa:Address></wsa:EndpointReference><wsd:Types>wsdp:Device</wsd:Types><wsd:Met
adataVersion>1</wsd:MetadataVersion></wsd:Hello></soap:Body></soap:Envelope>

筛选 WSD 调试客户端结果

筛选 WSD 调试客户端结果有助于识别涉及设备的事件流量。 只有在嘈杂的网络上才需要筛选。

有两种方法可以筛选结果。 启动 WSD 调试客户端时,可以显式标识要筛选的 IP 地址。 或者,可以在客户端启动后指定 IP 地址。 本节介绍这两种方法。

在启动 WSD 调试客户端时指定要筛选的 IP 地址

  1. 将主机和客户端配置为跨网络运行 (即,确保主机和客户端将在) 的不同计算机上运行。
  2. 收集设备的 IP 地址 (es) 。 例如,如果设备有多个地址 (,则同时具有 IPv4 和 IPv6 地址) 必须收集所有地址。
  3. 打开命令提示符并运行以下命令: WSDDebug_client.exe /mode 多播 /ip 添加<设备 IP>

<设备 IP> 是 IP 地址。 以下列表显示了此 IP 地址的一些示例格式。

  • 192.168.0.1
  • ::1
  • mydevice.contoso.com

WSD 调试客户端会自动解析在命令提示符下提供的主机名。

启动 WSD 调试客户端后筛选结果

  1. 将主机和客户端配置为跨网络运行 (即,确保主机和客户端将在) 的不同计算机上运行。
  2. 收集设备的 IP 地址 (es) 。 例如,如果设备有多个地址 (,则同时具有 IPv4 和 IPv6 地址) 必须收集所有地址。
  3. 打开命令提示符并运行以下命令: WSDDebug_client.exe /mode 多播
  4. 在 WSD 调试客户端命令提示符处运行以下命令: ip 添加<设备 IP>
  5. 重复步骤 4,直到添加所有设备 IP 地址。

以下过程假定 WSD 调试客户端已启动,并且正在按 IP 地址进行筛选。

验证是否筛选了正确的 IP 地址

  • 在 WSD 调试客户端命令提示符处运行以下命令: ip print

    此时会显示正在筛选的 IP 地址列表。

以下过程假定 WSD 调试客户端已启动,并且正在按 IP 地址进行筛选。

禁用筛选

  • 在 WSD 调试客户端命令提示符处运行以下命令: ip clear

    所有多播流量现在将显示在调试输出中。

WSDAPI 诊断过程

使用 WSDAPI 故障排除入门