﻿<?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/3923/peredacha-obektov-po-trubam/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-20T06:12:54Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3923" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/27237/</id>
    <title type="text">Михаил Сухов: Buratino: А как это тогда стандартизировать под один объём? Никак. Разные данные имеют...</title>
    <published>2013-08-30T06:30:09Z</published>
    <updated>2013-08-30T06:30:09Z</updated>
    <author>
      <name>Buratino</name>
      <uri>https://stocksharp.com/users/451/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27234)" rel="nofollow" target="_blank"&gt;Михаил Сухов&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27233)" rel="nofollow" target="_blank"&gt;Buratino&lt;/a&gt;:&lt;/strong&gt;
А как это тогда стандартизировать под один объём?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Никак. Разные данные имеют разные длины. Нужно посылать вначале ввиде 2-3-ех байт размер сообщения, а дальше уже само сообщение. Чтобы принимающая сторона знала, сколько ей считывать.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;По идее такая конструкция должна считывать всё посланное сообщение целиком.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
                        byte[] buffer = new byte[1024];
                        while(pipeServer.Read(buffer, 0, buffer.Length) != 0);

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;По крайней мере у меня заполненным оказывается весь килобайт, полезной информации которой составляет на самом деле треть. После этого он мне выкидывает экцепцию &amp;quot;Не удалось найти сборку&amp;quot;. Даже с учётом того, что структуру я вынес в отдельную библиотеку, правда так до сих пор не понятно зачем это нужно, ведь она была прописана внутри класса, скопипастена с входящего конца трубы.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27234/</id>
    <title type="text">Buratino: А как это тогда стандартизировать под один объём? Никак. Разные данные имеют разные длины....</title>
    <published>2013-08-29T18:50:03Z</published>
    <updated>2013-08-29T18:50:03Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27233)" rel="nofollow" target="_blank"&gt;Buratino&lt;/a&gt;:&lt;/strong&gt;
А как это тогда стандартизировать под один объём?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Никак. Разные данные имеют разные длины. Нужно посылать вначале ввиде 2-3-ех байт размер сообщения, а дальше уже само сообщение. Чтобы принимающая сторона знала, сколько ей считывать.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27233/</id>
    <title type="text">Михаил Сухов: Buratino: ODE0� А как это тогда стандартизировать под один объём? Посылаю текстовые со...</title>
    <published>2013-08-29T18:13:26Z</published>
    <updated>2013-08-29T18:13:55Z</updated>
    <author>
      <name>Buratino</name>
      <uri>https://stocksharp.com/users/451/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27228)" rel="nofollow" target="_blank"&gt;Михаил Сухов&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27178)" rel="nofollow" target="_blank"&gt;Buratino&lt;/a&gt;:&lt;/strong&gt;
ODE0�&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;А как это тогда стандартизировать под один объём?&lt;/p&gt;
&lt;p&gt;Посылаю текстовые сообщения из одного приложения в другое - нормально. Стоит заменить на структуру или класс и всё, то нарушен канал, то &lt;a href="http://social.msdn.microsoft.com/Forums/ru-RU/85053abb-50e2-4181-9cf7-76ffb6a4ecd9/-" rel="nofollow" target="_blank"&gt;не удаётся десереализировать&lt;/a&gt;.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27228/</id>
    <title type="text">Buratino: ODE0� </title>
    <published>2013-08-29T13:04:36Z</published>
    <updated>2013-08-29T13:04:36Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27178)" rel="nofollow" target="_blank"&gt;Buratino&lt;/a&gt;:&lt;/strong&gt;
ODE0�&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27224/</id>
    <title type="text">IvanB: В место Encoding.UTF8.GetBytes(Convert.ToString(stream)); &amp;gt; лучше использовать &amp;gt; ```csharp st...</title>
    <published>2013-08-29T10:55:58Z</published>
    <updated>2013-08-29T12:41:05Z</updated>
    <author>
      <name>Buratino</name>
      <uri>https://stocksharp.com/users/451/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27217)" rel="nofollow" target="_blank"&gt;IvanB&lt;/a&gt;:&lt;/strong&gt;
В место&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Encoding.UTF8.GetBytes(Convert.ToString(stream));&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; лучше использовать
&amp;gt; ```csharp
stream.ToArray();
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;И предлагаю посмотреть на решение по сеирализации\десериализации предложенное на форуме: &lt;a href="http://stackoverflow.com/questions/4021893/saving-a-dictionarystring-int32-in-c-sharp-serialization" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/4021893/saving-a-dictionarystring-int32-in-c-sharp-serialization&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;В &lt;a href="http://msdn.microsoft.com/ru-ru/library/system.io.binarywriter.aspx" target="_blank"&gt;MSDN&lt;/a&gt; говорят, что класс BinaryWriter работает только с простыми типами данных, а такой как словарь, наверное, сложный.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27217/</id>
    <title type="text">В место Encoding.UTF8.GetBytes(Convert.ToString(stream)); лучше использовать stream.ToArray(); И пре...</title>
    <published>2013-08-29T07:50:53Z</published>
    <updated>2013-08-29T07:50:53Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.com/users/26984/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;В место&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;Encoding.UTF8.GetBytes(Convert.ToString(stream));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;лучше использовать&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;stream.ToArray();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;И предлагаю посмотреть на решение по сеирализации\десериализации предложенное на форуме: &lt;a href="http://stackoverflow.com/questions/4021893/saving-a-dictionarystring-int32-in-c-sharp-serialization" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/4021893/saving-a-dictionarystring-int32-in-c-sharp-serialization&lt;/a&gt;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27178/</id>
    <title type="text">Михаил Сухов: Buratino: Михаил Сухов: Через сетевое соединение передаются только байты, не стринги и...</title>
    <published>2013-08-27T16:50:43Z</published>
    <updated>2013-08-27T16:50:43Z</updated>
    <author>
      <name>Buratino</name>
      <uri>https://stocksharp.com/users/451/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27149)" rel="nofollow" target="_blank"&gt;Михаил Сухов&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27147)" rel="nofollow" target="_blank"&gt;Buratino&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27139)" rel="nofollow" target="_blank"&gt;Михаил Сухов&lt;/a&gt;:&lt;/strong&gt;
