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


Михаил, в соответствии с примерами, дизайним форму, на которой две кнопки 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?

Спасибо.

Теги:


Спасибо:


Greene-nsk

Фотография
Дата: 10.03.2011
Ответить


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

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

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

igork

Фотография
Дата: 10.03.2011
Ответить


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


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

loading
clippy