使用通用主机和客户端进行 HTTP 元数据交换

如果客户端和主机无法交换元数据,则可以将通用主机和客户端替换为自定义主机和客户端,以帮助排查问题。 如果 WSD 调试客户端输出中未显示设备地址或设备元数据,则提供的传输地址或网络环境可能会导致失败。 有关通用主机和客户端的详细信息,请参阅 调试工具

如果已验证通用主机和客户端可以完成WS-Discovery和 HTTP 元数据交换,则可以跳过此诊断过程,并按照 使用 WinHTTP 日志记录验证获取流量中的过程继续故障排除。

如果主机或客户端是在电脑上运行的应用程序,则通用主机或客户端应在与实际主机或客户端相同的安全上下文中运行。 例如,如果实际主机或客户端以管理员身份运行,则通用主机或客户端必须以管理员身份运行。 此外,如果主机或客户端是独立设备,则应完全替换为在安全上下文中运行通用主机或客户端的电脑,该上下文保证无限制的网络访问 (例如,以管理员) 身份运行。

使用通用主机和客户端对 HTTP 元数据交换进行故障排除

  1. 打开命令提示符窗口。

  2. 运行以下命令: WSDDebug_host.exe /mode metadata /start

    注意

    可能会出现“Windows 安全中心警报”对话框。 如果是这样,请单击“ 取消阻止 ”以允许 WSD 调试主机运行。

     

    此命令生成如下所示的输出。 记下设备 ID。

    WSDAPI Debug Host
    Copyright (C) Microsoft Corporation 2007.  All rights reserved.
    Device ID is urn:uuid:37f86d35-e6ac-4241-964f-1d9ae46fb366
    Host metadata>
    
  3. 运行以下命令: WSDDebug_client.exe /mode metadata /hello off /resolve<id>。 将 ID> 替换为<步骤 2 中标识的设备 ID。

    注意

    可能会出现“Windows 安全中心警报”对话框。 如果是这样,请单击“ 取消阻止 ”以允许 WSD 调试客户端运行。

     

WSD 调试客户端生成如下所示的输出。

WSDAPI Debug Client
Copyright (C) Microsoft Corporation 2007.  All rights reserved.
Client ID is urn:uuid:0f571af7-6b0e-4daf-8054-f2233ac27910
Hello mode is disabled
Client metadata>
*****************************************************************************
Add at 02/28/07 15:16:51
+ EPR:
  + Address:                 urn:uuid:37f86d35-e6ac-4241-964f-1d9ae46fb366
+ Types:
    (wsdp) https://schemas.xmlsoap.org/ws/2006/02/devprof:Device
+ XAddrs:
  https://[::1]:5357/37f86d35-e6ac-4241-964f-1d9ae46fb366
+ Metadata version:          2
+ Instance ID:               1
+ Probe/Resolve tag:         WSDAPI debug_client
+ Remote transport address:  [::1]:3702
+ Local transport address:   ::1
+ Local interface GUID:      42133cd4-6a70-11db-bbc9-806e6f6e6963
Client metadata>
*****************************************************************************
Getting metadata for host at 02/28/07 15:16:51:
+ Endpoint reference:
  + Address:
    urn:uuid:37f86d35-e6ac-4241-964f-1d9ae46fb366
Using xAddr: https://[::1]:5357/37f86d35-e6ac-4241-964f-1d9ae46fb366
Client metadata>
*****************************************************************************
Metadata for host:
+ Endpoint reference:
  + Address:           urn:uuid:37f86d35-e6ac-4241-964f-1d9ae46fb366
Metadata section:
  + Dialect:
    https://schemas.xmlsoap.org/ws/2006/02/devprof/ThisDevice
  + Friendly name:
    [no lang]: Debugging Host
  + Firmware version:  1.0
  + Serial number:     00000000
Metadata section:
  + Dialect:
    https://schemas.xmlsoap.org/ws/2006/02/devprof/ThisModel
  + Manufacturer:
    [no lang]: Microsoft Corporation
  + Manufacturer URL:  https://www.microsoft.com/
  + Model names:
    [no lang]: Microsoft Debugging Host
  + Model number:      https://www.microsoft.com/
End of metadata
Client metadata>

WSD 调试客户端可能会在具有许多 DPWS 设备的网络上生成大量输出。 输出可以重定向到文件,以便于分析。 在 WSD 调试客户端提示符下键入 log tee<filename> ,将输出重定向到文件。 可以通过在 WSD 调试客户端提示符处键入 log tee stop 来停止输出重定向。

记下 EPR) 地址 (终结点引用。 此 EPR 地址应与上述步骤 2 中标识的设备 ID 匹配。 此外,请验证 WSD 调试客户端是否完全打印了设备的元数据。 设备元数据以 Metadata for host 开头,以 End of metadata结尾。

如果设备 ID 和设备元数据在 WSD 调试客户端输出中正确显示,则应用程序故障可能与提供的传输地址、操作系统或网络环境无关。 将通用主机和客户端替换为自定义主机和客户端,并按照 使用 WinHTTP 日志记录验证获取流量中的过程继续进行故障排除。

如果设备地址和设备元数据未显示在 WSD 调试客户端输出中,则故障可能具有以下一个或多个原因:

  • 主机播发的传输地址不正确或格式不正确。 WSD 调试客户端尝试从 ProbeMatchesResolveMatches 消息的 XAddrs 元素中提供的 URL 获取设备元数据。 用于元数据交换的 URL 显示在 WSD 调试客户端输出中,前缀为短语 Using xAddr。 以下示例演示上述 WSD 调试客户端输出中用于元数据交换的 XAddrs。

    Using xAddr: https://[::1]:5357/37f86d35-e6ac-4241-964f-1d9ae46fb366
    

    如果提供的 XAddr 不符合 XAddr 验证规则,则 WSD 调试客户端无法获取设备的元数据。

  • 应用程序在错误的安全上下文中运行。 验证应用程序是否使用正确的凭据,以及客户端和主机是否有足够的权限来访问网络。

  • 防火墙配置错误。 按照 检查适配器和防火墙设置 中的说明验证 Windows 防火墙设置是否正确,并且没有其他规则丢弃数据包。 客户端和主机还可以复制到“原始”计算机上, (一台具有从未加入域) 的默认操作系统安装的计算机,以尝试重现故障。

  • IPSec 策略正在阻止应用程序。 将客户端和主机复制到不受 IPSec 策略约束的计算机上,并尝试重现故障。

WSDAPI 诊断过程

使用 WSDAPI 故障排除入门