[Gelöst] C/AL stack memory

14. Mai 2012 11:45

Hallo zusammen,

wir haben noch bei rund 15 Kunden Dynamics NAV 4.0 SP3 und 5.0 SP2 (nativ DB) im Einsatz. Bei diesen läuft auch eine Web-Schnittstelle über den Navision Application Server.
Die Schnittstelle (XML) läuft bei 14 Kunden einwandfrei. Bei genau 1 Kunden haben wir bei einer XML-Transaktion aber Probleme und wir wissen nicht mehr wie weiter.
Wir können haargenau dasselbe bei 14 Kunden problemlos durchführen. Bei dem erwähnten einen Kunden gibt es aber Probleme.
Alle 15 Kunden haben exakt dieselben Objekte, es gibt keine Unterschiede.

Hier nun der Fehler, welcher im Server Event Log angezeigt wird:

The following information is part of the event:
There is not sufficient available space in the C/AL stack memory to execute this task.
There are too many simultaneous activities, due to the way recursive function call is used in the program.
The problem can be solved temporarily by shutting down some ...

Das Problem dabei ist, dass wir keinen rekursiven Aufruf haben!?!

Hier ein Auszug aus der Codeunit, welche im NAS verwendet wird:

Code:
      'CSCList':
        BEGIN
          CSCList := WONode.childNodes;
          FOR j := 0 TO (CSCList.length -1) DO
            BEGIN
              CSCCodeNode := CSCList.item(j);
              CASE CSCCodeNode.baseName OF
                'CSCCode':
                  BEGIN
                    CSCCodeList := CSCCodeNode.childNodes;
                    FOR k := 0 TO (CSCCodeList.length - 1) DO
                      BEGIN
                        CASE CSCCodeList.item(k).baseName OF

                          'Code':
                            BEGIN
                              CSCCode := CSCCodeList.item(k).text;
                            END;


Beim der zweitletzten Code-Zeile (CSCCode := CSCCodeList.item(k).text) wird ein Fehler ins Event Log geschrieben.
Dies geschieht aber nur bei einem von 15 Kunden.
Zudem, wenn wir die entsprechende Codeunit in der Datenbank direkt aufrufen und die XML-Datei direkt auswählen und verarbeiten lassen, dann tritt der Fehler nicht auf!?!
Nur wenn es über den NAS-Dienst läuft, tritt der Fehler auf. Der Rest der Schnittstelle läuft übrigens einwandfrei.

Vielleicht oder hoffentlich habt ihr uns einen Tipp.

Vielen Dank, Beno
Zuletzt geändert von beno am 13. Dezember 2012 12:05, insgesamt 1-mal geändert.

Re: C/AL stack memory

14. Mai 2012 12:00

Hallo,

ein Problem könnte sein, dass die For- Schleife bei einer leeren Liste nicht wirklich zum Ende kommt. Daher würde ich, um zunächst mal diesen Fehler auszuschließen, eine Abfrage auf "Length <> 0" einbauen.
Die andere Möglichkeit eines Fehlers ist die verwendete MSXML-Version und deren Patchlevel.

Gruß, Fiddi

Re: C/AL stack memory

14. Mai 2012 13:38

Hallo Fiddi,

vielen Dank für Deine Antworten.

Also die Liste ist nie leer, das kann ich schon mal ausschliessen.
Vorallem auch darum, weil der direkte Aufruf aus dem Object Designer funktioniert, aber über den NAS-Dienst nicht.
Die Abfrage macht aber trotzdem Sinn!

Aber... ich habe gesehen, dass tatsächlich ein MS-XML Patch fehlt. Die anderen haben deren 3, der "Problem"-Kunde hat nur 2.
Wir versuchen es nun mit der Nach-Installation des MS-XML Patches (Security Patch).

Viele Grüsse, Beno

Re: C/AL stack memory

14. Mai 2012 13:48

Wir haben nun den fehlenden MS-XML Patch installiert, den NAS-Dienst neu gestartet und übers Web eine Transaktion (XML) abgesetzt.
Der Fehlt tritt leider immer noch auf. Nun könnte es höchstens noch sein, dass der Server neu gestartet werden muss.

