Перейти к содержимому


Фото
- - - - -

Ошибка "Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)"


  • Закрытая тема Тема закрыта
18 ответов в этой теме

#1 krePs

krePs

    Новичок

  • Трейдеры
  • Pip
  • 6 сообщений

Отправлено 11 February 2013 - 12:56 PM

День добрый.
Написал небольшую программку, получает по SmartCOm 2.2 данные каждого тика, и если цена отличается от предыдущей записывает в файло.
Так вот, периодически SmartCom отваливается, наблюдается следующая ошибка:
"Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)"
Взаимосвязь с чем либо не установлена, т.к. программка может весь день работать и все хорошо, а может по пять раз на день отвалится. Проверял на двух разных компах с разными операционками, результат одинаков.
Подскажите в чем может быть проблемы, я сам программист начинающий.
Спасибо.

#2 SmartCOM

SmartCOM

    Активный участник

  • Moderators
  • 732 сообщений

Отправлено 11 February 2013 - 04:26 PM

Пришлите, на smartcom@itinvest.ru логи самого смарткома, пожалуйста, за те дни, в которые возникали данные ошибки. Желательно, чтобы loglevel был выставлен в значение 6.

День добрый.
Написал небольшую программку, получает по SmartCOm 2.2 данные каждого тика, и если цена отличается от предыдущей записывает в файло.
Так вот, периодически SmartCom отваливается, наблюдается следующая ошибка:
"Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)"
Взаимосвязь с чем либо не установлена, т.к. программка может весь день работать и все хорошо, а может по пять раз на день отвалится. Проверял на двух разных компах с разными операционками, результат одинаков.
Подскажите в чем может быть проблемы, я сам программист начинающий.
Спасибо.



#3 krePs

krePs

    Новичок

  • Трейдеры
  • Pip
  • 6 сообщений

Отправлено 13 February 2013 - 10:38 AM

Отправил сегодня архив за вчерашний день, был один сбой.

#4 SmartCOM

SmartCOM

    Активный участник

  • Moderators
  • 732 сообщений

Отправлено 13 February 2013 - 11:04 AM

Получили ваши логи. Посмотрим.

Отправил сегодня архив за вчерашний день, был один сбой.



#5 krePs

krePs

    Новичок

  • Трейдеры
  • Pip
  • 6 сообщений

Отправлено 13 February 2013 - 12:44 PM

Спасибо, буду ждать ваше резюме.

#6 MaxMan

MaxMan

    Новичок

  • Трейдеры
  • Pip
  • 1 сообщений

Отправлено 14 February 2013 - 03:19 PM

Получили ваши логи. Посмотрим.

У меня те же проблемы... Можно ответить на форуме?

#7 Дибров Б

Дибров Б

    Новичок

  • Трейдеры
  • Pip
  • 9 сообщений

Отправлено 15 February 2013 - 02:25 AM

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

01.10.2013 00:20:34 System.Runtime.InteropServices.COMException (0x800706BA): Сервер RPC недоступен. (Exception from HRESULT: 0x800706BA)
at StClientLib.StServerClass.CancelAllOrders()
at arbitrage_trader.Form1.button5_Click(Object sender, EventArgs e) in C:\Users\user\Documents\Visual Studio 2010\Projects\arbitrage\arbitrage_trader\arbitrage_trader\Form1.cs:line 1758

01.10.2013 00:20:44 Order error: RU IT System.Runtime.InteropServices.COMException (0x800706BA): Сервер RPC недоступен. (Exception from HRESULT: 0x800706BA)
at StClientLib.StServerClass.PlaceOrder(String portfolio, String symbol, StOrder_Action action, StOrder_Type type, StOrder_Validity validity, Double price, Double amount, Double stop, Int32 cookie)
at arbitrage_trader.Form1.process_orders() in C:\Users\user\Documents\Visual Studio 2010\Projects\smarttest1\arbitrage_trader\arbitrage_trader\Form1.cs:line 1640

