Всем добрый день.
Запускаем коннектор. Коннектор работает нормально. Во время работы отключаем плаза роутер, ждем некоторое время, включаем роутер обратно. Коннектор восстанавливает соединение с роутером, получает данные секунд 15, а после этого отключается.
Собственный лог с момента восстановления соединения:
Datetime Message Details Status Thread
2012-08-01 15:28:15.5047430 Log System.TimeoutException: Соединение не было разорвано в отведенный отрезок времени. Info 14
2012-08-01 15:28:15.5027430 ConnectionError "Message: Соединение не было разорвано в отведенный отрезок времени.; TargetSite: ; Source: ; StackTrace: ; " Error 14
2012-08-01 15:28:15.4997430 Log RaiseConnectionError - disconnected Info 14
2012-08-01 15:28:15.4967420 Log OnConnectionStatusChanged: conn OrderLog_2 - status: Disconnected Info 14
2012-08-01 15:28:15.4437370 Log OnConnectionStatusChanged: conn OrderLog_1 - status: Disconnected Info 14
2012-08-01 15:28:15.3467270 Disconnected NULL Info 14
2012-08-01 15:28:15.3467270 Log OnConnectionStatusChanged: conn OrderLog_0 - status: Disconnected Info 14
2012-08-01 15:27:45.2922170 ConnectionRestored NULL Info 14
2012-08-01 15:27:37.3362170 Log PlazaStream FORTS_OPTINFO_REPL:StreamStateChanged: State Online Info 17
2012-08-01 15:27:37.0272170 Log PlazaStream FORTS_FUTINFO_REPL:StreamStateChanged: State Online Info 17
2012-08-01 15:27:36.7302170 Log PlazaStream FORTS_OPTCOMMON_REPL:StreamStateChanged: State Online Info 17
2012-08-01 15:27:35.9932170 Log PlazaStream FORTS_FUTCOMMON_REPL:StreamStateChanged: State Online Info 17
2012-08-01 15:27:35.6812170 Log PlazaStream FORTS_OPTINFO_REPL:StreamStateChanged: State RemoveSnapshot Info 17
2012-08-01 15:27:35.6702170 Log PlazaStream FORTS_OPTINFO_REPL:StreamLifeNumChanged: LifeNum 2748 Info 17
2012-08-01 15:27:35.6582170 Log PlazaStream FORTS_OPTINFO_REPL:StreamStateChanged: State ReOpenned Info 17
2012-08-01 15:27:35.6462170 Log PlazaStream FORTS_OPTCOMMON_REPL:StreamStateChanged: State RemoveSnapshot Info 17
2012-08-01 15:27:35.6332170 Log PlazaStream FORTS_OPTCOMMON_REPL:StreamLifeNumChanged: LifeNum 27254 Info 17
2012-08-01 15:27:35.6232170 Log PlazaStream FORTS_OPTCOMMON_REPL:StreamStateChanged: State ReOpenned Info 17
2012-08-01 15:27:35.6092170 Log PlazaStream FORTS_FUTCOMMON_REPL:StreamStateChanged: State RemoveSnapshot Info 17
2012-08-01 15:27:35.5972170 Log PlazaStream FORTS_FUTCOMMON_REPL:StreamLifeNumChanged: LifeNum 27256 Info 17
2012-08-01 15:27:35.5872170 Log PlazaStream FORTS_FUTCOMMON_REPL:StreamStateChanged: State ReOpenned Info 17
2012-08-01 15:27:35.5752170 Log PlazaStream FORTS_FUTINFO_REPL:StreamStateChanged: State RemoveSnapshot Info 17
2012-08-01 15:27:35.5612170 Log PlazaStream FORTS_FUTINFO_REPL:StreamLifeNumChanged: LifeNum 2748 Info 17
2012-08-01 15:27:35.5562170 Log PlazaStream FORTS_FUTINFO_REPL:StreamStateChanged: State ReOpenned Info 17
2012-08-01 15:27:35.5172170 Log PlazaStream FORTS_OPTCOMMON_REPL:Поток FORTS_OPTCOMMON_REPL переоткрыт. Info 17
2012-08-01 15:27:35.5132170 Log PlazaStream FORTS_OPTCOMMON_REPL:StreamStateChanged: State LocalSnapshot Info 17
2012-08-01 15:27:35.5032170 Log PlazaStream FORTS_ORDLOG_REPL:StreamStateChanged: State RemoveSnapshot Info 18
2012-08-01 15:27:35.5012170 Log PlazaStream FORTS_OPTCOMMON_REPL:Состояние потока Closed. Info 17
2012-08-01 15:27:35.4922170 Log PlazaStream FORTS_FUTCOMMON_REPL:Поток FORTS_FUTCOMMON_REPL переоткрыт. Info 17
2012-08-01 15:27:35.4892170 Log PlazaStream FORTS_FUTCOMMON_REPL:StreamStateChanged: State LocalSnapshot Info 17
2012-08-01 15:27:35.4882170 Log PlazaStream FORTS_FUTCOMMON_REPL:Состояние потока Closed. Info 17
2012-08-01 15:27:35.4852170 Log PlazaStream FORTS_OPTINFO_REPL:Поток FORTS_OPTINFO_REPL переоткрыт. Info 17
2012-08-01 15:27:35.4752170 Log PlazaStream FORTS_ORDLOG_REPL:StreamStateChanged: State RemoveSnapshot Info 18
2012-08-01 15:27:35.4672170 Log PlazaStream FORTS_OPTINFO_REPL:Состояние потока Closed. Info 17
2012-08-01 15:27:35.4672170 Log PlazaStream FORTS_OPTINFO_REPL:StreamStateChanged: State LocalSnapshot Info 17
2012-08-01 15:27:35.4662170 Log PlazaStream FORTS_FUTINFO_REPL:Поток FORTS_FUTINFO_REPL переоткрыт. Info 17
2012-08-01 15:27:35.4592170 Log PlazaStream FORTS_FUTINFO_REPL:Состояние потока Closed. Info 17
2012-08-01 15:27:35.4592170 Log PlazaStream FORTS_FUTINFO_REPL:StreamStateChanged: State LocalSnapshot Info 17
2012-08-01 15:27:35.4562170 Log PlazaStream FORTS_OPTCOMMON_REPL:Инициализация FORTS_OPTCOMMON_REPL потока. Info 17
2012-08-01 15:27:35.4542170 Log PlazaStream FORTS_ORDLOG_REPL:Поток FORTS_ORDLOG_REPL переоткрыт. Info 18
2012-08-01 15:27:35.4532170 Log PlazaStream FORTS_FUTCOMMON_REPL:Инициализация FORTS_FUTCOMMON_REPL потока. Info 17
2012-08-01 15:27:35.4512170 Log PlazaStream FORTS_ORDLOG_REPL:StreamStateChanged: State LocalSnapshot Info 18
2012-08-01 15:27:35.4482170 Log PlazaStream FORTS_OPTINFO_REPL:Инициализация FORTS_OPTINFO_REPL потока. Info 17
2012-08-01 15:27:35.4452170 Log PlazaStream FORTS_ORDLOG_REPL:Состояние потока Closed. Info 18
2012-08-01 15:27:35.4392170 Log PlazaStream FORTS_FUTINFO_REPL:Инициализация FORTS_FUTINFO_REPL потока. Info 17
2012-08-01 15:27:35.4392170 Log PlazaStream FORTS_ORDLOG_REPL:Инициализация FORTS_ORDLOG_REPL потока. Info 18
2012-08-01 15:27:35.4382170 Log Attempted to connect OrderLog_1. Info 17
2012-08-01 15:27:35.4382170 Log Attempted to connect OrderLog_2. Info 18
2012-08-01 15:27:35.4332170 Log Экспорт запущен. Info 11
2012-08-01 15:27:35.4042170 Log Экспорт не был запущен. Info 11
2012-08-01 15:27:35.4042170 Log Запуск экспорта. Info 11
2012-08-01 15:27:35.4032170 Log Остановка экспорта. Info 11
2012-08-01 15:27:35.4002170 Log OnConnectionStatusChanged: conn OrderLog_0 - status: Connected, RouterConnected Info 15
2012-08-01 15:27:35.3992170 Connected NULL Info 15
2012-08-01 15:27:35.3032170 Log OnConnect Info 12
2012-08-01 15:27:35.3022170 Log Attempted to connect OrderLog_0. Info 12
2012-08-01 15:27:35.2902170 Log OnDisconnect Info 12
Лог плаза клиента с момента восстановления соединения:
2012-08-01 15:28:14.857;P2ReplStorage;;Changed revs at commit; stream 0x1D758B10; cnt 1
2012-08-01 15:28:14.857;P2ReplStorage;; tbl_idx 0; rev range 365732 - 365736
2012-08-01 15:28:14.944;p2repl-cli;;DATA message received;stream 0x1D757C70
2012-08-01 15:28:14.947;P2ReplStorage;;Changed revs at commit; stream 0x1D757C70; cnt 1
2012-08-01 15:28:14.947;P2ReplStorage;; tbl_idx 0; rev range 1565619 - 1565633
2012-08-01 15:28:15.064;p2repl-cli;;DATA message received;stream 0x1D757C70
2012-08-01 15:28:15.064;P2ReplStorage;;Changed revs at commit; stream 0x1D757C70; cnt 1
2012-08-01 15:28:15.064;P2ReplStorage;; tbl_idx 0; rev range 1565634 - 1565636
2012-08-01 15:28:15.183;P2ReplStorage;;Changed revs at commit; stream 0x1D0256C0; cnt 1
2012-08-01 15:28:15.183;P2ReplStorage;; tbl_idx 0; rev range 13160814170 - 13160815579
2012-08-01 15:28:15.184;p2repl-cli;;DATA message received;stream 0x1D0256C0
2012-08-01 15:28:15.191;p2repl-cli;;DATA message received;stream 0x1D758B10
2012-08-01 15:28:15.194;P2ReplStorage;;Changed revs at commit; stream 0x1D758B10; cnt 1
2012-08-01 15:28:15.194;P2ReplStorage;; tbl_idx 0; rev range 365737 - 365749
2012-08-01 15:28:15.194;p2repl-cli;;DATA message received;stream 0x1D757C70
2012-08-01 15:28:15.195;P2ReplStorage;;Changed revs at commit; stream 0x1D757C70; cnt 1
2012-08-01 15:28:15.195;P2ReplStorage;; tbl_idx 0; rev range 1565637 - 1565643
2012-08-01 15:28:15.336;p2repl-cli;;DATA message received;stream 0x1D757C70
2012-08-01 15:28:15.337;P2ReplStorage;;Changed revs at commit; stream 0x1D757C70; cnt 1
2012-08-01 15:28:15.337;P2ReplStorage;; tbl_idx 0; rev range 1565644 - 1565650
2012-08-01 15:28:15.345;P2ClientGate;;Statistics module was unregistered, module name P2ClientGate@CP2Connection
2012-08-01 15:28:15.345;p2mq-cli;;Socket closed;conn 0x1CF84710
2012-08-01 15:28:15.443;P2ClientGate;;Statistics module was unregistered, module name P2ClientGate@CP2Connection
2012-08-01 15:28:15.443;p2mq-cli;;Socket closed;conn 0x1CF5E8B0
2012-08-01 15:28:15.496;P2ReplStorage;;Changed revs at commit; stream 0x1D0256C0; cnt 1
2012-08-01 15:28:15.496;P2ReplStorage;; tbl_idx 0; rev range 13160815580 - 13160816989
2012-08-01 15:28:15.496;P2ClientGate;;Statistics module was unregistered, module name P2ClientGate@CP2Connection
2012-08-01 15:28:15.496;p2mq-cli;;Socket closed;conn 0x1CF5EC90
Подозрение падает на строчки: «2012-08-01 15:28:15.443;P2ClientGate;;Statistics module was unregistered, module name P2ClientGate@CP2Connection»
Почему при обычном коннекте все работает нормально, а при разрыве связи и последующем реконекте работает все плохо? Помогите, пожалуйста, разобраться.
Comentarios (22)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
А где логи стокшарпа?
Какие именно?
Если те, которые выводятся в событие Log, то именно они выше и указаны.
«Бен, это Данила, ай нид хелп»
С ревизиями вопрос решился?
Этот вопрос не связан с ревизиями. Про ревизии сейчас напишу в том топике.
Могу предоставить исходники ReConnectionManager чтобы ты попробовал самостоятельно разобраться с данной проблемой.
🙂
Лучше конечно решение на блюдечке 🙂
Тут больше проблема на мой взгляд не в ReConnectionManager. Так как заливка данных возобновляется, работает секунд 15 и отваливается.
Подозреваю, здесь где-то косяк на уровне: (конструктор PlazaTrader или метод Connect) + (регистрация COM объекта).
Поэтому сорсы ReConnectionManager вряд ли помогут. Тут надо хорошо разбираться в процессе соединения c роутером в PlazaTrader. А этот процесс я не совсем хорошо понимаю, так как не разбирался досконально в Плазе2.
Но... Если конечно никто из разработчиков этим вопросом заниматься не планирует, кидай сорсы. Буду ковыряться.
Ну сорсы плазы у тебя уже есть, так что разбираться в connect + com можно
Разработчики заняты слишком другими вопросами сейчас.
Подтверждаю багу в ReConnectManager. только у меня не отваливается коннектор. Просто мессадж падает в лог об ошибке. И все.
Потом все работает норм. У меня правда AlfaDirect
У вас в коде нигде нет подобных строчек
Ну или может быть что нить типо такого
На плазе не проверял но на АльфаДирект это четко приводит к вышеописанной ошибке. Отвал событий, экспорта данных и прочих радостей. Подозреваю что связано с прямой передачей событий от терминала/шлюза в коннектор. Что приводит к эдакому дедлоку чтоли :)
Если это ко мне вопрос, то нет, у меня такого нет. В _trader.Disconnected просто логируется информация.
Аналогичная проблема, после попытки переподключения в логе ошибка 2013/01/15 12:44:09.353|Error |PlazaTrader|System.TimeoutException: Соединение не было разорвано в отведенный отрезок времени. И все на этом стопорится. Коннектор из S# 4.1.7 с кодплекса, роутер 1.4.11_32
Проблема известна и уже была занесена в список тасков ранее.
Ну есть перспективы решения? просто уже 5 месяцев прошло, вроде довольно ходовой коннектор, а перезапускать робота, если пропадет инет как то не хотелось бы. Вот, может быть оно? http://forum.rts.micex.ru/viewtopic.asp?t=19453
Как только у разработчиков будет время - сразу сделаем.
Посмотрел исходники, поэкспериментировал с проблемой, действительно роутер ведет себя как то странно после восстановления связи, постоянные ошибки
2013/02/17 13:34:38.102|Error |PlazaTrader|StockSharp.Plaza.PlazaException: Ошибка подключения к серверу Плазы. Код -2147196927, описание 'P2ERR_MQ_NOT_INITIALIZED_YET'. ---> System.Runtime.InteropServices.COMException: Couldn't connect to MQ
, хотя до этого все локальные соединения были корректно завершены. Возможно действительно проблема в Роутере(та что выше по ссылке на форум РТС). Рестарт роутера помогает, добавил Router.Restart(); в метод OnConnect() Плаза трейдера, пересобрал, все отлично восстанавливается. Но вот рестарт роутера при каждой попытке соединения, уж больно радикальное решение, хотя все же решение.
Еще и в BaseTrader метод SafeDisconnect вызывает Disconnect(); без проверки (почему-то if (IsConnected) закоментарен) Соответсвенно ReConectionManager ждет события Trader.Disconnected, которого никогда не будет. Из-за этого вылезает ошибка таймаута: 2013/01/15 12:44:09.353|Error |PlazaTrader|System.TimeoutException: Соединение не было разорвано в отведенный отрезок времени.
IsConnected закомментарен, потому что он сам может вызвать исключение. Поэтому всегда вызывается отключение, Disconnect. После его вызова и должно прийти событие успешного отключения. Почему оно не приходит?
Оно приходит один раз, при разрыве связи, а ReConnectionManager, вызывает Trader.Reconnect через интервалы, в PlazaTrader метод Reconnect не определен, он определен только в BaseTrader public virtual void Reconnect() { SafeDisconnect(); Connect(); } SafeDisconnect(); вызывает Disconnect всегда т.к. IsConnected закоментарен. Disconnect опять же определен только в BaseTrader public void Disconnect() { _reConnectionManager.Disconnect(() => RaiseConnectionError(new TimeoutException("Соединение не было разорвано в отведенный отрезок времени."))); OnDisconnect(); }
т.е. ReConnectionManager ждет событие каждый раз при реконнекте, тут надо либо раскоментарить IsConnected или переопределить Disconnect() Reconnect() в PlazaTrader
Я совсем запутался.😢
Ну я тоже не сразу разобрался. Суть в том что, PlazaTrader выдает событие Disconnect 1 раз при обрыве связи, а ReConnectionMasnager ждет его каждый раз при переподключении, поэтому вылезает таймаут. Соответсвенно выхода 2, выдавать его либо не ждать.
В общем кому интересно, выкладываю вариант с рабочим переподключением (исправил как сам думаю). Протестировал. Изменил всего 2 метода(жирный шрифт).
<u>1-PlazaTrader.cs Перезапуск роутера при соединении:</u>
protected override void OnConnect() { // Для удобства проверяем, запущен ли P2MQRouter.exe? // Если это не делать, COM-библиотека Плазы будет выкидывать одну и ту же ошибку ('Couldn't resolve MQ service'), // и когда P2MQRouter.exe не запущен, // и когда нет связи с сервером Плазы или не ведутся торги.
<u> 2 - PlazaConnectionPool.cs принудительный вызов события disconnected при вызове метода Disconnect()</u>