﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Несколько ошибок</title>
  <id>~/topic/3625/neskolko-oshibok/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-04T01:12:45Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3625" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/25588/</id>
    <title type="text">Версия S# 4.1.11 1. Не работает переподключение. ReConnectionManager подписывается на событие Connec...</title>
    <published>2013-04-24T17:33:51Z</published>
    <updated>2013-04-24T17:35:13Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.com/users/6407/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Версия S# 4.1.11&lt;br /&gt;&lt;br /&gt;1. Не работает переподключение.&lt;br /&gt;ReConnectionManager подписывается на событие ConnectionError. Но Директ при рассоединении это событие не выдает, ни после тайм-аута, при исчезновении инета, ни после отключения после вечерки. Сколько ни старался, получить его не удалось.&lt;br /&gt;Поэтому, думаю, можно добавить строку ошибки подключения в обработчике ConnectionChanged в AlfaWrapper.cs:&lt;br /&gt;&lt;br /&gt;        case eConnectionState.Disconnected:&lt;br /&gt;          Disconnected.SafeInvoke();&lt;br /&gt;          &lt;span class="highlight"&gt;ConnectionError.SafeInvoke(new Exception(&amp;quot;Error eConnectionState: &amp;quot; + state));&lt;/span&gt;&lt;br /&gt;          break;&lt;br /&gt;&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_4b517985214b4a5ca7d817c2d9f01899');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_4b517985214b4a5ca7d817c2d9f01899' style='display:none'&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

    private void ConnectionChanged(eConnectionState state)
    {
      switch (state)
      {
        case eConnectionState.Connected:
          Connected.SafeInvoke();
          break;

        case eConnectionState.Disconnected:
          Disconnected.SafeInvoke();
          ConnectionError.SafeInvoke(new Exception(&amp;quot;Error eConnectionState: &amp;quot; + state));
          break;

        default:
          ConnectionError.SafeInvoke(new Exception(&amp;quot;Error eConnectionState: &amp;quot; + state));
          break;
      }
    }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Может не совсем корректно, но зато переподключение будет работать.&lt;br /&gt;&lt;br /&gt;2. При старте экспорта, сразу выходит исключение:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:plain"&gt;

System.ArgumentNullException: Значение не может быть неопределенным.
Имя параметра: board
   в StockSharp.Algo.SecurityIdGenerator.GenerateId(String secCode, String secClass, ExchangeBoard board)
   в StockSharp.AlfaDirect.AlfaTrader.#=qTmHoaiW0DvdZTePTIZGmQ8DDHnYjgo8cP$cmsoi4fhs=.#=q_tiMlW0BJNgFwbvijs06AWdy2b_Pnki6x7YDYCvObJU=()
   в StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Может не успевает к тому моменту заполниться поле ExchangeBoard у инструмента?&lt;br /&gt;&lt;br /&gt;3. Появляется исключение при остановке экспорта:&lt;br /&gt;&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_72e8be7a1986420d829a7e7b4b17ce4a');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_72e8be7a1986420d829a7e7b4b17ce4a' style='display:none'&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:plain"&gt;

