← 返回

ConnectionError не срабатывает

Здравствуйте! Пытаюсь отловить событие прерывания подключения. Когда закрываю терминал quik при подключенном алгоритме то ни ConnectionErrorEx, ни ConnectionError, ни Disconnected не срабатывает, хотя в лог начинают сыпаться ошибки подключения.

评论 (5)

登录创建账户, 登录或注册以发表评论

Константин
Константин 作者

Вопрос актуален.

Support
Support

Добрый день

Приведите пожалуйста код инициализации коннектора.

Константин
Константин 作者

Все настройки по умолчанию.

_connector= new Connector();
_connector.Adapter.InnerAdapters.Add(new LuaFixTransactionMessageAdapter(_connector.TransactionIdGenerator));
_connector.Adapter.InnerAdapters.Add(new LuaFixMarketDataMessageAdapter(_connector.TransactionIdGenerator));

Support
Support

Добрый день

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

Connector.Adapter.SuppressReconnectingErrors = false;
Константин Дмитрий_
Alexander
Alexander

Имейте также в виду, что StockSharp не транслирует ошибки при работе с Quik еще как минимум в следующих случаях:

  1. При попытке выставить или снять заявку, если соединение между квиком и сервером прервалось.
  2. При ответе с сервера квика "Количество транзакций превышает максимально разрешённое N в секунду".

В обоих этих случаях реально заявка не устанавливается (или не снимается, в зависимости от того, что пытались сделать), но события OrderRegisterFailed и OrderCancelFailed не приходят. Поэтому код, который рассчитывает на получение фидбека по своему действию, будет просто бесконечно его ждать, а код, который фидбека не ждет, будет ошибочно рассчитывать, что, например, заявка была снята, чего на самом деле не произойдет.

Это очень неприятный баг, который не дает возможности надежно снимать и ставить заявки вообще в принципе.