Всем привет! Возникла проблема. trader.ProcessDataError выдает ошибку System.InvalidOperationException: Подключение к системе изменило свое состояние. Сообщение 'Disconnect,T=2013/11/28 16:28:24.568'. Текущее состояние клиента Connecting. И идет вечный Connecting. Подскажите, что делать в этой ситуации? Как отменить подключение? Пытался установить TimeOutInterval, но он помогает только если поставить 1-2 секунды. Если установлено другое значение, то событие TimeOut не срабатывает вообще. 2 секунды это маленький интервал, иногда ошибочно выдает TimeOut, хотя подключение установилось.
И еще вопросик trader.ProcessDataError постоянно выдает ошибку Не удалось привести тип объекта "System.Decimal" к типу "StockSharp.BusinessEntities.Quote". Ее можно как нибудь исправить, а то она эфир засоряет.
SmartCom 3.0.79 x64 StockSharp 4.2
Kommentare (15)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Обновитесь.
Обновился. Проблема осталась. Изменилось описание ошибки: "Подключение к системе изменило свое состояние. Текущее состояние клиента Connecting. Сообщение типа 'DisconnectMessage'."
Добавлю Терминал SmartTrade выдает ошибку Ваш терминал блокирован. Программа этого не понимает и происходит вечный коннект, ошибки нет.
http://stocksharp.com/posts/m/28490/
А как тогда вручную можно отменить Connecting? Потому что робот зависает и ничто не помогает.
Если это из-за робота, то нужно изменить робота. Если это из-за ReConnection настроек (вообще то там интервал 1 минута по умолчанию), то изменить их.
Настройки: _trader.ReConnectionSettings.ConnectionSettings.TimeOutInterval = TimeSpan.FromSeconds(..); _trader.ReConnectionSettings.ConnectionSettings.AttemptCount = 0; _trader.ReConnectionSettings.ConnectionSettings.ReAttemptCount = 0;
При неправильном вводе сервера (возможно такая же ситуация возникнет когда их сервак отвалится, не проверял) Если TimeOutInterval = 22 сек, то все работает. Сработает ConnectionError и соединение переходит в состояние Failed. А вот если установить 23 и более, то соединение никогда не перейдет в Failed, оно так и останется в состоянии Connecting
Похожая ситуация возникает тогда, когда доступ к терминалу по какой либо причине блокирован Только время TimeOutInterval в этой ситуации идет меньше до 2 сек, и 3 и более сек соответственно
А вот если отключена сетевая карта, то ConnectionError срабатывает сразу же. Так как пишет проблема с лицензией.
Но вот если роутер отключится, то TimeOutInterval вообще должен быть равен 1 сек. Иначе он так и останется висеть в состоянии Connecting.
Вот проблема и заключается как раз в том, что TimeOutInterval не работает. Он не в состоянии разорвать соединение, для того, что бы можно было заново подключиться. Поэтому я и спрашиваю, есть ли возможность руками это сделать?
Кстати по поводу ReConnectа: Ваш я не использую, потому что может отключиться интернет, может отвалиться сервер, а робот так и останется пытаться через допустим каждые 30 сек переподключиться и не поймет в чем ваще причина. Приходиться запускать свой таймер Сначала стоит проверить хотя бы ping до гугла там, убедиться что интернет есть, потом сделать ping до сервера, и понять в чем проблема, в интернете, в сервере или в чем то еще. А потом уже либо пытаться подключиться, либо сменить сервер или что то еще сделать в зависимости от ситуации. Мое мнение, эта функция в вашей библиотеке бесполезна, по крайней мере по отношению к SmartCom. Её надо дорабатывать.
Тогда вопрос - причем тут S#? У вас свой собственный реконнект, и вы спрашиваете, как его остановить?😀
Михаил, <mark>тут вопрос не про реконнект, а про коннект!</mark> Точнее про состояние Connecting! Еще раз напишу, трейдер остается в состоянии Connecting и не хочет переходить в другое состояние. И я не могу заново пробовать подключиться, так он мне выдает ошибку, что трейдер ужу в состоянии Connecting! Вот я и спрашиваю, как мне остановить это? Единственное что помогает это написать trader = null. И перезапускать робота. Но это глупо! Хотя приходится так делать, чтоб не пролететь. Но опять же для этого надо свой таймер делать, а вопрос зачем, если у вас есть события TimeOut и ConnectionError, но вот проблема они не всегда срабатывают.
Да, теперь понял о чем вы. Посмотрим, что там может быть.
А почему просто не сменить сервер? Хорошо, допустим проблема в интернете, а не сервере. Прогнать по кругу все адреса серверов. Если ни с чем не подключилось, подождать. Что интернет, что сервер брокера - вы ни то ни другое не знаете когда починял, и для вас это одна единая переменная с неопределенным значением. Помоему и действие на эти две схожие ситуации должно быть одно и то же. Или у вас робот пытается починить интернет сам?
Ну во первых у меня робот смски посылает. Если инет отключили он мне пришлет смс "Нет интернета", а если с сервером проблема напишет "Проблема на сервере" Во вторых я планирую обьяснить ему как резервный интернет подключать. Так что мне надо знать в чем проблема.
Вот я и говорю - подключиться к серверу 1. Подключиться к серверу 2. Переключиться на канал 2. Проделать заново подключение с серверами.
Я не знаю, конечно, как у вас в городе, но довольно часто проблема с интернетом в Москве такая, что часть адресов работает, а часть нет. Если конечно проблема не врутри подъезда.
Смс, резервный канал. А случаем это не дороже будет аренды виртуального сервера у АйТи? У меня в памяти отложилось, что там что-то порядка 3 т.р. в месяц. Надо у брокера конечно спросить.
Вот я прошу вас решить проблему, которую я описал выше. Иначе не получается переключиться на другой канал.
А про реконнект, это я так к слову написал. Вы же улучшаете всегда свое творение, может когда нибудь и реконнект для SmartCom улучшите.
У нас такого не бывает, если интернет отключат, то ко всем сайтам доступа не будет.
Что то я никогда не думал про виртуальный сервер. А смс и резервный интернет мне обходится всего в 150 руб в месяц. 3G модем от Билайна и не помню уже какая то там подключенная услуга.
Как станет понятна причина вот этой ошибки http://stocksharp.com/posts/m/28563/ то сразу выложим фикс по реконнекту.
Просто сделайте, чтоб TimeOutInterval всегда срабатывал и разрывал соединение. Я думаю тогда будет все нормально.