В качестве предварительной работы вы можете сделать несколько вещей:
- включить DBGLOG в gsoap
- использовать soap_faultdetail на стороне клиента.
Я на 99% уверен, что он выдаст ошибку тайм-аута tcp-соединения, что означает, что только что произошел сбой при установлении соединения.
Если это так, это означает, что WS по какой-то причине не принял соединение. Источник проблем может лежать где-то между proxy / firewall / os / buggy ws / driver, чтобы назвать только некоторые из них. Из-за этого можно использовать попытку переподключения. Я не знаком с symbian, но в Windows переподключение ОС происходит за кулисами:
По умолчанию попытка переподключения выполняется дважды, но это поведение можно изменить с помощью параметра реестра, драйвера или winsock.
Я думаю, что вы должны написать явную подпрограмму повторения подключения на уровне вашего приложения и заставить gSOAP использовать ее (см. Раздел ловушек в документации gSOAP) или просто вызывать soap_connect пару раз, если она возвращает ошибку.
ПРИМЕЧАНИЕ: введение connection_timeout на уровне gsoap может сбить с толку.
Если вы решите добавить этот код (если у вас его еще нет) в свой код, выполните некоторые тесты, если попытка переподключения действительно выполняется в течение этого времени или нет.
Я просто хочу сказать, что ваше приложение может установить тайм-аут на 30 минут, но ваша ОС поместит пакет SYN в хост WS всего пару раз в течение, скажем, пары первых секунд. Если хост WS по какой-то причине не ответит SYN-ACK, подпрограмма tcp_connect вашего gsoap попадет в 30-минутную трату времени.