Ich habe 2 Apps, die ich über Named Pipes auf .NET 3.5 kommunizieren möchte. Es ist ein Request/Response-Paradigma, bei dem die Daten als XML übertragen werden, um mein Leben einfacher zu machen. Es gibt eine Listener-App und eine App, die Anfragen an die Pipe sendet. Ich versuche, dafür eine bidirektionale Pipe zu verwenden. Das Problem, das ich habe, ist, dass der Aufruf von StreamReader.ReadToEnd() scheint nicht zurückzukehren. Was kann ich tun, um das zu beheben?bidirektionale Named Pipe Frage
Listener Code
public Class Listener
{
private void ThreadFunc()
{
var pipe = new NamedPipeServerStream("GuideSrv.Pipe",PipeDirection.InOut);
var instream = new StreamReader(pipe);
var outstream = new StreamWriter(pipe);
while (true)
{
pipe.WaitForConnection();
var response = ProcessPipeRequest(instream);
outstream.Write(response.ToString());
pipe.Disconnect();
}
}
private XDocument ProcessPipeRequest(StreamReader stream)
{
var msg_in = stream.ReadToEnd(); // << This call doesnt return
var xml_in = XDocument.Parse(msg_in);
// do some stuff here
return new XDocument(....);
}
}
Anforderer Code
public XDocument doIt()
{
var xml = new XDocument(....);
using (var pipe = new NamedPipeClientStream(".", "GuideSrv.Pipe", PipeDirection.InOut))
{
using (var outstream = new StreamWriter(pipe))
using (var instream = new StreamReader(pipe))
{
pipe.Connect();
outstream.Write(xml.ToString());
xml = XDocument.Parse(instream.ReadToEnd());
}
}
return xml;
}