Через сетевое соединение передаются только байты, не стринги и не числа. В байты можно перевести все что угодно. Это называется сериализация. Наши классы (из BisEnt) поддерживают WCF сериализацию.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Да-да, вот как раз пытался сериализовать и в бинарник, и в XML. Но даже не вижу на какой стороне проблема, сервера или клиента. Если есть под рукой пример, скиньте, пожалуйста.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Под рукой простого примера нет. А в чем выражается проблема? Попробуйте вначале делать сериализацию-десериализацию локально, без пайпов. Чтобы проверить, что она правильно происходит. А потом уже пайпы. Сложное - это всегда передача состояния. Сам трансфер данных - прост до безобразия. Пайпы - это не сокеты. Тут ни датаграм, ни пакетов. Все передается как есть.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;C сериализацией уже экспериментировал, сохранял и загружал из файлов.&lt;/p&gt;
&lt;p&gt;Переделал такой консольный пример. В методе Main закоментены вызовы первой пары методов, которые успешно передают и получают текстовые сообщение. Проблема со второй парой. Сервер не принимает заполненный словарь, формат не разберёт.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipes;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading;

namespace PipeApplication1
{
    class ProgramPipeTest
    {

        public void ThreadStartServer()
        {
            // Create a name pipe
            using (NamedPipeServerStream pipeStream = new NamedPipeServerStream(&amp;quot;mytestpipe2&amp;quot;))
            {
                Console.WriteLine(&amp;quot;[Server] Pipe created {0}&amp;quot;, pipeStream.GetHashCode());

                // Wait for a connection
                pipeStream.WaitForConnection();
                Console.WriteLine(&amp;quot;[Server] Pipe connection established&amp;quot;);

                using (StreamReader sr = new StreamReader(pipeStream))
                {
                    string temp;
                    // We read a line from the pipe and print it together with the current time
                    while ((temp = sr.ReadLine()) != null)
                    {
                        Console.WriteLine(&amp;quot;{0}: {1}&amp;quot;, DateTime.Now, temp);
                    }
                }
            }

            Console.WriteLine(&amp;quot;Connection lost&amp;quot;);
        }

        public void ThreadStartClient(object obj)
        {
            // Ensure that we only start the client after the server has created the pipe
            ManualResetEvent SyncClientServer = (ManualResetEvent)obj;

            // Only continue after the server was created -- otherwise we just fail badly
            // SyncClientServer.WaitOne();

            using (NamedPipeClientStream pipeStream = new NamedPipeClientStream(&amp;quot;mytestpipe2&amp;quot;))
            {
                // The connect function will indefinately wait for the pipe to become available
                // If that is not acceptable specify a maximum waiting time (in ms)
                pipeStream.Connect();

                Console.WriteLine(&amp;quot;[Client] Pipe connection established&amp;quot;);
                using (StreamWriter sw = new StreamWriter(pipeStream))
                {
                    sw.AutoFlush = true;
                    string temp;
                    Console.WriteLine(&amp;quot;Please type a message and press [Enter], or type 'quit' to exit the program&amp;quot;);
                    while ((temp = Console.ReadLine()) != null)
                    {
                        if (temp == &amp;quot;quit&amp;quot;) break;
                        sw.WriteLine(temp);
                    }
                }
            }
        }



        public void BinServer()
        {
            BinaryFormatter binFormat = new BinaryFormatter();

            // Create a name pipe
            using (NamedPipeServerStream pipeStream = new NamedPipeServerStream(&amp;quot;mytestpipe1&amp;quot;))
            {
                Console.WriteLine(&amp;quot;[Server] Pipe created {0}&amp;quot;, pipeStream.GetHashCode());

                // Wait for a connection
                pipeStream.WaitForConnection();
                Console.WriteLine(&amp;quot;[Server] Pipe connection established&amp;quot;);

                byte[] buffer = new byte[65000];
                pipeStream.Read(buffer, 0, buffer.Length);
                var stream = new MemoryStream(buffer);
                var obj = (Dictionary&amp;lt;int, string&amp;gt;)binFormat.Deserialize(stream);
                Console.WriteLine(obj);
            }
        }

