ReConnection не работает
Atom Ответить
16.03.2011


(this.Trader as SmartTrader).ReConnectionSettings.Interval = TimeSpan.FromSeconds(20);
(this.Trader as SmartTrader).ReConnectionSettings.WorkingTime = Exchange.Test.WorkingTime;
(this.Trader as SmartTrader).ReConnectionSettings.ConnectingAttemptCount = -1;

Подписан на события:
this.Trader.Connected
this.Trader.Disconnected
this.Trader.ProcessDataError
this.Trader.ConnectionError

Запускаю, отключаю свой вайфай через который раздается инет, через минуту получаю this.Trader.Disconnected. Жду 5 минут - ничего не происходит. Включаю инет обратно, жду 5 минут - ничего не происходит.

Теги:


Спасибо:




18 Ответов
Greene-nsk

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


[3.0.16]
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.03.2011
Ответить


Greene-nsk Перейти
(this.Trader as SmartTrader).ReConnectionSettings.Interval = TimeSpan.FromSeconds(20);
(this.Trader as SmartTrader).ReConnectionSettings.WorkingTime = Exchange.Test.WorkingTime;
(this.Trader as SmartTrader).ReConnectionSettings.ConnectingAttemptCount = -1;

Подписан на события:
this.Trader.Connected
this.Trader.Disconnected
this.Trader.ProcessDataError
this.Trader.ConnectionError

Запускаю, отключаю свой вайфай через который раздается инет, через минуту получаю this.Trader.Disconnected. Жду 5 минут - ничего не происходит. Включаю инет обратно, жду 5 минут - ничего не происходит.


ConnectingAttemptCount - это для первоначального соединения. Протестил у себя (выключил адаптер, подождал ConnectionError, кстати, без Disconnected) - у меня все поднялось штатно.
Спасибо:

Greene-nsk

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


Мне надо как-то решить эту проблему. При реальной торговле тоже это периодически происходит. Никакого ConnectionError не приходит. Просто ITrader.Disconnected. И соединение после этого не восстанавливается, можно ждать хоть несколько часов.
Автор топика
Спасибо:

Greene-nsk

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


Также я пробовал заменить автоматический реконнект своим, раз уж он не работает:
Код

// подписываемся на событие разрыва соединения
this.Trader.Disconnected += () =>
{
this.IsConnected = false;

if (!_IsDisconnectScheduled)
{
Log.OutError("Произошел незапланированный разрыв связи.");
int secToWait = 20;
Log.Out("Ждем " + secToWait + " секунд и восcтанавливаем соединение.", LogLevel.notice);
Common.Async(() =>
{
Thread.Sleep(TimeSpan.FromSeconds(secToWait));
this.Connect();
});
}
else
{
Log.Out("Соединение разорвано.", LogLevel.notice);
}
};

// подписываемся на событие успешного соединения
this.Trader.Connected += () =>
{
this.IsConnected = true;
Log.Out("Соединение установлено.", LogLevel.notice);

// запускаем экпорт, если не запущен
if (!this.Trader.IsExportRunning)
{
Log.Out("Запускаем экспорт " + Const.TraderType + " ...", LogLevel.notice);
this.Trader.StartExport();
}

_ConnectHandle.Set();
};


После такого восстановления соединение восстанавливается, но события перестают приходить. Это описано в https://stocksharp.ru/fo...riestarta-soiedinieniia/ . Видимо регистрация слетает , и надо заново регистрировать все бумаги?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.03.2011
Ответить


Greene-nsk Перейти
Мне надо как-то решить эту проблему. При реальной торговле тоже это периодически происходит. Никакого ConnectionError не приходит. Просто ITrader.Disconnected. И соединение после этого не восстанавливается, можно ждать хоть несколько часов.


Если приходит Disconnected, то переподключение не будет работать. Оно работает только в случае ошибок. Вы точно принудительно не отключаетесь от SmartCOM? Подпишитесь как здесь показали на событие Disconnected у StClient. Интересна причина разрыва.
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти
Greene-nsk Перейти
Мне надо как-то решить эту проблему. При реальной торговле тоже это периодически происходит. Никакого ConnectionError не приходит. Просто ITrader.Disconnected. И соединение после этого не восстанавливается, можно ждать хоть несколько часов.


Если приходит Disconnected, то переподключение не будет работать. Оно работает только в случае ошибок. Вы точно принудительно не отключаетесь от SmartCOM? Подпишитесь как здесь показали на событие Disconnected у StClient. Интересна причина разрыва.


reason приходит пустой. Как насчет восстановления, описанного в моем предыдущем посте? Перезапускать регистрацию?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.03.2011
Ответить


