Ошибка Gsoap 28: SOAP_TCP_ERROR - PullRequest
       35

Ошибка Gsoap 28: SOAP_TCP_ERROR

0 голосов
/ 29 марта 2012

Я использую gsoap для Symbian S60 3rd Edition FP2 в приложении Qt. Я делаю несколько запросов к WS каждые 5 секунд. Через 2 часа приложение перестает иметь возможность подключаться к WS, и я получаю эту ошибку 28: SOAP_TCP_ERROR из gsoap. Если я останавливаю приложение и запускаю его снова, он может снова подключиться к WS. Почему это происходит?

Я поместил вызов WS gsoap в цикл for, и он перестает подключаться к WS в 892-й раз, каждый раз, когда запускаю его.

1 Ответ

1 голос
/ 15 апреля 2015

В качестве предварительной работы вы можете сделать несколько вещей:

  • включить 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-минутную трату времени.

...