使用 WinHTTP 記錄來驗證取得流量
如果泛型主機和用戶端成功,但實際主機和用戶端仍然失敗,則中繼資料要求可能不會起始。 WinHTTP 記錄可用來確認輸出訊息正在產生並正確傳送。
以 WSDAPI 為基礎的用戶端應用程式會使用 WinHTTP 連線到裝置。 WSDAPI 型裝置主機不使用 WinHTTP。 此外,某些協力廠商 Proxy 不會使用 WinHTTP。 針對不使用 WinHTTP 的主機或 Proxy 進行疑難排解時,請遵循 檢查 HTTP 中繼資料交換的網路追蹤中的程式,略過此診斷程式並繼續疑難排解。
WinHTTP 記錄不會顯示所有 TCP 層級的流量。 如果 HTTP 流量以外的流量感興趣,請跳至 檢查 HTTP 中繼資料交換的網路追蹤 。
若要使用 WinHTTP 記錄來驗證取得流量
- 擷取 WinHTTP 記錄。
- 啟動「記事本」或其他文字編輯器。 文字編輯器必須以系統管理員身分執行。
- 開啟 WinHTTP 記錄檔。
- 確認已傳送必要的 HTTP 要求和中繼資料訊息。
如果在 WinHTTP 記錄中找到主機的 Get 訊息,則會成功將中繼資料要求傳送至 WinHTTP。 依照 檢查 HTTP 中繼資料交換的網路追蹤中的程式繼續疑難排解。
如果 WinHTTP 記錄中的主機找不到 Get 訊息,則不會起始中繼資料要求。 當主機發佈不正確 XAddrs 時,就會發生這種情況。 確認主機上的 XAddrs 符合 XAddr 驗證規則。
確認已傳送必要的 HTTP 要求和中繼資料訊息
成功交換中繼資料時,必須發生下列事件:
- WSDAPI 用戶端會產生輸出 HTTP 要求。 此要求會傳送至 WSDAPI 主機。
- 用戶端會將 Get 訊息傳送至主機。
這些事件會在 WinHTTP 記錄中擷取。
下列 WinHTTP 記錄檔程式碼片段顯示 WSDAPI 用戶端所產生的輸出 HTTP 要求。
16:51:47.893 ::*0000004* :: WinHttpSendRequest(0x36aae0, "", 0, 0x0, 0, 658, 0)
16:51:47.893 ::*0000004* :: WinHttpSendRequest() returning TRUE
16:51:47.897 ::*0000004* :: sending data:
16:51:47.897 ::*0000004* :: 226 (0xe2) bytes
16:51:47.897 ::*0000004* :: <<<<-------- HTTP stream follows below ----------------------------------------------->>>>
16:51:47.897 ::*0000004* :: POST /dbe17c74-3b21-4f52-addc-b84b444f73a0 HTTP/1.1
16:51:47.897 ::*0000004* :: Content-Type: application/soap+xml
16:51:47.897 ::*0000004* :: User-Agent: WSDAPI
16:51:47.897 ::*0000004* :: Host: 192.168.0.1:5357
16:51:47.897 ::*0000004* :: Content-Length: 658
16:51:47.897 ::*0000004* :: Connection: Keep-Alive
16:51:47.897 ::*0000004* :: Cache-Control: no-cache
16:51:47.897 ::*0000004* :: Pragma: no-cache
16:51:47.897 ::*0000004* ::
16:51:47.897 ::*0000004* ::
16:51:47.897 ::*0000004* :: <<<<-------- End ----------------------------------------------->>>>
下列 WinHTTP 記錄檔程式碼片段會顯示 Get 訊息。 此訊息應緊接在 HTTP 要求之後。
16:51:47.898 ::*0000004* :: WinHttpWriteData(0x36aae0, 0x11aa7c4, 658, 0x0)
16:51:47.899 ::*0000004* :: sending data:
16:51:47.899 ::*0000004* :: 658 (0x292) bytes
16:51:47.899 ::*0000004* :: <<<<-------- HTTP stream follows below ----------------------------------------------->>>>
16:51:47.899 ::*0000004* :: <?xml version="1.0" encoding="utf-8" ?>
16:51:47.899 ::*0000004* :: <soap:Envelope xmlns:soap="https://www.w3.org/2003/05/soap-envelope" xmlns:wsa="https://schemas.xmlsoap.org/ws/2004/08/addressing"><soap:Header><wsa:To>urn:uuid:dbe17c74-3b21-4f52-addc-b84b444f73a0</wsa:To><wsa:Action>https://schemas.xmlsoap.org/ws/2004/09/transfer/Get</wsa:Action><wsa:MessageID>urn:uuid:8506ac50-3646-4621-9680-86f484d87909</wsa:MessageID><wsa:ReplyTo><wsa:Address>https://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:ReplyTo><wsa:From><wsa:Address>urn:uuid:b32467b5-e7ee-4ae3-8a8e-f5aa417c23b6</wsa:Address></wsa:From></soap:Header><soap:Body></soap:Body></soap:Envelope>
16:51:47.899 ::*0000004* :: <<<<-------- End ----------------------------------------------->>>>
16:51:47.899 ::*0000004* :: WinHttpWriteData() returning TRUE
Action元素 (<wsa:Action>https://schemas.xmlsoap.org/ws/2004/09/transfer/Get</wsa:Action>
) 將訊息識別為Get訊息。 例如,確認 To 元素的值 (, <wsa:To>urn:uuid:dbe17c74-3b21-4f52-addc-b84b444f73a0</wsa:To>
) 符合主機在原始 UDP WS-Discovery訊息中公告的裝置識別碼。 您可以使用 WSD 偵錯主機來檢查主機公告的裝置識別碼。 如需詳細資訊,請參閱 使用泛型主機和用戶端進行 UDP WS-Discovery。
此外,主機對中繼資料要求的回應可以在用戶端的 WinHTTP 記錄中找到。 主機會產生 GetResponse 訊息,以回應用戶端的 Get 訊息。
下列 WinHTTP 記錄檔程式碼片段顯示 WSDAPI 用戶端所接收的輸入 GetResponse 訊息。
16:51:47.899 ::*0000004* :: WinHttpReceiveResponse(0x36aae0, 0x0)
16:51:47.899 ::*0000004* :: WinHttpReceiveResponse() returning TRUE
16:51:47.899 ::*Session* :: DllMain(0x73fc0000, DLL_THREAD_ATTACH, 0x0)
16:51:47.902 ::*0000004* :: received data:
16:51:47.902 ::*0000004* :: 1024 (0x400) bytes
16:51:47.902 ::*0000004* :: <<<<-------- HTTP stream follows below ----------------------------------------------->>>>
16:51:47.902 ::*0000004* :: HTTP/1.1 200
16:51:47.902 ::*0000004* :: Content-Type: application/soap+xml
16:51:47.902 ::*0000004* :: Server: Microsoft-HTTPAPI/2.0
16:51:47.902 ::*0000004* :: Date: Fri, 15 Jun 2007 23:51:47 GMT
16:51:47.905 ::*0000004* :: Content-Length: 2228
16:51:47.905 ::*0000004* ::
16:51:47.905 ::*0000004* :: <?xml version="1.0" encoding="utf-8" ?>
16:51:47.905 ::*0000004* :: <soap:Envelope xmlns:soap="https://www.w3.org/2003/05/soap-envelope" xmlns:wsa="https://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsx="https://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsdp="https://schemas.xmlsoap.org/ws/2006/02/devprof" xmlns:un0="http://schemas.microsoft.com/windows/pnpx/2005/10" xmlns:pub="http://schemas.microsoft.com/windows/pub/2005/07"><soap:Header><wsa:To>https://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To><wsa:Action>https://schemas.xmlsoap.org/ws/2004/09/transfer/GetResponse</wsa:Action><wsa:MessageID>urn:uuid:2884cbcc-2848-4c35-9327-5ab5451a8729</wsa:MessageID><wsa:RelatesTo>urn:uuid:8506ac50-3646-4621-9680-86f484d87909</wsa:RelatesTo></soap:Header><soap:Body><wsx:Metadata><wsx:MetadataSection Dialect="https://schemas.xmlsoap.org/ws/2006/02/devprof/ThisDevice"><wsdp:ThisDevice><wsd
16:51:47.905 ::*0000004* :: <<<<-------- End ----------------------------------------------->>>>
Action元素 (<wsa:Action>https://schemas.xmlsoap.org/ws/2004/09/transfer/GetResponse</wsa:Action>
) 將訊息識別為GetResponse訊息。 確認 GetResponse 訊息的RelatesTo元素值符合Get訊息之 MessageID元素的值。 在此範例中,RelatesTo元素的值 () <wsa:RelatesTo>urn:uuid:8506ac50-3646-4621-9680-86f484d87909</wsa:RelatesTo>
符合 Get 訊息 () <wsa:MessageID>urn:uuid:8506ac50-3646-4621-9680-86f484d87909</wsa:MessageID>
MessageID元素的值。
相關主題