2009-11-15 6 views
3

Salut, j'ai quelques questions sur l'utilisation de pipes nommées. Tout d'abord, en essayant d'installer un serveur de pipe, j'ai remarqué que si j'utilise le code ci-dessous .. à la fin du premier client se connecter le serveur devient indisponible SAUF j'emballe le tout dans un moment (vrai) bloc. Est-ce que j'ai fait cela correctement? ou est-ce que chaque serveur est censé être actif une seule fois et ensuite mourir?2 Questions sur les pipes nommées

using (NamedPipeServerStream pipeServerStream = new NamedPipeServerStream(pipeName, PipeDirection.In, 1, transmissionMode)) 
{ 
    pipeServerStream.WaitForConnection(); 

    using (StreamReader sr = new StreamReader(pipeServerStream)) 
    { 
     string message = null; 

     do 
     { 
      message = sr.ReadLine(); 
      OnPipeCommunicationHandler(new IPCData() { Data = message }); 
     } 
     while (message != null); 
    } 
} 

Deuxièmement, j'ai dû essaimer le serveur sur son propre thread - Si je ne fais pas cette habitude ma demande deviennent disponibles. Est-ce normal? Est-ce que je l'ai fait correctement? Je pensais avoir lu quelque part que sous le capot le namedpipeserverstream crée son propre fil pour lui-même mais je ne vois pas que c'est le cas ..

Merci!

Répondre

3

Oui, pour les canaux nommés, vous devez créer une nouvelle instance du serveur pour que le client suivant puisse se connecter. Ce qui est normalement fait (en programmation synchrone au moins) est d'attendre une connexion puis de générer un nouveau thread pour gérer le client, avec le thread original en boucle pour créer un nouveau serveur. En ce qui concerne le threading, même si l'objet crée un fil derrière la scène (ce dont je doute) il ne contourne pas le fait que le code que vous avez écrit est synchrone et devrait donc être dans son propre thread en tous cas.