#8 SergeyEgorov

SergeyEgorov

    Новичок

  • Вольные разработчики
  • Pip
  • 38 сообщений

Отправлено 15 February 2013 - 05:49 AM

У меня периодически такое происходит. Лечится после перехвата исключения следующей последовательностью действий:

public void Dispose()
{
// Отписаться от всех событий StServerClass, на которые подписан коннектор
this.connector.Dispose();

// Отписаться от всех событий StServerClass, на которые подписан провайдер
this.provider.Dispose();

// Отписаться от всех событий StServerClass, на которые подписан робот
this.stServerClass.Connected -= Connected;
this.stServerClass.Disconnected -= Disconnected;

//Если служба SmartCom2 еще дышит, то
if (!SmartComProcess.IsRunning)
{

    // Освободить ком объект
    Marshal.ReleaseComObject(this.stServerClass);

    // Остановить службу SmartCom2
    SmartComProcess.Stop();
}

this.stServerClass = null;

}

После этого выполняем заново запуск службы SmartCom2 и инициализацию коннектора, провайдера данных и робота, устанавливаем соединение и все опять работает.

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



#9 SmartCOM

SmartCOM

    Активный участник

  • Moderators
  • 732 сообщений

Отправлено 15 February 2013 - 09:12 AM

Сергей предложил хорошее решение. У кого возникают подобные проблемы, можно рекомендовать. Скоро выпустим SmartCOM 3, в нем таких траблов не будет :)

У меня периодически такое происходит. Лечится после перехвата исключения следующей последовательностью действий:
public void Dispose(){// Отписаться от всех событий StServerClass, на которые подписан коннекторthis.connector.Dispose();// Отписаться от всех событий StServerClass, на которые подписан провайдерthis.provider.Dispose();// Отписаться от всех событий StServerClass, на которые подписан роботthis.stServerClass.Connected -= Connected;this.stServerClass.Disconnected -= Disconnected;//Если служба SmartCom2 еще дышит, тоif (!SmartComProcess.IsRunning){ // Освободить ком объект Marshal.ReleaseComObject(this.stServerClass); // Остановить службу SmartCom2 SmartComProcess.Stop();}this.stServerClass = null;}


После этого выполняем заново запуск службы SmartCom2 и инициализацию коннектора, провайдера данных и робота, устанавливаем соединение и все опять работает.
Уточняю, у меня торговая система разложена по многим классам для удобства работы с ней. Коннектор управляетсоединением с брокером, в том числе обнаруживает и восстанавливает обрывы связи. Провайдер получает информациюот брокера и раскладывает ее по коллекциям, с которыми потом работают алгоритмы торговли. Ну а в роботе, кусок кода (метод Dispose) которого приведен все это дело консолидируется и взаимодействует. Но я думаю можно ив процедурно написанном МТС-е сделать нечто подобное, вынеся инициализацию и остановку робота в отдельные методы.



#10 contra

contra

    Новичок

  • Трейдеры
  • Pip
  • 9 сообщений

Отправлено 15 February 2013 - 02:57 PM

Сергей предложил хорошее решение. У кого возникают подобные проблемы, можно рекомендовать. Скоро выпустим SmartCOM 3, в нем таких траблов не будет :)


Побыстрей бы уже выпустили новую версию SmartCOM 3, а можно поточней когда выпустите ???

#11 SmartCOM

SmartCOM

    Активный участник

  • Moderators
  • 732 сообщений

Отправлено 15 February 2013 - 03:08 PM

Ближе к апрелю.

Побыстрей бы уже выпустили новую версию SmartCOM 3, а можно поточней когда выпустите ???



#12 sYman

sYman

    Новичок

  • Трейдеры
  • Pip
  • 29 сообщений

Отправлено 17 February 2013 - 02:05 PM

Сергей, я что-то не понял, у Вас сначала отписывается от событий а потом проверяет дышит ли SmartCom? И если дышит то заново подписывается?
Я присобачил таймер, который раз в несколько сек сначала проверяет дышит ли SmartCom, и если нет, то только потом освобождает ресурсы...

