Локальная «повторная передача» HTTPS-запросов - видя это в WebApp на основе Axis2 - PullRequest
1 голос
/ 29 ноября 2011

Я наблюдал странное поведение в моем веб-приложении (1.4.1) на основе axis2 (запущенном в Websphere 7). Если мой запрос Webservice на основе мыла блокируется в потоке сервера ровно на 60 секунд, я снова получаю запрос Webservice; более конкретно: мой приемник SOAP-сообщений на стороне сервера снова вызывается для этого вызова (первый поток все еще блокируется в это время, а клиентское приложение уже получило тайм-аут уже 30 секунд назад).

Я пытался отследить это; но не удалось понять поведение. Вот факты, которые у меня уже есть:

Факт 1 : это происходит только при включенном SSL

Факт 2 : основанный на axis1 веб-сервис-клиент не является тем, кто выполняет повторные передачи; и при этом это не клиент вообще. Я прослушивал исходящие пакеты на клиенте и входящие пакеты на сервере, и хотя я не могу видеть содержимое по времени, повторная передача не происходит по сети.

Факт 3 (на основе фактов 1 + 2): «Повторная отправка» должна быть инициирована где-то между NIC и JRE (IBM JRocket 9 VM) на стороне SERVER.

Первоначально эта проблема возникала в моем приложении, потому что вызов блокировался по запросу базы данных, но я имитировал его с установкой точки останова на сервере для этого запроса.

Извините, что я не могу предоставить какие-либо полезные трассировки / журналы для резервного копирования моих "фактов", но я надеялся, что я мог упустить что-то довольно очевидное здесь ... Очевидно, что прикладной уровень не должен видеть никаких повторных передач; tcp должен знать, какие пакеты были доставлены на верхний уровень; Итак, я бы предположил, что проблема может быть где-то близко к реализации уровня протокола HTTP (S) в Java ???

Кроме того, любая хорошая идея, как отследить это, будет высоко оценена. В связи с этой проблемой возникает проблема SSL ...

Редактировать : Я только что провел еще один тест и теперь могу добавить еще несколько фактов в уравнение:

Факт 4 : Чтобы быть уверенным, что он не приходит от клиента, я отключил сетевой кабель после отправки первого запроса веб-сервиса. Ретрансляция произошла; Итак, это определенно происходит на стороне сервера.

Факт 5 : Я добавил сервлет-фильтр, чтобы посмотреть, запущен ли он для повторной передачи. Это; таким образом, повторная передача, как и ожидалось, должна быть запущена между NIC и механизмом servelt на сервере; где-нибудь во время выполнения JVM или на уровне TCP.

Факт 6 : повторная передача происходит только в том случае, если другие данные передаются в тот же TCPport между ними. То есть если я не отправляю некоторые дополнительные пакеты / запросы после первоначального запроса webservice, повторная передача не происходит. Помогает ли это объяснить некоторые проблемы на уровне TCP?

Я использую довольно старый RedHat Enterprise Linux: Linux 2.6.9-89.EL

Заранее спасибо, Daniel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...