Zitat |
vielen Dank für den Hinweis auf den Umfang der Programmierung ==> macht viel Mut!?
|
Naja, Du hast doch sicherlich evaluiert, was Du für Kommunikationswege einsetzen kannst und Dich dann für NamedPipes entschieden.
Da solltest ja auf die Defizite dieser Technologie gestoßen sein - daher war das nur noch mal eine Erinnerung, dass es einfach heutzutage bessere Lösungen gibt ;-)
Entmutigend ist das natürlich, wenn diese Fakten für Dich neu waren - aber so sind eben die NamedPipes. Hat ein Grund, wieso man diese kaum noch sieht ;-)
---
Dein Snippet entspricht weder dem Client noch dem Server-Beispiel aus den Docs - oder siehst Du andere snippets?
Server
class PipeServer
{
static void Main()
{
using (NamedPipeServerStream pipeServer =
new NamedPipeServerStream("testpipe", PipeDirection.Out))
{
Console.WriteLine("NamedPipeServerStream object created.");
// Wait for a client to connect
Console.Write("Waiting for client connection...");
pipeServer.WaitForConnection();
Console.WriteLine("Client connected.");
try
{
// Read user input and send that to the client process.
using (StreamWriter sw = new StreamWriter(pipeServer))
{
sw.AutoFlush = true;
Console.Write("Enter text: ");
sw.WriteLine(Console.ReadLine());
}
}
// Catch the IOException that is raised if the pipe is broken
// or disconnected.
catch (IOException e)
{
Console.WriteLine("ERROR: {0}", e.Message);
}
}
}
}
Client
class PipeClient
{
static void Main(string[] args)
{
using (NamedPipeClientStream pipeClient =
new NamedPipeClientStream(".", "testpipe", PipeDirection.In))
{
// Connect to the pipe or wait until the pipe is available.
Console.Write("Attempting to connect to pipe...");
pipeClient.Connect();
Console.WriteLine("Connected to pipe.");
Console.WriteLine("There are currently {0} pipe server instances open.",
pipeClient.NumberOfServerInstances);
using (StreamReader sr = new StreamReader(pipeClient))
{
// Display the read text to the console
string temp;
while ((temp = sr.ReadLine()) != null)
{
Console.WriteLine("Received from server: {0}", temp);
}
}
}
Console.Write("Press Enter to continue...");
Console.ReadLine();
}
}
Basierend auf dem ReadLine willst Du wohl hier den Client darstellen, ich weiß aber nicht was Du mit dem Event nun vor hast - oder ich verstehe die Frage nicht.
Was Du machen musst:
- Über den Client an den Server schicken
- Server antwortet
- >> Request kannst einfach asynchron verarbeiten
- Client muss pollen, obs eine Server-Antwort gibt
- (Optional Verbindung schließen)
- >> Response kannst asynchron verarbeiten
Du kannst das auch mit Events machen, auf beiden Seiten.
Für die Logik spielt das aber keine Rolle.
Kannst ja einfach mal die beiden Doc Samples laufen lassen, dann siehst ja, wie das mit dem Verhalten der beiden Komponenten funktioniert.
Und dann kannst es beliebig ausbauen - da gibts dann sehr viele Wege nach Rom (Events, Queues, asynchrone Delegates..). Aber da weiß ich halt nicht, was Du brauchst / willst.