        public void BinClient(object obj)
        {
            var dic = new Dictionary&amp;lt;int, string&amp;gt; {{11, &amp;quot;hello&amp;quot;}, {22, &amp;quot;world&amp;quot;}};

            BinaryFormatter binFormat = new BinaryFormatter();
            var stream = new MemoryStream();
            binFormat.Serialize(stream, dic);

            using (NamedPipeClientStream pipeStream = new NamedPipeClientStream(&amp;quot;mytestpipe1&amp;quot;))
            {
              
                pipeStream.Connect();
                Console.WriteLine(&amp;quot;[Client] Pipe connection established&amp;quot;);

                byte[] buffer = new byte[65000];
                buffer = Encoding.UTF8.GetBytes(Convert.ToString(stream));

                pipeStream.Write(buffer,0,buffer.Length);

            }
        }

        static void Main(string[] args)
        {

            // To simplify debugging we are going to create just one process, and have two tasks
            // talk to each other. (Which is a bit like me sending an e-mail to my co-workers)

            ProgramPipeTest Server = new ProgramPipeTest();
            ProgramPipeTest Client = new ProgramPipeTest();

            //Thread ServerThread = new Thread(Server.ThreadStartServer);
            //Thread ClientThread = new Thread(Client.ThreadStartClient);
            Thread ServerThread = new Thread(Server.BinServer);
            Thread ClientThread = new Thread(Client.BinClient);

            ServerThread.Start();
            ClientThread.Start();
        }
    }
}

&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27149/</id>
    <title type="text">Buratino: Михаил Сухов: Через сетевое соединение передаются только байты, не стринги и не числа. В б...</title>
    <published>2013-08-26T15:53:06Z</published>
    <updated>2013-08-26T15:53:06Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27147)" rel="nofollow" target="_blank"&gt;Buratino&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27139)" rel="nofollow" target="_blank"&gt;Михаил Сухов&lt;/a&gt;:&lt;/strong&gt;
Через сетевое соединение передаются только байты, не стринги и не числа. В байты можно перевести все что угодно. Это называется сериализация. Наши классы (из BisEnt) поддерживают WCF сериализацию.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Да-да, вот как раз пытался сериализовать и в бинарник, и в XML. Но даже не вижу на какой стороне проблема, сервера или клиента. Если есть под рукой пример, скиньте, пожалуйста.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Под рукой простого примера нет. А в чем выражается проблема? Попробуйте вначале делать сериализацию-десериализацию локально, без пайпов. Чтобы проверить, что она правильно происходит. А потом уже пайпы. Сложное - это всегда передача состояния. Сам трансфер данных - прост до безобразия. Пайпы - это не сокеты. Тут ни датаграм, ни пакетов. Все передается как есть.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27147/</id>
    <title type="text">Михаил Сухов: Через сетевое соединение передаются только байты, не стринги и не числа. В байты можно...</title>
    <published>2013-08-26T13:58:39Z</published>
    <updated>2013-08-26T13:58:39Z</updated>
    <author>
      <name>Buratino</name>
      <uri>https://stocksharp.com/users/451/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(27139)" rel="nofollow" target="_blank"&gt;Михаил Сухов&lt;/a&gt;:&lt;/strong&gt;
Через сетевое соединение передаются только байты, не стринги и не числа. В байты можно перевести все что угодно. Это называется сериализация. Наши классы (из BisEnt) поддерживают WCF сериализацию.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Да-да, вот как раз пытался сериализовать и в бинарник, и в XML. Но даже не вижу на какой стороне проблема, сервера или клиента. Если есть под рукой пример, скиньте, пожалуйста.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27139/</id>
    <title type="text">Через сетевое соединение передаются только байты, не стринги и не числа. В байты можно перевести все...</title>
    <published>2013-08-26T08:42:40Z</published>
    <updated>2013-08-26T08:42:40Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Через сетевое соединение передаются только байты, не стринги и не числа. В байты можно перевести все что угодно. Это называется сериализация. Наши классы (из BisEnt) поддерживают WCF сериализацию.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27136/</id>
    <title type="text">Можно ли передавать через именованные каналы объекты, а не только стринговые сообщения? Ни в одном н...</title>
    <published>2013-08-26T07:35:56Z</published>
    <updated>2013-08-26T07:35:56Z</updated>
    <author>
      <name>Buratino</name>
      <uri>https://stocksharp.com/users/451/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Можно ли передавать через именованные каналы объекты, а не только стринговые сообщения? Ни в одном найденном мной примере про &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeclientstream.aspx" target="_blank"&gt;NamedPipes&lt;/a&gt; не нашёл передачу чего-либо кроме текста.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>