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

如果通用主机和客户端可以在网络上看到对方,但实际的主机和客户端不能看到对方,那么问题很可能在于通过网络在端点之间发送的消息。 有关通用主机和客户端的详细信息,请参阅使用通用主机和客户端进行 UDP WS-Discovery 。 由于很难收集、筛选和读取完整的网络跟踪,因此可以使用 WSD 调试客户端工具输出 WS-Discovery 消息的多播端。

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

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

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

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

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

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

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

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

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

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

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

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

    将显示正在筛选的 IP 地址列表。

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

禁用 IP 筛选

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

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

WSDAPI 诊断过程

WSDAPI 故障排除入门