Двоичные сообщения NamedPipe

#c# #wcf #named-pipes

#c# #wcf #именованные каналы

Вопрос:

Простой вопрос (подробности следуют далее): как использовать именованные каналы без сериализации soap, я просто хочу использовать метод on и самостоятельно читать массив байтов. Я пытаюсь реализовать службу, которая не полагается на XML, через именованные каналы.

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

     [OperationContract(IsOneWay = true, Action = "*")]
    Task Message(System.ServiceModel.Channels.Message message);
 

и обратный вызов :

     [OperationContract(IsOneWay = true, Action = "*")]
    Task OnMessage(System.ServiceModel.Channels.Message result);
 

В этом случае я просто считываю массив байтов и десериализую с помощью protobuf.

У меня есть другая служба на том же компьютере, и я хочу улучшить производительность с помощью десериализатора protobuf. Эта служба уже доступна с именованными каналами (с нашими прежними контрактами).

С новым сервером websocket и сериализатором protobuf я хотел бы реализовать его во второй службе. Глядя на поведение конечной точки protobuf, кажется, что они переопределяют XmlObjectSerializer, но, похоже, он все еще использует некоторый xml.

У кого-нибудь есть идея, как это сделать?

Спасибо

Комментарии:

1. Возможно, вы пытаетесь переосмыслить это. Именованные каналы (NetNamedPipeBinding) уже используют двоичный формат сообщений и должны быть быстрыми для обмена данными на компьютере. Я не знаю, почему вы думаете, что вам нужно использовать protobuf. Сначала убедитесь, что вы используете привязку NetNamedPipeBinding, и измерьте производительность, прежде чем делать что-либо еще.

2. Да, я уже использую привязку именованного канала со стандартной сериализацией контракта. Дело в том, что передаваемые данные длиннее, а время сериализации / десериализации больше, чем protobuf, прочитайте это для получения дополнительной информации stevenhollidge.blogspot.fr/2012/05/wcf-bindings.html

3. Чтение этой статьи показывает, что поведение конечной точки protobuf по-прежнему использует soap для преобразования сообщений и разрешения типов данных. В моем случае я просто хочу получить массив байтов, содержащий информацию, которую я отправил с сервером. Возможно ли это?