Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: C#, NDde - Client baut Verbindung nicht richtig ab

  1. #1
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    habe einen DDE Client mit C# zusammengeklickt.

    Hilfsbibliothek: NDde [ http://ndde.codeplex.com/ ] (sonst gibts ja kaum was brauchbares )
    Wirtsystem: Win2K (also max. .net 2.0 mgl.)

    Ablauf:

    Verbindung aufbauen:

    Code:
    *
    public bool connect(string _sService, string _sTopic)
            {
                try
                {
                    gDdeClient = new DdeClient(_sService, _sTopic, this);
                    gDdeClient.Disconnected += gDdeClient_Disconnected;
                    gDdeClient.Connect();
                    return true;
                }
                catch (Exception ex)
                {
                    gsError = ex.Message;
                    return false;
                }
            }
    überwachung hinzufügen:

    Code:
    *
            public bool advise(string _AsItem, int _iFormat, bool _xHot, int _iTimeOut, bool _xAdd)
            {
                try
                {   
                    gDdeClient.StartAdvise(_AsItem, _iFormat, _xHot, _iTimeOut); 
                    if(_xAdd)                    
                        gDdeClient.Advise += gDdeClient_Advise;
                    return true;
                }
                catch (Exception ex)
                {
                    gsError = ex.Message;
                    return false;
                }
            }
    der Event gDdeClient_Advise funktioniert auch...


    ABER das trennen der Verbindung bei Disconnect-Wunsch oder schließen des Clients mit:

    Code:
    *
    gDdeClient.Disconnect();
    funktioniert nicht. ich sehe per netstat immer noch die offene Verdindung (Status: HERGESTELLT), auch nach mehreren Minuten noch.

    auch folgendes führt nicht zum Erfolg:

    Code:
    *
    foreach (string _sItem in gLisItems)
                        {
                            gDdeClient.StopAdvise(_sItem,60000);
                            displayTextBox.Text = displayTextBox.Text + Environment.NewLine + _sItem + "disconnected";                        
                        }                    
                        gDdeClient.Disconnect();
    und auch alle Versuche mit Dispose() sind gescheitert

    (die NDde-Dokumentation ist diesbezüglich eben auch sehr dünn)

    irgendwer, irgendwelche Ideen und/oder Erfahrungen?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]
    Zitieren Zitieren C#, NDde - Client baut Verbindung nicht richtig ab  

  2. #2
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.759
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Wird denn der Event "Disconnected" und deine Prozedur "gDdeClient_Disconnected" aufgerufen?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Wird denn der Event "Disconnected" und deine Prozedur "gDdeClient_Disconnected" aufgerufen?
    ja, aber wie gesagt bleibt die verbindung offen.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #4
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.759
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    ich sehe per netstat immer noch die offene Verdindung (Status: HERGESTELLT), auch nach mehreren Minuten noch.
    Wollt das mal nachstellen, aber wie kann Ich den in Netstat überhaupt die DDE Verbindung sehen?

    Ich hab's mit netstat -a -b -n probiert aber mein Prozess taucht nirgends auf!
    (Hab den Server und den ClientWin aus dem Samples Ordner benutzt, Verbindung besteht auch!)
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    und auch alle Versuche mit Dispose() sind gescheitert
    Hast du schonmal versucht, nach dem Dispose den Garbage Collector manuell mit GC.SuppressFinalize(this) aufzurufen?

    Beim Prosim-Objekt war das bei mir die einzige Möglichkeit die Verbindung immer sauber zu trennen, also: IDisposable und Dispose implementieren und darin den GC aufrufen.

  6. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    vierlagig (29.04.2011)

  7. #6
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.759
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Hast du schonmal versucht, nach dem Dispose den Garbage Collector manuell mit GC.SuppressFinalize(this) aufzurufen?
    Laut Doku ruft doch SuppressFinalize nicht den GC sondern verhindert den Aufruf des Finalizers: http://msdn.microsoft.com/de-de/libr...sfinalize.aspx
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Laut Doku ruft doch SuppressFinalize nicht den GC sondern verhindert den Aufruf des Finalizers: http://msdn.microsoft.com/de-de/libr...sfinalize.aspx
    So gesehen, ja. Ich verstand das im Zusammenhang mit der Implementierung der IDisposable-Schnittstelle, in dem ich quasi mit dem Freigeben meiner eigenen Ressourcen einen eigenen GC baue.

    Auf dieser Seite stehen auch noch ein paar Details:
    http://openbook.galileocomputing.de/...34116af7f94dc6

    Ich hatte so ein ähnliches Problem bei dem ProSim COM-Objekte (Plcsim), dort hatte ich ursprünglich die Verbindung zu Plcsim im Destruktor getrennt.
    Hier kam es aber manchmal vor, dass der Destruktor nie aufgerufen wurde, oder bei Aufruf des Destruktors das Objekt vom GC
    schon aufgeräumt wurde und ungültig war. Eben weil das COM-Objekt sozusagen unmanaged ist, und der GC nicht weiß ob noch Referenzen auf dieses Objekt bestehen.
    Dann konnte die Disconnect Methode nicht aufgerufen werden, und Plcsim dachte immer noch es wäre jemand verbunden.
    Durch die Implementierung von IDisposable und GC.SuppressFinalize(this) habe ich die Kontrolle über den GC zurückerlangt.

  9. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    vierlagig (29.04.2011)

  10. #8
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    scheint erstmal zu funktionieren... beobachten, weiterfahren
    (soll ja (hoffentlich) keine dauereinrichtung sein)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  11. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    scheint erstmal zu funktionieren... beobachten, weiterfahren
    Was hast du denn ändern müssen damit es funktioniert? Oder lag das Problem an anderer Stelle...

  12. #10
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Was hast du denn ändern müssen damit es funktioniert? Oder lag das Problem an anderer Stelle...
    ich habe die von dir vorgeschlagenen änderungen eingefügt.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 02.12.2011, 16:30
  2. Beckhoff OPC-Server keine Verbindung mit Client
    Von Toddy80 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 09.06.2011, 16:37
  3. Antworten: 3
    Letzter Beitrag: 16.03.2011, 11:37
  4. CP341 und RK512 Verbindung baut auf/ab
    Von Bender25 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 02.05.2008, 09:15
  5. Antworten: 4
    Letzter Beitrag: 16.05.2006, 16:39

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •