Проблема с Coonectom

Проблема с Coonectom
Atom
3/16/2012
AlexBuzaev


Добрый день, пытаюсь сесть на Вашу библиотеку. Смотрю примеры.
Пример SampleSmart отлично коннектится и работает с моим демосчетом
А пример SampleSmartSMA при нажатии на кнопку Connect выдает следующую ошибку

System.ComponentModel.Win32Exception (0x80004005): Отказано в доступе

в System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)

в System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)

в System.Diagnostics.Process.Kill()

в StockSharp.Smart.SmartTrader.KillSmartComProcess()

в StockSharp.Smart.SmartTrader.OnConnect()


В чем может быть дело?

Tags:


Thanks:


1 2  >
Alexander

Avatar
Date: 3/16/2012
Reply


smartcom и samplesmartsma от одного юзера запущен, от админа?
версию S# тоже указывайте
Thanks:

AlexBuzaev

Avatar
Date: 3/16/2012
Reply


Точно, спасибо
Надо запускать от админитсратора
Thanks:

kingdom2

Avatar
Date: 10/8/2012
Reply


Добавьте пожалуйста в доку, что Гидру тоже для smartcom надо из под админа пускать.
Thanks:

Цифровой

Avatar
Date: 10/9/2012
Reply


Думал написать в отдельную тему, но раз уж эта "всплыла".

Меня интересует вопрос, зачем вообще нужно убивать процесс SmartCOM?
Негативные последствия от этого предположительно такие:

1. Как минимум это не позволяет к нему подключиться из двух разных программ.
Например, если хочется возложить скачивание маркет-данных на Гидру, а торговать из другой используя тот же SmartCOM.

2. У меня есть нехороший эффект: если в Гидре сначала нажать Старт, потом Стоп, а затем снова Старт при включенном источнике Smart,
то второй раз Старт отвалится по таймауту.
Есть предположение, что это связано как раз с убийством SmartCOM во втором Старте.

Вопрос - какая польза? Ведь она же должна быть :-)


Параметры запуска:
- Гидра, скомпилированная под x86
- Запуск с правами администратора
- Windows 8 Release Preview x64, Windows 7 Ultimate x64

Есть также тест на C#, написанный на основе консольного примера для Smart вида:
new SmartTrader, Connect, StartExport, Dispose, new SmartTrader, Connect...
Скомпилирован под x86. На втором коннекте либо крэш от отсутствия прав, если VisualStudio запущена не под админом,
либо бесконечное ожидание успешного коннекта.
Thanks:

Marco

Avatar
Date: 10/10/2012
Reply


Поддержу вопрос. Не знаю, связано ли это с убийством процесса SmartCOM, но определенно с реализацией подключения и переподключения в SmartTrader есть проблемы. Я тоже набросал тест, который умеет подключаться/отключаться, и содержит настройки переподключения при обрыве связи. При тестировании имеем:


  • После запуска тест подключается к шлюзу и получает сделки.
  • При отключении вручную и последующем подключении вручную (Disconnect()/Connect()), получение сделок успешно возобновляется.
  • При физическом отключении от сети и последующем физическом подключении SmartTrader переподключение выполняет, но получение сделок НЕ возобновляется. (В обработчике события Connected я переподписываюсь на сделки и перезапускаю экспорт.) Вообще при переподключении происходят странные вещи. Например событие Disconnected вызывается с большой задержкой либо вообще не вызывается. При этом Disconnected и Connected могут вызываться несколько раз, в процессе может возникнуть исключение "Программа выполнила недопустимую операцию и будет закрыта" и т.д.
  • При перезапуске сервиса SmartCOM в процессе работы теста, просто перестают вызываться все обработчики событий. Никаких попыток восстановить соединение не предпринимается.


Настройки переподключения у меня такие:
Code

                        // настраиваем переподключение при обрыве связи для SmartCom  
                        trader.ReConnectionSettings.ReConnectingAttemptCount = -1;
                        trader.ReConnectionSettings.ConnectingAttemptCount = -1;
                        trader.ReConnectionSettings.IsReStartExport = false; // true - тоже пробовал.
                        trader.ReConnectionSettings.ExportTimeOutInterval = TimeSpan.FromSeconds(30);
                        trader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);
                        trader.ReConnectionSettings.WorkingTime = Exchange.Rts.WorkingTime;
                        trader.ReConnectionSettings.ConnectionRestored += () =>
                        {
                            Console.WriteLine("Соединение восстановлено.");
                        };


Собственно вопросы такие:

  • Есть ли возможность заставить SmartTrader/SmartCOM стабильно переподключаться при проблемах с каналом связи? Если проблема в моем коде, я готов оплатить техподдержку.
  • Если проблемы в SmartTrader, и у уважаемых авторов библиотеки нет времени/желания/возможности их исправлять, могу ли я получить доступ к проекту SmartTrader, чтобы внести необходимые исправления?
  • Или посоветуете забить на SmartCOM и перейти на Plaza?


P.S.: Тестовый проект - в аттаче. Там нужно поменять константы логина-пароля-портфеля. Прописан адрес основного сервера ITInvest. Если будете использовать тестовую систему - адрес нужно поменять.
TestReConnect.zip 12 KB (267)
Thanks:

Mikhail Sukhov

Avatar
Date: 10/10/2012
Reply


Убивание процесса было сделано потому, что если он зависнет (а такое было в 2010, когда я через него торговал, сейчас возможно это не актуально), то к нему уже никак не переключиться.

Реконнект сейчас работает не очень стабильно. В планах его его переделать, но пока это далекие планы, так как нужно малому количеству юзеров. На Квике в последнее время тьфу-тьфу вроде все работает нормально, на Плазе так же, а это основная масса роботостроителей.

Что можно сделать сейчас.

1) Можно сделать флаг для опционального убивания процесса СмартКом (что, кстати, возможно и сейчас, достаточно переопределить метод SmartTrader.OnConnect). На разрыв соединения это не повлияет, но первое подключение возможно станет быстрее и стабильнее.
2) Можете оплатить доработку для экстренного фикса самостоятельно, или с кем-то, кому еще она нужна.
Thanks: Цифровой

Marco

Avatar
Date: 10/10/2012
Reply


Михаил, спасибо за комментарий.

А сколько будет стоить фикс реконнекта для SmartTrader?

Хотя предположу, что стратегически более правильно будет свалить на плазу.
Thanks:

Mikhail Sukhov

Avatar
Date: 10/10/2012
Reply


Marco
Михаил, спасибо за комментарий.

А сколько будет стоить фикс реконнекта для SmartTrader?

Хотя предположу, что стратегически более правильно будет свалить на плазу.


5-10... Не смотрел точно, как можно переделать. Просто видел в коде явные ошибки. Переподключения писалось очень давно, и тогда было другое мировоззрение на работу с потоками.

Плаза - это хорошо, но только для ФОРТС.
Thanks:

Marco

Avatar
Date: 10/10/2012
Reply


Михаил, спасибо. Цена сравнима со стоимостью подключения к плазе. Я подумаю.
Thanks:

Mikhail Sukhov

Avatar
Date: 10/10/2012
Reply


Marco
Михаил, спасибо. Цена сравнима со стоимостью подключения к плазе. Я подумаю.


Подключайтесь через СтокШарп http://stocksharp.com/broker/ Бесплатное подключение к Плазе.[biggrin]
Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy