← 戻る

Отработка Connect / Reconnect

Михаил, в соответствии с примерами, дизайним форму, на которой две кнопки Connect и Disconnect. Полезной нагрузки нет.

Код кнопки Connect:

....

if (this.objMainTrader == null) {

this.objMainTrader = new SmartTrader(strLogin, strPWD, objIPEndPoint);
this.objMainTrader.Connected += () => { this.SmartConnectStatusSucced(); };
this.objMainTrader.ConnectionError += error => { this.SmartConnectStatusFailed(error); };
this.objMainTrader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);

this.objMainTrader.ReConnectionSettings.ConnectDisconnectTimeOutInterval = TimeSpan.FromSeconds(60);

this.objMainTrader.ReConnectionSettings.ReConnectingAttemptCount = 1000; // здесь пробовал -1, на поведение не влияет

this.objMainTrader.ReConnectionSettings.WorkingTime = Exchange.Rts.WorkingTime;
this.objMainTrader.ReConnectionSettings.ConnectionAttemptError += error =>
                { this.SmartReConnectStatusFailed(error); };

this.objMainTrader.ReConnectionSettings.ConnectionRestored += () =>
                { this.SmartReConnectStatusSucced(); };

}

// try to connect to the server if (!this.objMainTrader.IsConnected) this.objMainTrader.Connect();

.....

Все функции, которые вызываются, тупо создают соединение с базой SQL Server и пишут сообщение с именем вызванной функции. Итого, что происходит.

При нажатии кнопки Connect код аккуратно отрабатывает, и SmartConnectStatusSucced тоже. Далее, на виртуальной машине (Tools -> Settings) отключаем сетевую карту. Очень быстро отрабатывает SmartConnectStatusFailed, в журнал записывается следующее сообщение:

<Timeout detected. Check your internet connectivity or event handler code>.

Далее я ожидаю, что в соответствии с настройками ReconnectionSettings, objMainTrader будет пытаться производить повторное подключение. Ждем 5 минут, но ничего не происходит. Выставленные в отладчике точки прерывания тоже не срабатывают.

Обратно возвращаемся к настройкам виртуальной машины, и возвращаем на место сетевой адаптер. Сеть восстанавливается, но объект этого не замечает.

Прошу подсказать, что делаю не так. Возможно, нужно запустить какие-то операции, обращаться к объекту и т.п., чтобы код переподключения заработал?

P.S. Библиотеки версии 3.0.8. P.P.S. Готов выложить проект, скриншоты и how to reproduce, но форум не позволяет. P.P.P.S. Может ли причина заключаться в том, что тесты производятся в ночное время? :-) Если да, то исчезнет ли проблема, если подменить WorkingTime?

Спасибо.

このトピックは参考になりましたか?

トピックを共有

コメント (2)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

Greene-nsk
Greene-nsk

this.objMainTrader.ReConnectionSettings.WorkingTime = Exchange.Rts.WorkingTime;

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

Попробуйте Exchange.Test.WorkingTime, которая не имеет ограничений времени.

igork
igork 著者

Спасибо. Но для особо тупых было бы неплохо упомянуть такую фичу в документации :-)