StockSharp.AlfaDirect.AlfaException не обработано
  Message=Код ошибки stcClientError Сообщение Table  not found in subscribed list
  Source=StockSharp.AlfaDirect
  StackTrace:
       в #=qAN7$6C1UJwE2Ht4z43DH6Od48Np58bQd2DF6YK82goHtiipqzCT80po2cMgH3GLR.#=qG9EtOYj8RDoYvpDK3iloH$6qMDpPyMK$77ZPyYIR6hY=(String #=qx0voBheG$Mkqo4H0CV7tqA==, String #=qPdOHw1mx2fSUNnuJYBvg5A==)
       в #=qAN7$6C1UJwE2Ht4z43DH6Od48Np58bQd2DF6YK82goHtiipqzCT80po2cMgH3GLR.#=qLvOfJKmTVJjBrdmpR$NYeAkX4UBSVudjn8RGel_2zro=()
       в StockSharp.AlfaDirect.AlfaTrader.StopExport()
       в StockSharp.Algo.Testing.RealTimeEmulationTrader`1.StopExport()
       в TrendWalker.MainWindow.Stop() в D:\WORK\PROG\Projects\StockSharp\TrendWalker\4.1.11\WithMarketOrders\TrendWalker\MainWindow.xaml.cs:строка 278
       в TrendWalker.MainWindow.Connect_Click(Object sender, RoutedEventArgs e) в D:\WORK\PROG\Projects\StockSharp\TrendWalker\4.1.11\WithMarketOrders\TrendWalker\MainWindow.xaml.cs:строка 379
       в 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.Primitives.ButtonBase.OnClick()
       в System.Windows.Controls.Button.OnClick()
       в System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
       в System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
       в System.Windows.Input.MouseButtonEventArgs.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.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
       в System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
       в System.Windows.Input.MouseButtonEventArgs.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.RaiseTrustedEvent(RoutedEventArgs args)
       в System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
       в System.Windows.Input.InputManager.ProcessStagingArea()
       в System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
       в System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
       в System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
       в System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean&amp;amp; handled)
       в System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp;amp; handled)
       в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp;amp; handled)
       в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
       в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
       в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
       в System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
       в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG&amp;amp; msg)
       в System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
       в System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
       в System.Windows.Application.RunDispatcher(Object ignore)
       в System.Windows.Application.RunInternal(Window window)
       в System.Windows.Application.Run(Window window)
       в System.Windows.Application.Run()
       в TrendWalker.App.Main() в D:\WORK\PROG\Projects\StockSharp\TrendWalker\4.1.11\WithMarketOrders\TrendWalker\obj\Debug\App.g.cs:строка 0
       в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       в System.Threading.ThreadHelper.ThreadStart()
  InnerException:
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Если в коде вызываю RegisterSecurity, то в окне Debug:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:plain"&gt;

RegisterTable: fin_info. Fields: paper_no, ANSI_name, mat_date, status, p_code..........
RegisterTable: msg Table subscribed succesefully

UnRegisterTable: fin_info, where: 
UnRegisterTable: fin_info, where: 
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Т.е. отписка от fin_info идет два раза, на второй раз выдается исключение.&lt;br /&gt;Если не подписываться на инструмент - RegisterSecurity, то идет отписка не зарегистрированного инструмента.&lt;br /&gt;В обоих случаях выпадает исключение тут (ф-я StopExport AlfaTrader.cs):&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

      if (_tradeSubscribers.IsEmpty())
      {
        Wrapper.UnRegisterSecurity();
      }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Первая отписка, как я понял, происходит в BaseTrader.cs в ф-ии StopExport.&lt;br /&gt;В нем идет вызов _subscriptionManager.Stop()&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

            public void Stop()
            {
                RegisteredSecurities.ForEach(_trader.UnRegisterSecurity);
                RegisteredMarketDepths.ForEach(_trader.UnRegisterMarketDepth);
                RegisteredOrderLogs.ForEach(_trader.UnRegisterOrderLog);
                RegisteredTrades.ForEach(_trader.UnRegisterTrades);
                RegisteredPortfolios.ForEach(_trader.UnRegisterPortfolio);
            }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Может тогда стоит убрать следующий код (ф-я StopExport AlfaTrader.cs):&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

      if(!_tradeSubscribers.IsEmpty())
      {
        Wrapper.UnRegisterTrades();
      }

      if (_tradeSubscribers.IsEmpty())
      {
        Wrapper.UnRegisterSecurity();
      }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Если, конечно, я правильно понимаю. Все равно в BaseTrader StopExport мы отписываемся от всего, на что были подписаны (стаканы, инструменты, ордер-лог, все сделки, портфели)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>