При работе с web-сервисами нередко возникают ошибки, которые трудно диагностировать по сообщению об ошибке, выдаваемому 1С:Предприятием. Это могут быть:
- Ошибки конфигурирования поддержки web-сервисов
- Ошибки определения web-сервисов в конфигурации
- Ошибки сети
- Ошибки при работе с прокси-сервером
- и др.
Большинство из этих ошибок трудно диагностировать стандартными средствами. В данной статье описывается применение средств мониторинга сети для диагностирования таких ошибок.
Существует много программ мониторинга сети. Это, например, встроенные в Windows Server 2003 средства мониторинга сети, Wireshark, MS Soap Toolkit, Apache Axis Soap Monitor и др. Первые два не требуют специальной настройки и могут использоваться для мониторинга любого сетевого трафика. Последние два могут использоваться только для мониторинга HTTP Soap трафика и требуют перенаправления вызова на специальный порт перехвата.
Далее на примере монитора сети Wireshark мы покажем, как отслеживать те данные, которые передаются между клиентом и сервером и на основе их анализа определять характер наблюдаемых ошибок. Wireshark является свободно распространяемой программой с открытым исходным кодом.
Перед началом работы необходимо скачать монитор сети Wireshark c сайта [необходимо зарегистрироваться для просмотра ссылки] и установить его на клиентский компьютер, с которого идет вызов web-сервисов. Под Windows, если требуется мониторинг localhost, то необходимо ознакомиться с [необходимо зарегистрироваться для просмотра ссылки].
Wireshark выполняет мониторинг сети средствами операционной системы и поэтому не требует дополнительной настройки web-сервисов (например, перевода вызова на специальный порт перехвата и т.д.), все выполняется прозрачно.
Для запуска мониторинга нужно открыть диалог захвата интерфейсов "Capture/Interfaces...", выбрать в диалоге устройство сетевой карты, для которой предполагается вести мониторинг, и выполнить запуск, нажав кнопку "Start". После этого Wireshark будет вести мониторинг любых пакетов, передаваемых через выбранную сетевую карту. Для остановки мониторинга нужно выполнить "Capture/Stop".
Передаваемые пакеты будут выводиться в основном окне программы в виде списка. Для каждого пакета может быть выведена такая информации как: время создания, отправитель, получатель, протокол, дополнительные данные и др. Wireshark понимает большое количество протоколов, но для нашего случая интересен HTTP протокол. Для того чтобы получить список только HTTP пакетов, нужно в поле "Filter" главного окна программы задать "http" и нажать кнопку "Apply". Wireshark имеет развитые средства фильтрации. Можно фильтровать, например, по протоколу, по отправителю, получателю и др. (см. документацию Wireshark).
Для каждого выбранного в списке пакета Wireshark показывает данные пакета в разрезе стека протоколов. Например, для http пакета показывается информация по Frame 1, Ethernet II, IP, TCP и HTTP. Наиболее интересными для нас являются данные HTTP, где можно для запросов посмотреть тип запроса (GET, POST, ...), запрашиваемый ресурс, HTTP заголовки и данные запроса. Для ответов показывается HTTP статус, HTTP заголовки ответа и данные ответа. Если данные в формате xml, то Wireshark позволяет вывести их в иерархическом виде (вместо набора шестнадцатеричных данных), что очень удобно при анализе SOAP запросов.
Рассмотрим основные типы ошибок, которые могут возникнуть при работе с web-сервисами.
- Ошибки подключения. Анализируя данные пакета запроса можно понять, почему клиент не подключается к серверу. Например, запрос идет к прокси-серверу, вместо обращения по локальной сети, минуя прокси-сервер, либо web-сервер не запущен и др.
- Ресурс не найден. Если HTTP статус ответа содержит код 404, это означает, что запрашиваемый ресурс не найден. Такая ошибка может возникнуть вследствие либо неправильной настройки поддержки web-сервисов на web-сервере, либо неправильном указании url web-сервиса, которого физически нет на сервере.
- Внутренняя ошибка сервера. Наиболее частая ошибка, возникающая при работе с web-сервисами. HTTP статус ответа содержит в этом случае код 500, а тело ответа содержит данные, описывающие характер ошибки.