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 .
Что я делаю неправильно?
У меня есть следующий сервер с именем (работа в .net Framework): < /p> [code]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(); } [/code] , если я прокомментирую сериализацию сервера и waitforpipedrain и строки Deserialize клиента, он будет отправлять запрос просто отлично, но как только Я пытаюсь отправить ответ через трубу, клиент замораживает свою линию Deserialize . Что я делаю неправильно?