Проблема с Coonectom
Atom Ответить
16.03.2012


Добрый день, пытаюсь сесть на Вашу библиотеку. Смотрю примеры.
Пример 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()


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

Теги:


Спасибо:




20 Ответов
Alexander

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


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

AlexBuzaev

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


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

kingdom2

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


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

Цифровой

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


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

Меня интересует вопрос, зачем вообще нужно убивать процесс 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 запущена не под админом,
либо бесконечное ожидание успешного коннекта.
Спасибо:

Marco

Фотография
Программист
Дата: 10.10.2012
Ответить


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


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


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

                        // настраиваем переподключение при обрыве связи для 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 (0)
Спасибо:

Mikhail Sukhov

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


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

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

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

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

Marco

Фотография
Программист
Дата: 10.10.2012
Ответить


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

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

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

Mikhail Sukhov

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


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

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

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


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

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

Marco

Фотография
Программист
Дата: 10.10.2012
Ответить


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

Mikhail Sukhov

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


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


Подключайтесь через СтокШарп https://stocksharp.ru/broker/ Бесплатное подключение к Плазе.BigGrin
Спасибо:

Marco

Фотография
Программист
Дата: 10.10.2012
Ответить


Mikhail Sukhov Перейти

Подключайтесь через СтокШарп https://stocksharp.ru/broker/ Бесплатное подключение к Плазе.BigGrin

Вы умеете вести переговоры. (c) BigGrin
Спасибо:

Цифровой

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


Mikhail Sukhov Перейти

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

Да, слона то в виде virtual я и не приметил...
Спасибо, буду тестить!

Вопрос сразу, не отходя от кассы.
Раз SmartCOM такой нестабильный, а я пока планирую связать с ним свои ближайшие торговые амбиции,
можно ли получить исходный код связанный именно со SmartCOM и SmartTrader с тем,
чтобы иметь лучшие возможности по поиску и исправлению ошибок?
Взамен могу предложить идеи по улучшению SmartTrader, если они конечно будут :-)
Спасибо:

Mikhail Sukhov

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


Цифровой Перейти

Раз SmartCOM такой нестабильный, а я пока планирую связать с ним свои ближайшие торговые амбиции,
можно ли получить исходный код связанный именно со SmartCOM и SmartTrader с тем,
чтобы иметь лучшие возможности по поиску и исправлению ошибок?
Взамен могу предложить идеи по улучшению SmartTrader, если они конечно будут :-)


Был уже один помощник, который так же говорил про СмартКом. Получил исходники, и больше мы его не видели.

Так что теперь только через время и кодеплекс. Время покажет надежность, кодеплекс - навык.Wink
Спасибо:

Цифровой

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


Мудро
Спасибо:

dvoris

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


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


Не получится, т.к. при втором подключении к службе SmartCOM первое дисконнектится.

Кроме этого, некоторое время назад в АйТи что-то подкрутили, и изредка случаются дисконнекты, если во время работы (с другой машины) происходит подключение с этого же, либо даже с дополнительного (!) логина, зарегистрированного на одного клиента. Чёткой системы не уловил, техподдержка АйТи ничем не помогла. Возможно, борьба с мультиподключениями или настройки безопасности, а точнее некорректная их реализация. Благо, мне сейчас не критично, но вообще, конечно, нужно разбираться с этим.

Убийство процесса лучше оставить, хотя зависаний службы не припомню, это надо сильно постараться, производя какие-то нестандартные действия. Но можно и отключить рестарт службы (переопределением метода SmartTrader.Connect), если хочется сделать реконнект быстрым. А, по-хорошему, в SmartTrader можно бы распознавать зависание SmartCOM (предлагаю подумать как именно).

В остальном проблем с реконнектом не замечал, лично у меня он работоспособный на 99.5%. Конечно, с некоторыми костылями вроде переподписывания на события и т.д. Вообще, это рекомендованное разработчиками SmartCOM поведение - отписаться и подписаться снова (CancelTicks+ListenTicks,CancelBidAsk+ListenQuotes и т.д.) Так что, возможно, эти "костыли", которые и не костыли, стоит прописать в SmartTrader.

P.S. Михаил, а кому давали исходники? Я готов потратить время и оттюнить реконнект в SmartTrader, т.к. сам его использую и имею опыт с API SmartCom. Тут и другие заинтересованные есть, вроде бы. Не пойму зачем в позу вставать - "сам делать не буду и вам не дам". По-моему, все мы тут обеими руками за развитие S#.
Все - в смысле старожилы, конечно, а не все при/про-ходящие.
Спасибо: Геннадий Ванин (Gennady Vanin) Цифровой

andy_baka_

Фотография
Курсы
Дата: 06.12.2012
Ответить


Насколько я помню, это вполне возможно. Единственное, что для того, чтобы разрешить множественные подключения нужно звонить в АйТиИнвест и просить чтобы они сняли ограничение на количество конектов с одного адреса. По крайней мере, у меня работает два конекта и ничего не происходит - один SmartTrade, второй - из программы.
Спасибо:

dvoris

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


andy_baka_ Перейти
Насколько я помню, это вполне возможно. Единственное, что для того, чтобы разрешить множественные подключения нужно звонить в АйТиИнвест и просить чтобы они сняли ограничение на количество конектов с одного адреса. По крайней мере, у меня работает два конекта и ничего не происходит - один SmartTrade, второй - из программы.