#13 SergeyEgorov

SergeyEgorov

    Новичок

  • Вольные разработчики
  • Pip
  • 38 сообщений

Отправлено 18 February 2013 - 06:19 PM

Сначала я перехватываю исключение, указанное в заголовке этой темы. Отписываюсь от получения данных (CancelTicks и так далее) Потом отписываюсь от событий. Потом проверяю считает ли операционная система службу SmartCom2 выполняющейся. Если считает, то я освобождаю COM объект и отправляю команду на остановку службы SmartCom2.

После этого, я проделываю обратную последовательность. Запускаю службу SmartCom2. Подписываюсь на события. Устанавливаю соединение. Подписываюсь на получение данных (ListenPortfolios и прочее).

Таймер я присобачивать не стал. У меня есть объект, представляющий собой образно говоря расписание торгов FORTS-а. А в главном цикле приложения, происходит проверка. Если текущее время считается временем торговой сессии, то извлекается из коллекции тиков самый свежий тик. Дату и время этого тика мы опять же сверяем с текущим временем и датой, если дата и время тика старее текущего времени более чем на 5 минут, то дело подозрительно, ибо тики поступают значительно чаще, чем один раз в пять минут. В этом случае выполняем процедуру освобождения ресурсов, отключения-переподключения.

#14 Дибров Б

Дибров Б

    Новичок

  • Трейдеры
  • Pip
  • 9 сообщений

Отправлено 11 March 2013 - 09:28 PM

Сначала я перехватываю исключение, указанное в заголовке этой темы. Отписываюсь от получения данных (CancelTicks и так далее) Потом отписываюсь от событий. Потом проверяю считает ли операционная система службу SmartCom2 выполняющейся. Если считает, то я освобождаю COM объект и отправляю команду на остановку службы SmartCom2.

После этого, я проделываю обратную последовательность. Запускаю службу SmartCom2. Подписываюсь на события. Устанавливаю соединение. Подписываюсь на получение данных (ListenPortfolios и прочее).

Таймер я присобачивать не стал. У меня есть объект, представляющий собой образно говоря расписание торгов FORTS-а. А в главном цикле приложения, происходит проверка. Если текущее время считается временем торговой сессии, то извлекается из коллекции тиков самый свежий тик. Дату и время этого тика мы опять же сверяем с текущим временем и датой, если дата и время тика старее текущего времени более чем на 5 минут, то дело подозрительно, ибо тики поступают значительно чаще, чем один раз в пять минут. В этом случае выполняем процедуру освобождения ресурсов, отключения-переподключения.


попробовал описанный процесс... решил принудительно закрыть службу руками и попробовать написать код, который восстановит сервис... итак изыскания, наблюдаем следующую картину:

1. пускаемся (все стандартно, из примера, последовательность опустим)
2. опускаем сервис (через менеджер виндоус)
3. стартуем сервис (из нашей торговой программы, как только она заметила что сервиса нет:


ServiceController controller = new ServiceController("SmartCom2");
if (controller.Status.ToString() == "Stopped")
{
log("We are OFFLINE, Lets start");
try { controller.Start(); }
catch (Exception exc) { L(exc.ToString()); }
}
4. После этого сбрасываем объект
SmartServer = null;
5. Создаем
SmartServer = new StServerClass();
6. подписываемся на события
7. подключаемся
видим в логах:
Ошибка при подключении, Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)

Что сделал не так??

#15 Digital

Digital

    Новичок

  • Трейдеры
  • Pip
  • 26 сообщений

Отправлено 12 March 2013 - 01:23 PM

Как то так:

