Всем привет! Возникла проблема. 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
Комментарии (15)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Обновитесь.
Обновился. Проблема осталась. Изменилось описание ошибки: "Подключение к системе изменило свое состояние. Текущее состояние клиента 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 всегда срабатывал и разрывал соединение. Я думаю тогда будет все нормально.