Greene-nsk Перейти

После такого восстановления соединение восстанавливается, но события перестают приходить. Это описано в https://stocksharp.ru/fo...riestarta-soiedinieniia/ . Видимо регистрация слетает , и надо заново регистрировать все бумаги?


Я же там ответил насчет инструментов и портфелей.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.03.2011
Ответить


Greene-nsk Перейти
reason приходит пустой.


Это значит штатное отсоединение. Вы Dispose, Disconnect где-то вызываете?
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти
Greene-nsk Перейти
reason приходит пустой.


Это значит штатное отсоединение. Вы Dispose, Disconnect где-то вызываете?


Не вызываю. Когда вызывается Disconnect(), приходит Reason: disconnected by user.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.03.2011
Ответить


Greene-nsk Перейти
Mikhail Sukhov Перейти
Greene-nsk Перейти
reason приходит пустой.


Это значит штатное отсоединение. Вы Dispose, Disconnect где-то вызываете?


Не вызываю. Когда вызывается Disconnect(), приходит Reason: disconnected by user.


Сначала разберемся что к чему, потом я точечно исправлю.Smile
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти
Greene-nsk Перейти
Mikhail Sukhov Перейти
Greene-nsk Перейти
reason приходит пустой.


Это значит штатное отсоединение. Вы Dispose, Disconnect где-то вызываете?


Не вызываю. Когда вызывается Disconnect(), приходит Reason: disconnected by user.


Сначала разберемся что к чему, потом я точечно исправлю.Smile


Вообще, вы же знаете когда зовется Dispose или Disconnect. Почему бы во всех остальных случаях не звать reconnect?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.03.2011
Ответить


Greene-nsk Перейти

Вообще, вы же знаете когда зовется Dispose или Disconnect. Почему бы во всех остальных случаях не звать reconnect?


Это будет правильно с точки зрения дизайна - четко понять когда ошибка, а когда ее нет.
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти
Greene-nsk Перейти

Вообще, вы же знаете когда зовется Dispose или Disconnect. Почему бы во всех остальных случаях не звать reconnect?


Это будет правильно с точки зрения дизайна - четко понять когда ошибка, а когда ее нет.


У меня есть подозрение, что главная проблема здесь не в том, почему вылазит Disconnect без ошибки, а в том, почему не приходит ConnectionError. Я выставил следующие настройки для ReConnection:

(this.Trader as SmartTrader).ReConnectionSettings.WorkingTime = Exchange.Test.WorkingTime;
(this.Trader as SmartTrader).ReConnectionSettings.ConnectingAttemptCount = -1;
(this.Trader as SmartTrader).ReConnectionSettings.ReConnectingAttemptCount = -1;
(this.Trader as SmartTrader).ReConnectionSettings.Interval = TimeSpan.FromSeconds(20);
(this.Trader as SmartTrader).ReConnectionSettings.ExportTimeOutInterval = TimeSpan.FromSeconds(20);
(this.Trader as SmartTrader).ReConnectionSettings.ConnectDisconnectTimeOutInterval = TimeSpan.FromSeconds(20);

Ожидал, что каждые 20 секунд соединение будет проверяться и если его нет - будет ошибка. Я отключаю интернет, и больше минуты ничего не приходит. Только потом приходит Disconnected и все.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 17.03.2011
Ответить


Greene-nsk Перейти
У меня есть подозрение, что главная проблема здесь не в том, почему вылазит Disconnect без ошибки, а в том, почему не приходит ConnectionError.


Возьмите последнюю версию.
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти
Greene-nsk Перейти
У меня есть подозрение, что главная проблема здесь не в том, почему вылазит Disconnect без ошибки, а в том, почему не приходит ConnectionError.


Возьмите последнюю версию.


Отлично. Реконнектится.

Теперь другая проблема. После реконнекта "слетают" RegisterTrades, RegisterSecurity, RegisterQuotes. Экспорт я стартую.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 17.03.2011
Ответить


Greene-nsk Перейти
Mikhail Sukhov Перейти
Greene-nsk Перейти
У меня есть подозрение, что главная проблема здесь не в том, почему вылазит Disconnect без ошибки, а в том, почему не приходит ConnectionError.


Возьмите последнюю версию.


Отлично. Реконнектится.

Теперь другая проблема. После реконнекта "слетают" RegisterTrades, RegisterSecurity, RegisterQuotes. Экспорт я стартую.


Конкретно эти события нужно запускать самостоятельно.
Спасибо:

Greene-nsk

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


