Поделиться через


Использование логирования WinHTTP для проверки GET-трафика

Если универсальный хост и клиент успешны, но фактический хост и клиент по-прежнему завершаются ошибкой, возможно, что запрос метаданных не инициируется. ведение журнала WinHTTP можно использовать для проверки правильности создания и отправки исходящих сообщений.

Клиентские приложения на основе WSDAPI используют WinHTTP для подключения к устройствам. Хосты устройств на базе WSDAPI не используют WinHTTP. Кроме того, некоторые сторонние прокси-серверы не используют WinHTTP. При устранении неполадок с узлом или прокси-сервером, не использующим WinHTTP, пропустите эту диагностическую процедуру и продолжайте устранять неполадки, следуя инструкциям по проверке сетевых трассировок для обмена метаданными HTTP.

ведение журнала WinHTTP не отображает весь трафик на уровне TCP. Перейдите к инспектирования трассировок сети для обмена метаданными HTTP, если интересует трафик, кроме HTTP-трафика.

Использование ведения журнала WinHTTP для проверки трафика запросов

  1. Соберите журналы WinHTTP.
  2. Запустите Блокнот или другой текстовый редактор. Текстовый редактор должен выполняться от имени администратора.
  3. Откройте файл журнала WinHTTP.
  4. Убедитесь, что были отправлены необходимые HTTP-запросы и сообщения метаданных.

Если сообщение Get для узла найдено в журналах WinHTTP, запросы метаданных отправляются в WinHTTP успешно. Продолжайте устранять неполадки, следуя процедурам, описанным в проверке сетевых трассировок для обмена метаданными HTTP.

Если сообщение Get не найдено для узла в журналах WinHTTP, то запрос метаданных не инициируется. Это может произойти, когда узел публикует недопустимые XAddrs. Убедитесь, что XAddrs на хосте соответствуют правилам валидации XAddr .

Проверка отправки необходимых HTTP-запросов и сообщений метаданных

Для успешного обмена метаданными необходимо выполнить следующие события:

  • Клиент WSDAPI создает исходящий HTTP-запрос. Этот запрос отправляется к хосту WSDAPI.
  • Клиент отправляет сообщение "Get" на хост.

Эти события фиксируются в журналах WinHTTP.

В следующем фрагменте файла журнала WinHTTP показан исходящий HTTP-запрос, созданный клиентом 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 ----------------------------------------------->>>>

В следующем фрагменте файла журнала 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

Элемент действие (<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. Для получения более подробной информации см. раздел Использование универсального хоста и клиента для обнаружения WS-Discovery по UDP.

Кроме того, ответ узла на запрос метаданных можно найти в журналах WinHTTP клиента. Хост создает сообщение GetResponse в ответ на сообщение клиента Get.

В следующем фрагменте файла журнала WinHTTP отображается входящее сообщение GetResponse, полученное клиентом 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 ----------------------------------------------->>>>

Элемент Action (<wsa:Action>https://schemas.xmlsoap.org/ws/2004/09/transfer/GetResponse</wsa:Action>) идентифицирует сообщение как сообщение GetResponse. Убедитесь, что значение элемента RelatesTo сообщения GetResponse соответствует значению элемента MessageID сообщения Get. В этом примере значение элемента RelatesTo (<wsa:RelatesTo>urn:uuid:8506ac50-3646-4621-9680-86f484d87909</wsa:RelatesTo>) соответствует значению элемента MessageID сообщения Get (<wsa:MessageID>urn:uuid:8506ac50-3646-4621-9680-86f484d87909</wsa:MessageID>).

WinHTTP

Запись журналов WinHTTP

диагностические процедуры WSDAPI

Начало работы с устранением неполадок WSDAPI