Udostępnij przez


Używanie rejestrowania WinHTTP do weryfikowania uzyskiwania ruchu

Jeśli ogólny host i klient zadziałają, ale rzeczywisty host i klient nadal się nie udają, możliwe jest, że żądanie metadanych nie jest inicjowane. rejestrowania WinHTTP można użyć do sprawdzenia, czy komunikaty wychodzące są generowane i wysyłane poprawnie.

Aplikacje klienckie oparte na interfejsie WSDAPI używają WinHTTP do nawiązywania połączenia z urządzeniami. Hosty urządzeń oparte na interfejsie WSDAPI nie używają winHTTP. Ponadto niektóre serwery proxy innych firm nie używają usługi WinHTTP. Podczas rozwiązywania problemów z hostem lub serwerem proxy, który nie korzysta z winHTTP, pomiń tę procedurę diagnostyczną i kontynuuj rozwiązywanie problemów, postępując zgodnie z procedurami opisanymi w Inspekcja śladów sieci dla programu HTTP Metadata Exchange.

rejestrowanie WinHTTP nie pokazuje całego ruchu na poziomie TCP. Przejdź do Inspekcja śladów sieci dla wymiany metadanych HTTP, jeśli interesuje Cię także ruch inny niż HTTP.

Aby użyć rejestrowania WinHTTP do weryfikacji ruchu Get

  1. Przechwyć dzienniki WinHTTP.
  2. Uruchom Notatnik lub inny edytor tekstów. Edytor tekstów musi być uruchamiany jako administrator.
  3. Otwórz plik dziennika WinHTTP.
  4. Sprawdź, czy wysłano wymagane żądania HTTP i komunikaty metadanych.

Jeśli w dziennikach WinHTTP zostanie znaleziony komunikat Get dla hosta, żądania metadanych są wysyłane do WinHTTP pomyślnie. Kontynuuj rozwiązywanie problemów, postępując zgodnie z procedurami w Analiza śladów sieciowych dla wymiany metadanych HTTP w.

Jeśli nie można odnaleźć komunikatu Get dla hosta w dziennikach WinHTTP, żądanie metadanych nie jest inicjowane. Może się tak zdarzyć, gdy host publikuje nieprawidłowe XAddrs. Sprawdź, czy XAddrs na hoście są zgodne z regułami weryfikacji XAddr .

Sprawdzanie, czy wysłano wymagane żądania HTTP i komunikaty metadanych

W przypadku pomyślnej wymiany metadanych muszą wystąpić następujące zdarzenia:

  • Klient WSDAPI generuje wychodzące żądanie HTTP. To żądanie jest wysyłane do hosta WSDAPI.
  • Klient wysyła do hosta wiadomość Get.

Te zdarzenia są przechwytywane w dziennikach WinHTTP.

Poniższy fragment kodu pliku dziennika WinHTTP przedstawia wychodzące żądanie HTTP wygenerowane przez klienta WSDAPI.

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 ----------------------------------------------->>>>

Poniższy fragment pliku dziennika WinHTTP przedstawia komunikat Get. Ten komunikat powinien natychmiast następować po żądaniu 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

Element akcji (<wsa:Action>https://schemas.xmlsoap.org/ws/2004/09/transfer/Get</wsa:Action>) identyfikuje komunikat jako komunikat Pobierz. Sprawdź, czy wartość elementu To (na przykład <wsa:To>urn:uuid:dbe17c74-3b21-4f52-addc-b84b444f73a0</wsa:To>) jest zgodna z identyfikatorem urządzenia anonsowanym przez hosta w oryginalnych komunikatach WS-Discovery UDP. Identyfikator urządzenia, który ogłasza host, można sprawdzić przy użyciu WSD Debug Host. Aby uzyskać więcej informacji, zobacz Używanie ogólnego hosta i klienta dla UDP WS-Discovery.

Ponadto odpowiedź hosta na żądanie metadanych można znaleźć w dziennikach WinHTTP klienta. Komunikat GetResponse jest generowany przez hosta w odpowiedzi na komunikat Get klienta.

Poniższy fragment kodu pliku dziennika WinHTTP przedstawia przychodzący GetResponse komunikat odebrany przez klienta WSDAPI.

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 ----------------------------------------------->>>>

Element Action (<wsa:Action>https://schemas.xmlsoap.org/ws/2004/09/transfer/GetResponse</wsa:Action>) identyfikuje komunikat jako komunikat GetResponse. Sprawdź, czy wartość elementu RelatesTo komunikatu GetResponse jest zgodna z wartością elementu MessageID komunikatu Get. W tym przykładzie wartość elementu RelatesTo (<wsa:RelatesTo>urn:uuid:8506ac50-3646-4621-9680-86f484d87909</wsa:RelatesTo>) odpowiada wartości elementu MessageID elementu Get message (<wsa:MessageID>urn:uuid:8506ac50-3646-4621-9680-86f484d87909</wsa:MessageID>).

WinHTTP

Przechwytywanie Dzienników WinHTTP

Procedury diagnostyczne WSDAPI

wprowadzenie do rozwiązywania problemów z interfejsem WSDAPI