none
NamedPipeServer und NamedPipedClient Stream RRS feed

  • Allgemeine Diskussion

  • Hallo,

    Ich habe einen ServerThread wo sich mehrere Clients Verbinden können. Nach ein paar Nachrichten kommt es immer zu einer Exception dass das Zeitlimitfür die Semaphore erreicht wurde..

          public void SendMessage(IMessage msg, MessageHeader header)
            {
                lock (locker)
                {
                    NamedPipeClientStream client = null;

                    try
                   {
        
                        client = new NamedPipeClientStream(header.TargetChordNode);

                        if (!client.IsConnected)
                        {
                            client.Connect(3000);
                        }

                        //using (client)
                        //{

                            ChordNodeBaseHelpingFunctions.SerializeToStream(client, msg);
                        //client.WaitForPipeDrain();
                        //}

                        //client.WaitForPipeDrain();

                        this.OnSend(new MessageSendEventArgs(msg, header));

                    }
                    catch (ArgumentNullException e)
                {
                }
                catch (Exception ex)
                {
                    //throw;
                }
                finally
                {
                        client.Flush();
                        client.Close();
                        client.Dispose();
                    }
              }
            }

         private void openServer(string ip)
            {

                    try
                    {
                        IMessage tmpIMessage = null;
                        NamedPipeServerStream server = new NamedPipeServerStream(ip);

                        while (true)
                        {

                       
                            server.WaitForConnection();

                            clientMutex.WaitOne();

                            tmpIMessage = ChordNodeBaseHelpingFunctions.DeserializeFromStream(server);

                            this.OnReceive(null, new MessageReceiveEventArgs(tmpIMessage));

                            server.Flush();
                            server.Disconnect();

                            clientMutex.ReleaseMutex();

                       
                         }
                    }
                    catch (Exception e)
                    {

                    }
                    finally
                    {
                        // Stop listening for new clients.
                    }
            }


    Samstag, 23. Juni 2018 17:22

Alle Antworten

  • Hallo rocky182,

    Weist die Fehlermeldung auf den Methodenaufruf hin, der den Fehler ausgelöst hat (wie hier) ?

    Rufst Du die Methode SendMessage (beziehungsweise NamedPipeClientStream.Connect) in einer Schleife auf? Laut diesem Thread könnte dies zu Problemen führen.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 26. Juni 2018 09:09
    Administrator