if (m_SmartComServer != null)
{
m_SmartComServer.AddTickHistory -= SmartComServer_AddTickHistory;
m_SmartComServer.AddPortfolio -= SmartComServer_AddPortfolio;
m_SmartComServer.AddTick -= SmartComServer_AddTick;
m_SmartComServer.AddSymbol -= SmartComServer_AddSymbol;
m_SmartComServer.AddTrade -= SmartComServer_AddTrade;
m_SmartComServer.Connected -= SmartComServer_Connected;
m_SmartComServer.OrderSucceeded -= SmartComServer_OrderSucceeded;
m_SmartComServer.OrderFailed -= SmartComServer_OrderFailed;
m_SmartComServer.SetMyTrade -= SmartComServer_SetMyTrade;
m_SmartComServer.SetMyOrder -= SmartComServer_SetMyOrder;
m_SmartComServer.UpdateBidAsk -= SmartComServer_UpdateBidAsk;
m_SmartComServer.UpdateQuote -= SmartComServer_UpdateQuote;
m_SmartComServer.UpdateOrder -= SmartComServer_UpdateOrder;
m_SmartComServer.UpdatePosition -= SmartComServer_UpdatePosition;
m_SmartComServer.OrderCancelFailed -= new _IStClient_OrderCancelFailedEventHandler((msg) => { });
m_SmartComServer.OrderCancelSucceeded -= new _IStClient_OrderCancelSucceededEventHandler((msg) => { });
m_SmartComServer.OrderMoveFailed -= new _IStClient_OrderMoveFailedEventHandler((msg) => { });
m_SmartComServer.OrderMoveSucceeded -= new _IStClient_OrderMoveSucceededEventHandler((msg) => { });
m_SmartComServer.SetPortfolio -= new _IStClient_SetPortfolioEventHandler((s, d1, d2, d3, d4) => { });

if (connected) // отключаемся от сервера если подключены
{
try
{
m_SmartComServer.disconnect();
}
catch (Exception e)
{
m_Log.Exception("SmartCom Disconnect; " + e.Message);
}
}

// ждем события отключения 5000мс

m_SmartComServer.Disconnected -= SmartComServer_Disconnected;

if (System.Runtime.InteropServices.Marshal.IsComObject(m_SmartComServer))
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_SmartComServer);
}

m_SmartComServer = null;
}


#16 sYman

sYman

    Новичок

  • Трейдеры
  • Pip
  • 29 сообщений

Отправлено 13 March 2013 - 06:47 PM

to Дибров Б.

// Освободить ком объект
Marshal.ReleaseComObject(this.stServerClass);

освобождать ком обязательно

#17 SmartCOM

SmartCOM

    Активный участник

  • Moderators
  • 732 сообщений

Отправлено 28 March 2013 - 11:08 PM

сорри, но в данном случае комьюнити нас опережает и помогает в решении текущих проблем. напишите нам, плиз, на smartcom@itinvest.ru и сообщите в письме номер договора с ссылкой на эту тему.

Победил, спасибо

Но если честно удивляет активность оффициального суппорта в обсуждении. Так задумано? Предоставить неработающий софт в рамках коммерческих отношений с клиентами, отмалчиваться в поддержке? Господа, совесть есть? Почему нужно стукнуться лбом в проблему и решать ее налету после того как софт уже написан? Стандартное русское авось? Писал софт на 3-4 забугорных апи. Даже намека на подобные проблемы нет, всегда отвечают быстро, стараются помочь. Похоже в россии всем плевать. Спасибо пользователям.



#18 artimed

artimed

    Новичок

  • Трейдеры
  • Pip
  • 1 сообщений

Отправлено 09 April 2013 - 01:55 PM

Добрый день.
У меня эта ошибка появляется только при использовании CancelAllOrders(). Версия

2.2.116.1020



#19 SmartCOM

SmartCOM

    Активный участник

  • Moderators
  • 732 сообщений

Отправлено 10 April 2013 - 12:57 PM

Всегда возникает при вызове этого метода? Или тоже время от времени?

Добрый день.
У меня эта ошибка появляется только при использовании CancelAllOrders(). Версия
2.2.116.1020






Rambler's Top100 Яндекс.Метрика