Aber sonst sind wir nach wie vor ratlos!?!

Re: C/AL stack memory

14. Mai 2012 14:11

Ich würde auch mal versuchen die Length mitzutracken (in allen verwendeten Fällen).
Vielleicht sind hier irgendwo blöde Daten drinnen die du nie zu Gesicht bekommst, die dir hier aber den Fehler verursachen.

Re: C/AL stack memory

14. Mai 2012 14:42

Wir haben dies nun geprüft. Der zu empfangende String ist genau 2 Stellen lang (z.B. "XW").

Das Komische dabei ist, dass es mit dem Direktaufruf aus dem Object Designer (NAV Client) funktioniert.
NUR mit dem NAS-Dienst funktioniert es nicht!?! Also als Client Direktaufruf (NAS-Simulation) i.O. und als NAS-Dienst fehlerhaft.

Re: C/AL stack memory

14. Mai 2012 14:46

beno hat geschrieben:Das Komische dabei ist, dass es mit dem Direktaufruf aus dem Object Designer (NAV Client) funktioniert.
NUR mit dem NAS-Dienst funktioniert es nicht!?! Also als Client Direktaufruf (NAS-Simulation) i.O. und als NAS-Dienst fehlerhaft.

Startet ihr dne Client zum Test auf der selben Maschiene wie den NAS?
Habt ihr mal geprüft ob der NAS die gleiche Build-Nummer hat wie der Client?
Was gebt ihr dem NAS für Parameter mit? Sind dort eventuell sogar mehr als ein StartParameter für NAV-Objekte hinterlegt?

Re: C/AL stack memory

14. Mai 2012 15:05

Wir starten den Client sowie auch den NAS auf der Server-Konsole. Beides ist auf derselben Maschine installiert.
Der Client hat die tiefere Build-Nummer als der NAS.
Der NAS Startup-Parameter wird beim Test (Direktaufruf) genau gleich übergeben wie beim Starten als Dienst.
Es ist nur 1 Parameter, z.B. "ABCD".

Beim Test (Direktaufruf) wird der Client als NAS verwendet. Wenn dann übers Web eine XML-Transaktion geschickt wird, gibt es keinen Fehler.
Wird jedoch der NAS als Dienst gestartet, kann man zwar mit der Web-Schnittstelle arbeiten. Sobald man aber dieselbe XML-Transaktion abschickt (Request), erhalten wir den Fehler.

Ich glaube ich spinn!?!

Re: C/AL stack memory

14. Mai 2012 15:08

beno hat geschrieben:Wir starten den Client sowie auch den NAS auf der Server-Konsole. Beides ist auf derselben Maschine installiert.
Der Client hat die tiefere Build-Nummer als der NAS.

Kannst du hier einmal den zum NAS passenden Client verwenden?

Re: C/AL stack memory

15. Mai 2012 07:50

Kann es evtl. auch daran liegen, das der Service überrannt wird, d.h. das eine Service anfrage durch einen Event mehrfach abgesetzt wird, ohne das der alte Request schon abgearbeitet wurde?

Gruß, Fiddi

Re: C/AL stack memory

15. Mai 2012 09:03

Guten Morgen Fiddi,

wie kann ich dies nachprüfen? Wie gesagt, bei der NAS-Simulation (Direktaufruf aus dem Object Designer) funktioniert es immer. Beim Starten des NAS-Dienstes kommt der Fehler aber schon beim ersten Mal.

Merci, Beno

Re: C/AL stack memory

15. Mai 2012 09:17

Starte den NAS doch mal im DEBUG- Modus, evtl. hilft dir das weiter.

Gruß, Fiddi

Re: C/AL stack memory

13. Dezember 2012 12:04

Nun ja, effektiv lösen konnten wird das Problem nicht.
Durch Code-Optimierung wird nun ev. weniger Memory verwendet, was zu Folge hat, dass der Fehler bei diesem einen Kunden nicht mehr auftritt.
Dies ist aber eher eine Umgehungslösung.