Добрый день. Не могу запустить Гидру (последняя актуальная версия в вин7 32). Зависает на попытке загрузить инструменты. Содержание лога:
20:52:18.197|Error |S#.Data |System.InvalidOperationException: При просмотре дерева превышена логическая глубина дерева. Возможно, в дереве имеется циклическая зависимость. в System.Windows.FrameworkElement.FindResourceInTree(FrameworkElement feStart, FrameworkContentElement fceStart, DependencyProperty dp, Object resourceKey, Object unlinkedParent, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference, DependencyObject boundaryElement, InheritanceBehavior& inheritanceBehavior, Object& source) в System.Windows.FrameworkElement.FindResourceInternal(FrameworkElement fe, FrameworkContentElement fce, DependencyProperty dp, Object resourceKey, Object unlinkedParent, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference, DependencyObject boundaryElement, Boolean isImplicitStyleLookup, Object& source) в System.Windows.StyleHelper.GetChildValueHelper(UncommonField
1 dataField, ItemStructList1& valueLookupList, DependencyProperty dp, DependencyObject container, FrameworkObject child, Int32 childIndex, Boolean styleLookup, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot) в System.Windows.StyleHelper.GetChildValue(UncommonField1 dataField, DependencyObject container, Int32 childIndex, FrameworkObject child, DependencyProperty dp, FrugalStructList1& childRecordFromChildIndex, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot) в System.Windows.StyleHelper.GetValueFromStyleOrTemplate(FrameworkObject fo, DependencyProperty dp, EffectiveValueEntry& entry) в System.Windows.FrameworkElement.GetRawValue(DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry& entry) в System.Windows.FrameworkElement.EvaluateBaseValueCore(DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry& newEntry) в System.Windows.DependencyObject.EvaluateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry newEntry, OperationType operationType) в System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) в System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue) в System.Windows.StyleHelper.InvalidateResourceDependents(DependencyObject container, ResourcesChangeInfo info, FrugalStructList1& resourceDependents, Boolean invalidateVisualTreeToo) в System.Windows.TreeWalkHelper.InvalidateStyleAndReferences(DependencyObject d, ResourcesChangeInfo info, Boolean containsTypeOfKey) в System.Windows.TreeWalkHelper.OnResourcesChanged(DependencyObject d, ResourcesChangeInfo info, Boolean raiseResourceChangedEvent) в System.Windows.FrameworkElement.OnAncestorChangedInternal(TreeChangeInfo parentTreeState) в System.Windows.TreeWalkHelper.OnAncestorChanged(DependencyObject d, TreeChangeInfo info, Boolean visitedViaVisualTree) в System.Windows.DescendentsWalker1.StartWalk(DependencyObject startNode, Boolean skipStartNode) в MS.Internal.PrePostDescendentsWalker1.StartWalk(DependencyObject startNode, Boolean skipStartNode) в System.Windows.TreeWalkHelper.InvalidateOnTreeChange(FrameworkElement fe, FrameworkContentElement fce, DependencyObject parent, Boolean isAddOperation) в System.Windows.FrameworkElement.ChangeLogicalParent(DependencyObject newParent) в System.Windows.FrameworkElement.AddLogicalChild(Object child) в System.Windows.Controls.ContentControl.OnContentChanged(Object oldContent, Object newContent) в System.Windows.Controls.ContentControl.OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) в System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) в System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) в System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) в System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) в System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue) в System.Windows.Data.BindingExpressionBase.Invalidate(Boolean isASubPropertyChange) в System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange) в System.Windows.Data.BindingExpression.Activate(Object item) в System.Windows.Data.BindingExpression.AttachToContext(AttachAttempt attempt) в System.Windows.Data.BindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(Boolean lastChance) в MS.Internal.Data.DataBindEngine.Task.Run(Boolean lastChance) в MS.Internal.Data.DataBindEngine.Run(Object arg) в MS.Internal.Data.DataBindEngine.OnLayoutUpdated(Object sender, EventArgs e) в System.Windows.ContextLayoutManager.fireLayoutUpdateEvent() в System.Windows.ContextLayoutManager.UpdateLayout() в System.Windows.UIElement.UpdateLayout() в ActiproSoftware.Windows.Controls.Docking.DockingWindowContainer.FocusSelectedWindow(Boolean #YEf) в ActiproSoftware.Windows.Controls.Docking.TabbedMdiHost.#bx(DockingWindow #sb, Boolean #an) в ActiproSoftware.Windows.Controls.Docking.TabbedMdiHost.#4w(DockingWindow #sb, Boolean #an) в ActiproSoftware.Windows.Controls.Docking.DockSite.Activate(DockingWindow #sb, Boolean #an) в ActiproSoftware.Windows.Controls.Docking.DockSite.Open(DockingWindow #sb, Boolean #2jf, Boolean #an) в ActiproSoftware.Windows.Controls.Docking.DockingWindow.Activate(Boolean focus) в StockSharp.Hydra.MainWindow.CurrentTasks_OnSelectionChanged(Object sender, EventArgs eventArgs) в System.Windows.Controls.SelectionChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) в System.Windows.UIElement.RaiseEvent(RoutedEventArgs e) в System.Windows.Controls.ListBox.OnSelectionChanged(SelectionChangedEventArgs e) в System.Windows.Controls.Primitives.Selector.InvokeSelectionChanged(List1 unselectedInfos, List`1 selectedInfos) в System.Windows.Controls.Primitives.Selector.SelectionChanger.End() в System.Windows.Controls.Primitives.Selector.SelectionChanger.SelectJustThisItem(ItemInfo info, Boolean assumeInItemsCollection) в System.Windows.Controls.Primitives.Selector.OnSelectedIndexChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) в System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) в System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) в System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) в System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) в System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal) в System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value) в StockSharp.Hydra.UserConfig.LoadLayout()
- Что нужно поправить, чтобы Гидра запустилась?
И более общий вопрос: Необходимо запускать источник смартком3.0 за несколько часов до начала торгов, т.к. ухожу на работу гораздо раньше. Запускаю Гидру. Нажимаю Старт. Спустя где-то полчаса после этого смартком видимо сбрасывает соединение и импорт не происходит. Фрагмент лога файла смартком:
08:11:37.345| |SmartTrader|Инструмент RIU4@FORTS зарегистрирован на получение рыночных данных для Level1. 08:11:37.870| |SmartCOM |Для RIU4@FORTS загружено 1 MarketDepth. 08:32:06.073|Error |SmartTrader|System.InvalidOperationException: Подключение в состоянии Connected получило неожиданное сообщение типа 'DisconnectMessage'. ---> System.InvalidOperationException: connection closed by server (213.247.232.238:48091) --- Конец трассировки внутреннего стека исключений --- 08:32:06.074|Error |SmartCOM |System.InvalidOperationException: Подключение в состоянии Connected получило неожиданное сообщение типа 'DisconnectMessage'. ---> System.InvalidOperationException: connection closed by server (213.247.232.238:48091) --- Конец трассировки внутреннего стека исключений --- 08:32:06.863|Error |SmartCOM |System.InvalidOperationException: Подключение в состоянии Connected получило неожиданное сообщение типа 'DisconnectMessage'. ---> System.InvalidOperationException: connection closed by server (213.247.232.238:48091) --- Конец трассировки внутреннего стека исключений --- в StockSharp.Hydra.Core.MarketDataConnector
1.ThrowIfError() в StockSharp.Hydra.Core.MarketDataConnector1.GetTrades() в StockSharp.Hydra.Core.ConnectorHydraTask1.SaveValues(Func1 getNewValues, Action2 saveValues) в StockSharp.Hydra.Core.ConnectorHydraTask1.ProcessNewData() в StockSharp.Hydra.Core.ConnectorHydraTask`1.OnProcess() в StockSharp.Hydra.Core.BaseHydraTask.<Start>b__0()
Насколько я помню, эта проблема возникала у меня еще год назад и я так и не нашел способ ее побороть. Сейчас пробую AutoIt и Планировщик заданий, чтобы кнопка Старт нажималась минут за 10 до начала торгов, но стала возникать ошибка, описанная первой в посте.
- Как можно избежать такой ошибки? Можно ли как-то автоматизировать запуск в определенное время?
И еще один вопрос, который стал только актуальней: 3. Можно ли бэкапить настройки Гидры и источников, чтобы как-то минимизировать потери при разного рода ошибках? Например, при сбросе настроек приходится заново настраивать все инструменты.
С уважением, Олег.
Комментарии (17)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Судя по фантомности ошибки, она является следствием, а не первопричиной. Посмотрите в лог-файл. Не было ли каких-то других сообщений до этой ошибки.
Михаил, добрый день. Да, вы правы. Ошибки были и другие. Обычно проблемы начинаются, когда по каким-либо причинам приходится принудительно завершать работу Гидры. Вложил логи за день, когда начались ошибки. Предыдущий день завершился без ошибок.
У вас файл с базой данных занят другим процессом. Возможно вторая Гидра запущена.
Я уже проверял эту версию. После перезагрузки все блокировки должны были сняться, но все равно ошибка та же.
Не могу сказать, что решил проблему, т.к. полная переустановка это все же не решение. :) Но вот мои действия. Установил все заново, сохранив и удалив файлы в "Мои документы" и в папке установки. Потом заменил базу Stocksharp.db в "Мои документы" на старую. Запустил гидру и она подхватила старые установки инструментов и коннекторов. Это порадовало. Стартовал задачу - заработало со второго раза. В первый старт смартком выдал ошибку в логах.
Если есть более разумный способ решения проблемы - буду рад услышать.
В связи с этим, Михаил, могли бы вы рассказать, что за файлы находятся в папках инструментов? Что из этого можно безболезненно удалить?
Вопрос возник, т.к. мне хочется очистить архив от трех дней, когда импорт осуществлялся урывками, т.е. данные не будут представлять интереса при экспорте. Попробовал в меню "Дополнительно" -> "Очистить данные". Выбрал период, выбрал Все инструменты, выполнилось без ошибок. Но потом пробую экспортировать, а те дни что я выбрал для очистки содержат данные. Удалять в ручную в папке каждого инструмента не рискнул, т.к. боюсь как-то нарушить работу базы.
Нет, не работает надежно:
Нажимаю Старт - ошибка такая же. Перезапускаю - вроде работает.
Т.е. задача отложенного старта задачи так и не решена. Надо лично присутствовать при запуске задачи, чтобы быть уверенным, что все заработало.
У вас проблема с блокировкой файла БД. Написано русскими словами в лог файле, что вы приложили. Решить ее можете только вы.
Я попробовал перезапустить гидру и, видимо, тогда и случилась проблема с блокировкой, которая вызвала череду других ошибок, т.к. пришлось несколько раз принудительно завершать работу гидры. Забудем про вечерние ошибки.
Возможно в утренней ошибке виноват смартком. Вам видней. Но ведь гидру можно заставить переподключиться в этом случае, а не просто замирать в ожидании действий пользователя.
И, повторюсь, эта ошибка случалась регулярно год назад именно из-за запуска задачи <u>задолго</u> до начала торгов. Если запускать ее минут за 15, то ошибки не возникает. Возможно где-то происходит таймаут. Опять же, вам видней.
Я очень заинтересован в решении данной проблемы, т.к. те способы, которыми я не всегда успешно пытаюсь ее решить, вроде AutoIt3, ну очень костыльные и плохо работают. Ошибка воспроизводима. Если надо что-то выложить/посмотреть/включить/сделать - я готов.
Я не уверен, что понял вас. Вы ошибку с блокировкой устранили или нет?
Тогд приведите текст новой ошибки, не связанной с блокировкой, как вы считаете.
Михаил, файл вложил. Впервые такое, но опять дисконнект от смарткома. В данном случае в процессе работы, а не в ожидании начала сессии.
А что смотреть в логах? Какую строчку?
76309 в логе смарткома. Это самый конец файла. Специально привел полный лог, чтобы не было таких недоразумений как с прошлым логом: блокировка файла была вечером, а проблемы начались утром.
Михаил, хочется очень простой вещи, которую вы несомненно подразумевали, когда писали эту ценную программу: она должна загрузить данные о торгах. По факту лично у меня этого сделать не получается. Идут постоянные "неожиданные сообщения о разъединении". После этого импорт данных останавливается и не возобновляется. Т.е. после остановки в 11:44:15.256 и до моего прихода с работы и остановки "импорта" в 20:59:45.086 никакой информации не собиралось. Я не программирую на сишарпе и его exceptions мне ни о чем не говорят, но мне кажется, что попытка совершить реконнект быть должна. Возможно это не отражается в логах и она/они все были неудачными. Вам видней, как я уже неоднократно говорил. Но хотелось бы знать что с этим делать.
Если у вас ошибка с разрывом соединения, а не с блокировкой БД, то это вам нужно смотреть логи смарткома. Именно смарткома, а не гидры. И решать ситуацию, почему идет разрыв подключения.
Сообщение в логе о неожиданном разрыве идет из-за того, что смартком разорвал подключение. Можно конечно не писать это сообщение, если оно вас смущает, но реально ситуация не изменится - между вашим компьютером и сервером брокера было утрачено соединение.
Михаил, не подскажете где можно логи смарткома посмотреть? Не нашел к сожалению.
А сама гидра не может реконнектится при такой ошибке? Первое соединение она же как-то устанавливает.
Логи, причины разрывов и т.д. - это все к создателям - АйТи Инвест.
Михаил, добрый день.
Я пообщался с поддержкой смарткома. Разрыв соединения действительно имеет место с их стороны, но вызвано это неизбежным техническим моментом. До начала торгов инициализируется система торгов и разрывает все установленные до этого момента соединения. Наверняка такое может случаться при произвольных сбоях на серверах. Получается, что это проблема и не смарткома тоже, а часть несовершенного мира.
Можно ли доработать коннектор гидры к смарткому, чтобы он переустанавливал соединение при получении сообщения о его разрыве? И планируете ли Вы это сделать?