Естественно, ограничение по айпи выключено у брокера, не в этом дело.
SmartTrade не использует службу SmartCOM и поэтому может одновременно работать с приложением, использующим SmartCOM.
Не смогут работать одновременно на одной машине именно два разных приложения, использующих SmartCOM.
Для этого у нас StockSharp, который подключается к SmartCOM один, а уже на StockSharp можно навешивать модули с логикой.
Спасибо:

Цифровой

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


Спасибо за ответы!

1. Сейчас уже могу сказать, что есть ограничения на подключения.
Т.е. даже если со второго компьютера пытаешься коннектиться с одним логином, то на первом коннект пропадает.
Чтобы обойти это ограничение можно привязать к своей учетке еще один логин (вопрос без проблем решается через тех.поддержку).

2. По поводу использования SmartCom в двух программах на одном компьютере - у меня так и не заработало (по крайней мере со StockSharp)
и от концепции Hydra + "Программа Анализатор Регистратор Сделок" я отказался, так что у меня сейчас All-In-One пока со StockSharp.

3. Проблема в том, как верно заметил dvoris, что SmartTrader от StockSharp действительно отпадает раза 3 в день.
Идея, что это связано с подключением по второму логину - интересная, можно попробовать.
Может быть проблемы с настройками переподключения.
В документации сказано, что SmartCom дисконнектится после ожидания ответа на запрос в течение 2 секунд (можно увеличить).
Может быть стоит увеличить таймаут. Может быть неправильно настроены попытки переподлючения или оно невключено.

4. Начал баловаться непосредственно со SmartCom, т.е. писать свою обертку.
С подключением заметил такую проблему:
если на SmartCom вызвать Connect в программе, а потом эта программа завершится (например, аварийно),
то коннекция выживет и не даст законнектится снова при повторном запуске программы (какая-то ошибка сокета).
Но можно каждый раз при запуске программы пытаться делать Disconnect. Тогда коннекция-труп умрет и можно будет сделать новый Connect.
Есть предположение, что тогда не придется убивать процесс SmartCom.
Спасибо:

Mikhail Sukhov

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


Цифровой Перейти

и от концепции Hydra + "Программа Анализатор Регистратор Сделок" я отказался, так что у меня сейчас All-In-One пока со StockSharp.


Вот именно поэтому и я решил организовать проект https://stocksharp.ru/forum/3166/RoutingServer/

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

В свое время ИТ инвест уже убивал смартком, и инициировал новый АПИ. Даже как-то присылал нам описание. Но время прошло, а его так и нет, и судя по всему даже никто толком и не использовал. Мое мнение такое, что сейчас уже смысла нет что либо писать под смартком. Они наконец-то выпустили СмартИкс и надеюсь теперь дойдут руки до переделок АПИ. Лучше конечно убить СмартКом напрочь, чем мучать и себя и юзеров.
Спасибо:

Aleksey24

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


Периодически вылетает ошибка при подключении, может кто подскажет в чем проблема
Происходит следующее:

Все запускаю от Админестратора.
Установлена SmartCOM 2.2.116.1020 от 14.02.2012
Экспериментировал с подключением библиотек S# (версия 4.1.5, версия 4.1.8, сборка 23281)
Служба SmartCom2 отключена (тип запуска - вручную). В столбце (тип запуска) - пусто.
Сначала запускаю TestConnect_2_2 с сайта ITinvest.
1. Клик "Create" запускает службу SmartCom2.
2. Клик "Connect" Connected со SmartCom. При этом (с постоянно запущенной службой SmartCom2) нажимая "Disconnect" и "Connect" по очереди много раз не создается никаких ошибок.
3. В итоге отключаю TestConnect_2_2, но оставляю службу SmartCom2 запущенной. Запускаю SampelSmartCandels (пример от S#) -> появляется ошибка


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()



после клика на ОК кнопка Export разблокируется и приходят инструменты и т.д.
4. Закрыв приложение SampelSmartCandels и запустив его заново -> выскакивает та же самая ошибка, но уже без подключения, без экспорта.. Служба SmartCom2 включена.
5. Запуская приложение SampelSmartCandels постоянно возникает ошибка, и появление экспорта происходит циклично через подключение.
6. Если отключить службу SmartCom2 и запустить приложение SampelSmartCandels -> запускается без сбоев первый раз, после закрытия приложения служба SmartCom2 остается запущенной. И соответственно при запуске приложения снова появляется ошибка. После этого (с запущенной службой SmartCom2) TestConnect_2_2 запускается и работает без ошибок.
Буду искать дальше ошибку, но все таки было бы хорошо если кто то поборол такую ошибку и тут чирканул решение



НАШЕЛ ПРИЧИНУ, может кому поможет в дальнейшем:
При повторном запуске от Админа примера SampleSmartCandles появлялась ошибка 800400...15 (точный номер уже непомню).
Причина ошибки в установке .NET Framework 4 и 4.5. Устанавливаются в первый раз на комп. нормально без ошибок (что и сбивает с толку Confused ). После обновления NET Framework через центр обновлений Windows все ошибки исчезли. Все запускается и работает!!!! BigGrin
Спасибо: Axell


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

loading
clippy