Двухсторонняя связь с трубкой с помощью XmlSerializerC#

Место общения программистов C#
Ответить
Anonymous
 Двухсторонняя связь с трубкой с помощью XmlSerializer

Сообщение Anonymous »

У меня есть следующий сервер с именем (работа в .net Framework): < /p>

Код: Выделить всё

private void PipeListenerThread()
{
PipeSecurity pipeSecurity = new PipeSecurity();
pipeSecurity.AddAccessRule(new PipeAccessRule("Everyone", PipeAccessRights.ReadWrite, System.Security.AccessControl.AccessControlType.Allow));
using(var pipeStream = new NamedPipeServerStream(Common.Constants.PipeName, PipeDirection.InOut, 1, PipeTransmissionMode.Message, PipeOptions.None, 1024, 1024, pipeSecurity, System.IO.HandleInheritability.None))
{
var serializer = new XmlSerializer(typeof(Common.Message), new Type[] {
typeof(Common.ReadRequest),
typeof(Common.ReadResponse)});

while (running)
{
pipeStream.WaitForConnection();

try
{
Common.Message message = serializer.Deserialize(pipeStream) as Common.Message;
if (message is Common.ReadRequest readRequest)
{
var result = GetData(readRequest);

var reply = new Common.ReadResponse { Value = result };

serializer.Serialize(pipeStream, reply);
pipeStream.WaitForPipeDrain();
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
pipeStream.Disconnect();
}
}
}
< /code>
и следующий клиент в linqpad (.net 8): < /p>
using (var pipe = new NamedPipeClientStream(".", Common.Constants.PipeName, PipeDirection.InOut))
{
var serializer = new XmlSerializer(typeof(Common.Message), new[] { typeof(Common.ReadRequest), typeof(Common.ReadResponse) });

var readRequest = new Common.ReadRequest { Foo = 0, Bar = 0};
pipe.Connect();
serializer.Serialize(pipe, readRequest);
pipe.WaitForPipeDrain();
serializer.Deserialize(pipe).Dump();
}
, если я прокомментирую сериализацию сервера и waitforpipedrain и строки Deserialize клиента, он будет отправлять запрос просто отлично, но как только Я пытаюсь отправить ответ через трубу, клиент замораживает свою линию Deserialize .
Что я делаю неправильно?

Подробнее здесь: https://stackoverflow.com/questions/793 ... serializer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»