Я скачал gSoap и сгенерировал исходный код для wsdl. И я мог подключиться к серверу и отправить запрос.
Но я не могу понять, как я могу отловить события http, такие как отправленные байты, recv байтов.
Я прочитал этот документ http://www.cs.fsu.edu/~engelen/soapdoc2.html.
Но я не могу найти то, что мне нужно. Я нашел функцию fsend
, Как я понимаю, эта функция выполняется, когда мы отправляем запрос на сервер. Должен ли я сделать что-то подобное?
service.fsend = Custom;
куда Custom
мой обратный звонок?
Я нашел другой обратный вызов ffiltersend.
Насколько я понимаю, эта функция запускается при отправке запроса.
Я использую это.
Но я не понимаю, что последним параметром в этом методе является указатель на size_t.
Когда я получаю значение из этого указателя и делю на 2, я получаю счет моих реальных байтов. Зачем?
Чтобы получить статистику по количеству отправленных, полученных байтов и зарегистрировать входящие и исходящие сообщения в файловой системе, используйте «подключаемый модуль регистрации», который поставляется с программным обеспечением gSOAP.
Сначала зарегистрируйте плагин с помощью:
#include "plugin/logging.h" // this file is in the gSOAP distro path
...
soap_register_plugin(soap, logging);
Затем используйте эти функции, чтобы установить места регистрации для входящих и исходящих сообщений:
soap_set_logging_inbound(struct soap*, FILE*);
soap_set_logging_outbound(struct soap*, FILE*);
где дескриптор файла, переданный в качестве второго аргумента, указывает на открытый файл, который можно открывать и закрывать до и после регистрации. использование NULL
в качестве второго аргумента отключить ведение журнала.
Чтобы получить статистику, т.е. количество байтов в размере сообщения, используйте:
soap_get_logging_stats(struct soap*, size_t *sent, size_t *recv);
где второй и третий аргументы будут обновлены этим вызовом.
Вот и все, что нужно.
Если вы хотите использовать свои собственные обратные вызовы для обработки сообщений, то, возможно, стоит начать с изучения plugin/logging.c
файл о том, как это делается. Этот файл короткий.
Других решений пока нет …