(this.Trader as SmartTrader).ReConnectionSettings.WorkingTime = Exchange.Test.WorkingTime;
(this.Trader as SmartTrader).ReConnectionSettings.ConnectingAttemptCount = -1;
(this.Trader as SmartTrader).ReConnectionSettings.ReConnectingAttemptCount = -1;
(this.Trader as SmartTrader).ReConnectionSettings.Interval = TimeSpan.FromSeconds(20);
(this.Trader as SmartTrader).ReConnectionSettings.ExportTimeOutInterval = TimeSpan.FromSeconds(20);
(this.Trader as SmartTrader).ReConnectionSettings.ConnectDisconnectTimeOutInterval = TimeSpan.FromSeconds(20);

Каждый день ровно в 6:00 по Москве связь разрывается, и потом не поднимается. Идет куча ошибок Сервер RPC недоступен. Тоже самое часто происходит просто при разрыве связи - соединение не восстанавливается.

Код

22.03.2011 6:00:04 [OpenWealth.StockSharp.TraderInitializator.SmartServer_Disconnected] Reason: (22255690)
22.03.2011 6:00:05 [OpenWealth.StockSharp.TraderInitializator.Trader_Disconnected] ERROR: Произошел незапланированный разрыв связи. (908)
22.03.2011 6:00:05 [OpenWealth.StockSharp.TraderInitializator.Trader_Disconnected] Ждем 20 секунд и восcтанавливаем соединение. (0)
22.03.2011 6:00:26 [OpenWealth.StockSharp.TraderInitializator.Connect] Соединяемся с сервером ... (20431)
22.03.2011 6:00:32 [OpenWealth.StockSharp.TraderInitializator.Trader_ConnectionError] ERROR: Ошибка соединения System.InvalidOperationException: WINSOCK (6056)
22.03.2011 6:00:32 [OpenWealth.StockSharp.TraderInitializator.Connect] FATAL ERROR: Отсутствует соединение с Smart. (33)
22.03.2011 6:00:52 [OpenWealth.StockSharp.TraderInitializator.Trader_ConnectionError] ERROR: Ошибка соединения System.InvalidOperationException: Соединение не было установлено. (20394)
22.03.2011 6:01:12 [OpenWealth.StockSharp.TraderInitializator.Trader_ConnectionError] ERROR: Ошибка соединения System.Runtime.InteropServices.COMException (0x800706BA): Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
в StClientLib.StServerClass.disconnect()
в Ecng.Trading.Smart.SmartComWrapper.#=qnCgDm1vHPvXpt7N3mOxtVy8NZjT2eQuyDSB5hXbNr7Q=(StServer #=qKUBRzCyeMBm8zUOTVMXn3A==)
в Ecng.Trading.Smart.SmartComWrapper.#=q75j_Z5JSRxNkiXV88FHEug==(Action`1 #=qqKsTnjrmu7pdXnaFSMdxhw==)
в Ecng.Trading.Smart.SmartComWrapper.Disconnect()
в Ecng.Trading.Smart.SmartTrader.OnDisconnect()
в Ecng.Trading.Algo.BaseTrader.Disconnect()
в Ecng.Trading.Algo.BaseTrader.#=qgA3BsOJZFeBWXFGAp7wz7Q==() (19556)
22.03.2011 6:01:39 [OpenWealth.StockSharp.TraderInitializator.Trader_ConnectionError] ERROR: Ошибка соединения System.Runtime.InteropServices.COMException (0x800706BA): Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
в StClientLib.StServerClass.disconnect()
в Ecng.Trading.Smart.SmartComWrapper.#=qnCgDm1vHPvXpt7N3mOxtVy8NZjT2eQuyDSB5hXbNr7Q=(StServer #=qKUBRzCyeMBm8zUOTVMXn3A==)
в Ecng.Trading.Smart.SmartComWrapper.#=q75j_Z5JSRxNkiXV88FHEug==(Action`1 #=qqKsTnjrmu7pdXnaFSMdxhw==)
в Ecng.Trading.Smart.SmartComWrapper.Disconnect()
в Ecng.Trading.Smart.SmartTrader.OnDisconnect()
в Ecng.Trading.Algo.BaseTrader.Disconnect()
в Ecng.Trading.Algo.BaseTrader.#=qgA3BsOJZFeBWXFGAp7wz7Q==() (27695)

...
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.03.2011
Ответить


Greene-nsk Перейти
Каждый день ровно в 6:00 по Москве связь разрывается, и потом не поднимается. Идет куча ошибок Сервер RPC недоступен. Тоже самое часто происходит просто при разрыве связи - соединение не восстанавливается.


Пока не понял, почему Смарт иногда поднимается, а иногда нет.
Спасибо:


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

loading
clippy