Laden...

[gelöst] ASp.NET TCPClient: Socket schließt nicht !

Erstellt von schuppsl vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.431 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren
[gelöst] ASp.NET TCPClient: Socket schließt nicht !

Hallo, ich bin mal wieder echt am verzweifeln!
In einer neu angelegten ASP.NET Applikation nehme ich per TCPClient zu unserer Software mit verschiedenen Sockets Kontakt auf.
Wie in meine bisherigen ASP.NET Anwendung auch!

Ich habe nun festgestellt, daß die erstellten Sockets irgendwann nicht mehr geschlossn werden können..in der neuen Anwendung!

Natürlich habe ich alle Socketfunktionen aus der bisherigen Anwendung hergenommen und verwende diese in der neuen App auch.

Zur Anmerkung: In der alten App läuft alles perfekt, die Sockets werden erstellt und auch ordnungsgemäß geschlossen, daran gibts nichts zu rütteln.

Da dies in der neuen nicht geht, habe ich mal die Erstellung und Schließung der Sockets aufs Minimalste reduziert zum Test:



if (!Page.IsPostBack)
            {


            TcpClient tcpCl = new TcpClient();
            TcpClient tcpClIF = new TcpClient();
            tcpClIF = new TcpClient(CGlob.USE_IPV6 ? AddressFamily.InterNetworkV6 : AddressFamily.InterNetwork);
            tcpCl = new TcpClient(CGlob.USE_IPV6 ? AddressFamily.InterNetworkV6 : AddressFamily.InterNetwork);

            try
            {
                tcpCl.NoDelay = true;
                tcpCl.ReceiveTimeout = 2000;
                tcpCl.SendTimeout = 500;
                tcpCl.ReceiveBufferSize = 8191;
                tcpCl.SendBufferSize = 8191;
                tcpCl.Connect(CGlob.APP_SERVER, CGlob.APP_DATAPORT);



                tcpClIF.NoDelay = true;
                tcpClIF.ReceiveTimeout = 2000;
                tcpClIF.SendTimeout = 500;
                tcpClIF.ReceiveBufferSize = 8191;
                tcpClIF.SendBufferSize = 8191;
                tcpClIF.Connect(CGlob.APP_SERVER, CGlob.APP_PORT);

            }
            catch (Exception ex)
            {
                string mess = ex.Message;
            }
            finally
            {

                tcpCl.Client.Close();
                tcpClIF.Client.Close();
            }
}

Also die TCPCLients werden erstellt, machen einen Connect und werden wieder geschlossen.
Per TCPView und in der Software verfolge ich das Ganze.

Die Variablen für APP_Server usw (localhost) sind ausgefüllt.

Der Connect wird immer korrekt ausgeführt, nur der Close danach nicht.
Debugge ich das Ganze und vergleich den Sockethandle usw. scheint es zu funktionieren.
Aus diesem Grund hatte ich vor jedem Close schon einen Thread.Sleep(1000), was aber auch nichts nützt, es geht dann halt etwas länger.

Mache ich nur einen Socket auf, wird dieser anstandslos wieder geschlossen, nur sobald es zwei sind, gibt es diese Probleme.
Dabei ist es egal, ob die nacheinander erstellt werden und dann nacheinander geschlossen oder ob die erst erstellt-geschlossen--erstellt-geschlossen werden.

Bei Zwei TCPClients wird nach kurzer Zeit einer nicht mehr geschlossen!
Das ist eine minimale ASP.NET Seite und ich teste das, indem ich die Startseite im Browser einfach immer und immer wieder aufrufe.

Wie gesagt mit meiner bisheringe Software geht das so ohne die geringsten Probleme, deshalb verstehe ich das hier nicht.

Warum werden die Sockets, bzw., jeweils einer nicht mehr geschlossen?
Habe auch schon Tests mit Networkstream.Close (MSDN) gemacht, nützt auch nichts.

Was stimmt hier nicht?
Danke an die Profis.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Das hat anscheinend geholfen:
Lösung
Danke!

4.221 Beiträge seit 2005
vor 13 Jahren

Müsste auch einfacher gehen...

Einfach LingerState setzten (LingerState ist die Nachlaufzeit ... also die Zeit die vergehen soll zwischen Close und echtem Schliessen).

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...