Можно ли передавать через именованные каналы объекты, а не только стринговые сообщения? Ни в одном найденном мной примере про NamedPipes не нашёл передачу чего-либо кроме текста.
Можно ли передавать через именованные каналы объекты, а не только стринговые сообщения? Ни в одном найденном мной примере про NamedPipes не нашёл передачу чего-либо кроме текста.
Комментарии (10)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Через сетевое соединение передаются только байты, не стринги и не числа. В байты можно перевести все что угодно. Это называется сериализация. Наши классы (из BisEnt) поддерживают WCF сериализацию.
Да-да, вот как раз пытался сериализовать и в бинарник, и в XML. Но даже не вижу на какой стороне проблема, сервера или клиента. Если есть под рукой пример, скиньте, пожалуйста.
Под рукой простого примера нет. А в чем выражается проблема? Попробуйте вначале делать сериализацию-десериализацию локально, без пайпов. Чтобы проверить, что она правильно происходит. А потом уже пайпы. Сложное - это всегда передача состояния. Сам трансфер данных - прост до безобразия. Пайпы - это не сокеты. Тут ни датаграм, ни пакетов. Все передается как есть.
C сериализацией уже экспериментировал, сохранял и загружал из файлов.
Переделал такой консольный пример. В методе Main закоментены вызовы первой пары методов, которые успешно передают и получают текстовые сообщение. Проблема со второй парой. Сервер не принимает заполненный словарь, формат не разберёт.
А как это тогда стандартизировать под один объём?
Посылаю текстовые сообщения из одного приложения в другое - нормально. Стоит заменить на структуру или класс и всё, то нарушен канал, то не удаётся десереализировать.
Никак. Разные данные имеют разные длины. Нужно посылать вначале ввиде 2-3-ех байт размер сообщения, а дальше уже само сообщение. Чтобы принимающая сторона знала, сколько ей считывать.
По идее такая конструкция должна считывать всё посланное сообщение целиком.
По крайней мере у меня заполненным оказывается весь килобайт, полезной информации которой составляет на самом деле треть. После этого он мне выкидывает экцепцию "Не удалось найти сборку". Даже с учётом того, что структуру я вынес в отдельную библиотеку, правда так до сих пор не понятно зачем это нужно, ведь она была прописана внутри класса, скопипастена с входящего конца трубы.
В место
лучше использовать
И предлагаю посмотреть на решение по сеирализации\десериализации предложенное на форуме: http://stackoverflow.com/questions/4021893/saving-a-dictionarystring-int32-in-c-sharp-serialization
Encoding.UTF8.GetBytes(Convert.ToString(stream));
В MSDN говорят, что класс BinaryWriter работает только с простыми типами данных, а такой как словарь, наверное, сложный.