| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Error handling Fra : Rune Jensen | 
  Dato :  01-06-09 16:21 |  
  |  
 
            Jeg er - klog af skade som man siger - ved at lære lidt om error handling.
 Nu har jeg læst
 http://www.aspdev.org/articles/asp-error-handling/
Og jeg synes, det er en rigtig god idé den med, at man kan sende en mail 
 til webmaster automatisk, hvis der er fejl på siden.
 Jeg har dog nogle spøørgsmå i den forbindelse.
 Jeg vil gerne lave sådan et script, men vil også gerne være sikker på, 
 jeg gør det rigtigt.
 Men jeg er i tvivl om, om error-handleren tjekker for fejl linært eller 
 "løbende".
 Hvad jeg mener er, skal man have fejltjekket ind hvert sted, hvor der 
 kan opstå fejl, eller kan man lægge det hele i en sub, som bare kaldes 
 ved start? Kan man lave en generel on error goto... ? Måske i global.asa 
 eller lign.
 Håber, spørgsmålet er forståeligt;)
 MVH
 Rune Jensen
            
              |   |   
            
        
 
            
         
           Leif Neland (02-06-2009) 
         
	
            | Kommentar Fra : Leif Neland | 
  Dato :  02-06-09 00:32 |  
  |  
 
            Rune Jensen skrev:
 > Jeg er - klog af skade som man siger - ved at lære lidt om error handling.
 > 
 > Nu har jeg læst
 >  http://www.aspdev.org/articles/asp-error-handling/
> 
 > Og jeg synes, det er en rigtig god idé den med, at man kan sende en mail 
 > til webmaster automatisk, hvis der er fejl på siden.
 > 
 > Jeg har dog nogle spøørgsmå i den forbindelse.
 > 
 > Jeg vil gerne lave sådan et script, men vil også gerne være sikker på, 
 > jeg gør det rigtigt.
 > 
 > Men jeg er i tvivl om, om error-handleren tjekker for fejl linært eller 
 > "løbende".
 > 
 > Hvad jeg mener er, skal man have fejltjekket ind hvert sted, hvor der 
 > kan opstå fejl, eller kan man lægge det hele i en sub, som bare kaldes 
 > ved start? Kan man lave en generel on error goto... ? Måske i global.asa 
 > eller lign.
 > 
 Der er (så vidt jeg har kunne læse mig til) kun to muligheder:
 ON ERROR RESUME NEXT, hvor man så skal checkke efter hvert sted, der kan 
 opstå fejl
 ON ERROR GOTO 0, hvor asp dør med en fejl 500-side.
 Der er ikke en "ON ERROR goto min_egen_errorhandler"
 MEN: 
 http://classicasp.aspfaq.com/general/how-do-i-log/track-asp-errors-on-my-web-site.html
Så kan du lave din egen error-handler-side, der skriver "Beklager, 
 webmaster er orienteret om fejlen", og emailer eller logger i en database.
 Det kræver dog at du har adgang til indstillingerne for IIS, eller kan 
 få hotelportieren til det; er det et billigt webhotel uden support, har 
 du nok ikke.
 Leif
            
              |   |   
            
        
 
            
         
           Stig Johansen (02-06-2009) 
         
	
            | Kommentar Fra : Stig Johansen | 
  Dato :  02-06-09 11:30 |  
  |   
            Leif Neland wrote:
 
 > Der er (så vidt jeg har kunne læse mig til) kun to muligheder:
 > ON ERROR RESUME NEXT, hvor man så skal checkke efter hvert sted, der kan
 > opstå fejl
 
 Ja, og man skal huske, at "ON ERROR RESUME NEXT" gælder for resten af
 scriptet, så hvis der er en 'bøf' længere nede, fortsætter skidtet uden
 yderligere advarsler/fejlmeldinger.
 
 -- 
 Med venlig hilsen
 Stig Johansen
  
            
             |   |   
            
        
 
            
         
           Jørn Andersen (04-06-2009) 
         
	
            | Kommentar Fra : Jørn Andersen | 
  Dato :  04-06-09 05:18 |  
  |   
            On Tue, 02 Jun 2009 01:31:48 +0200, Leif Neland <leif@neland.dk> wrote:
 
 >Der er (så vidt jeg har kunne læse mig til) kun to muligheder:
 >ON ERROR RESUME NEXT, hvor man så skal checkke efter hvert sted, der kan 
 >opstå fejl
 >ON ERROR GOTO 0, hvor asp dør med en fejl 500-side.
 >
 >Der er ikke en "ON ERROR goto min_egen_errorhandler"
 
 Meningen er jo, at hvis man har sat ON ERROR RESUME NEXT, så har man
 selv overtaget "ansvaret" for fejl-håndteringen.
 Og så må man på passende steder indsætte et check - fx:
 <%
 Select Case Err.Number
  Case 0
   ' Alt er godt
  Case 53
   ' File Not Found
  Case Else
   ' Noget andet
 End Select
 %>
 
 I hvert Case kan man så kalde en sub eller hvad man ellers lyster, som
 fx smider en venlig fejlmeddelelse til bruger og/eller en mail til
 webmaster (eller log) og/eller sørger for at afslutte igangværende ting.
 
 Det er nok mest relevant med fejlcheck, når man kalder filsystemet, en
 database eller andre "eksterne" ting.
 
 
 Mvh. Jørn
 
 -- 
 Jørn Andersen,
 Brønshøj
  
            
             |   |   
            
        
 
            
         
           Jørn Andersen (04-06-2009) 
         
	
            | Kommentar Fra : Jørn Andersen | 
  Dato :  04-06-09 05:30 |  
  |  
 
            On Mon, 01 Jun 2009 17:21:09 +0200, Rune Jensen
 <runeofdenmark@gmail.com> wrote:
 >Jeg er - klog af skade som man siger - ved at lære lidt om error handling.
 Det er vi nok nogen, der burde bruge noget mere   
>Nu har jeg læst
 > http://www.aspdev.org/articles/asp-error-handling/
>
 >Og jeg synes, det er en rigtig god idé den med, at man kan sende en mail 
 >til webmaster automatisk, hvis der er fejl på siden.
 >
 >Jeg har dog nogle spøørgsmå i den forbindelse.
 >
 >Jeg vil gerne lave sådan et script, men vil også gerne være sikker på, 
 >jeg gør det rigtigt.
 >
 >Men jeg er i tvivl om, om error-handleren tjekker for fejl linært eller 
 >"løbende".
 Den forstår jeg ikke - ?
 >Hvad jeg mener er, skal man have fejltjekket ind hvert sted, hvor der 
 >kan opstå fejl
 Det kommer an på, hvad formålet med fejlhåndteringen er.
 Hvis du fx skal registrere en brugers input i en database (fx en ordre),
 så giver det god mening at checke, om der er fejl, når du åbner
 Connection-objektet, eller om SQL'en giver fejl.
 I modsat fald vil brugeren måske tro, at ordren er afgivet, selv om det
 ikke er tilfældet.
 Hvis du "bare" vil registrere om der i det hele taget har været fejl
 under script-afviklingen, kan du nøjes med at checke, inden du evt. igen
 sætter On Error Goto 0 - fx:
 <%
 On Error Resume Next
  ' En masse kode, som muligvis kan give fejl
 If Err.Number <> 0 Then
  ' Noget fejl-rutine
 End If
 On Error Goto 0
 %>
 >Håber, spørgsmålet er forståeligt;)
 Ved ikke helt ...
 Good luck!
 -- 
 Jørn Andersen,
 Brønshøj
            
              |   |   
            
        
 
            
         
           Rune Jensen (05-06-2009) 
         
	
            | Kommentar Fra : Rune Jensen | 
  Dato :  05-06-09 23:59 |  
  |   
            Jørn Andersen skrev:
 
 >> Håber, spørgsmålet er forståeligt;)
 > 
 > Ved ikke helt ...
 
 Hvis der når man har rettet, sker utilsigtede ting andre steder i scriptet.
 
 Lad os sige, jeg retter øverst i dokumentet, men at det medfører en fejl 
 senere, som jeg ikke opdager. En catchall fejlrutine vil opfange denne 
 fejl, og med det samme sende en mail (f.eks.).
 
 Jeg overvejede en løsning med fjernovervågning af websted. Men siden jeg 
 kører med en del brugerafhængigt script (bl.a. IP-tjek), og eftersom der 
 jo også kan opstå fejl ved POST, er det for det første ikke sikkert en 
 sådan overvågnning vil fange fejlen (alt andet end 200 OK), og for det 
 andet, så vil det kræve load, omend ikke meget på serveren.
 
 Derfor overvejede jeg en fejlrutine, som "overvåger" selve scriptet 
 "ikke-lineært" og opfanger fejlen, som derefter udfører en 
 fejludskrivning i én selvstændig function/subrutine til brugeren og 
 sender en mail til webmaster.
 
 Med ikke-lineært mener jeg derfor en rutine, som virker som Javascripts 
 on- f.eks. onclick, som opfanger alle museklik uafhængigt af resten af 
 scriptet, som man derefter kan behandle ét sted.
 
 Det er tydeligvis ikke muligt at lave.. og en fejlrutine, som skal 
 installeres alle steder, det kan gå galt, det er selvfølgelig nok 
 rekommenderet, men også mere besværligt.
 
 
 MVH
 Rune Jensen
  
            
             |   |   
            
        
 
            
         
            Leif Neland (06-06-2009) 
         
	
            | Kommentar Fra : Leif Neland | 
  Dato :  06-06-09 00:06 |  
  |  
 
            Rune Jensen skrev:
 > 
 > Derfor overvejede jeg en fejlrutine, som "overvåger" selve scriptet 
 > "ikke-lineært" og opfanger fejlen, som derefter udfører en 
 > fejludskrivning i én selvstændig function/subrutine til brugeren og 
 > sender en mail til webmaster.
 > 
 > Med ikke-lineært mener jeg derfor en rutine, som virker som Javascripts 
 > on- f.eks. onclick, som opfanger alle museklik uafhængigt af resten af 
 > scriptet, som man derefter kan behandle ét sted.
 > 
 > Det er tydeligvis ikke muligt at lave.. og en fejlrutine, som skal 
 > installeres alle steder, det kan gå galt, det er selvfølgelig nok 
 > rekommenderet, men også mere besværligt.
 > 
 Læste du ikke mit indlæg fra 02-06-2009 01:31?
 Jeg har gjort som beskrevet her: 
 http://classicasp.aspfaq.com/general/how-do-i-log/track-asp-errors-on-my-web-site.html 
Her er et eksempel på en fejlmeddelelse, der er gemt i databasen:
 d
      176412
 dt
      05-06-2009 09:50:01
 url
      http://www.***.dk/print.asp
aspFile
      /config/config.asp
 aspLine
      3
 aspColumn
      4
 errDesc
      Name redefined
 errNumber
      0x800A0411
 errLine
      DIM Database,ParentId
 ip
      66.249.65.71
 ua
      Mozilla/5.0 (compatible; Googlebot/2.1; 
 + http://www.google.com/bot.html)
method
      GET
 data
      id=12189
            
              |   |   
            
        
 
            
         
             Rune Jensen (06-06-2009) 
         
	
            | Kommentar Fra : Rune Jensen | 
  Dato :  06-06-09 07:19 |  
  |  
 
            Leif Neland skrev:
 > Rune Jensen skrev:
 >>
 >> Derfor overvejede jeg en fejlrutine, som "overvåger" selve scriptet 
 >> "ikke-lineært" og opfanger fejlen, som derefter udfører en 
 >> fejludskrivning i én selvstændig function/subrutine til brugeren og 
 >> sender en mail til webmaster.
 > Læste du ikke mit indlæg fra 02-06-2009 01:31?
 > Jeg har gjort som beskrevet her: 
 >  http://classicasp.aspfaq.com/general/how-do-i-log/track-asp-errors-on-my-web-site.html 
<CLIP: fejldump>
 En elegant løsning, ja. Men så vidt jeg kan se, kræver det, at man har 
 installeret IIS, som jeg ikke har..
 Der står så, at ASP henter sine fejlsider på ROOT/[fejlkode].asp. Men 
 opretter jeg f.eks. en 404.asp i roden, bliver den ikke hentet, hvis en 
 side ikke findes. Jeg får en standard fejlside.
 MVH
 Rune Jensen
            
              |   |   
            
        
 
            
         
              Leif Neland (06-06-2009) 
         
	
            | Kommentar Fra : Leif Neland | 
  Dato :  06-06-09 07:32 |  
  |   
            Rune Jensen skrev:
 
 > 
 > <CLIP: fejldump>
 > 
 > En elegant løsning, ja. Men så vidt jeg kan se, kræver det, at man har 
 > installeret IIS, som jeg ikke har..
 > 
 
 Hvilken webserver bruger du så?
 Mig bekendt er der kun Microsofts IIS, der kan køre asp.
 
 Sun Java System Active Server Pages 4.0, tidligere chillisoft asp:
 "Sun Java System Active Server Pages has entered its End Of Life (EOL)
 Users of Sun Active Server Pages are encouraged to begin evaluating 
 alternative server-side scripting technologies."
 
 > Der står så, at ASP henter sine fejlsider på ROOT/[fejlkode].asp. Men 
 > opretter jeg f.eks. en 404.asp i roden, bliver den ikke hentet, hvis en 
 > side ikke findes. Jeg får en standard fejlside.
 > 
 Du skal også ind i serveropsætningen (for den virtuelle 
 server/"webhotelværelse") og angive at der skal bruges en anden 
 500-fejlside.
 
 Leif
  
            
             |   |   
            
        
 
            
         
               Rune Jensen (06-06-2009) 
         
	
            | Kommentar Fra : Rune Jensen | 
  Dato :  06-06-09 11:46 |  
  |   
            Leif Neland skrev:
 > Rune Jensen skrev:
 > 
 >>
 >> <CLIP: fejldump>
 >>
 >> En elegant løsning, ja. Men så vidt jeg kan se, kræver det, at man har 
 >> installeret IIS, som jeg ikke har..
 >>
 > 
 > Hvilken webserver bruger du så?
 > Mig bekendt er der kun Microsofts IIS, der kan køre asp.
 
 OK, den var ikke formuleret vel ;)
 
 Jeg har ikke IIS på min egen PC, hvorfor jeg heller ikke kan køre 
 programmet som beskrevet. IIS kræver en Win "professional", som er 
 dyrere end normal windows, men ikke bedre.
 
 
 >> Der står så, at ASP henter sine fejlsider på ROOT/[fejlkode].asp. Men 
 >> opretter jeg f.eks. en 404.asp i roden, bliver den ikke hentet, hvis 
 >> en side ikke findes. Jeg får en standard fejlside.
 >>
 > Du skal også ind i serveropsætningen (for den virtuelle 
 > server/"webhotelværelse") og angive at der skal bruges en anden 
 > 500-fejlside.
 
 Hvis man skal ind i IIS og sætte et kryds et sted, kan jeg ikke gøre 
 det, nej.
 
 Men det efterlader mig vel som jeg forstår det med eneste mulighed, som 
 er at få adgang til en PC med IIS, og det kan jeg nok, man kender jo 
 altid én. Gør heller ikke så meget, hvis det bare er for at lægge 
 fejlsider ind og rode lidt i IIS.
 
 
 
 MVH
 Rune Jensen
  
            
             |   |   
            
        
 
            
         
                Allan Vebel (06-06-2009) 
         
	
            | Kommentar Fra : Allan Vebel | 
  Dato :  06-06-09 20:05 |  
  |  
 
            Rune Jensen skrev:
 > Men det efterlader mig vel som jeg forstår det
 > med eneste mulighed, som er at få adgang til
 > en PC med IIS, og det kan jeg nok, man kender
 > jo altid én.
 Ja, det har jeg.
 -- 
 Allan Vebel
 Skal vi mødes?
 http://runejensen.dk/webdesign_group_meeting/ 
            
             |   |   
            
        
 
            
         
            Jørn Andersen (06-06-2009) 
         
	
            | Kommentar Fra : Jørn Andersen | 
  Dato :  06-06-09 02:03 |  
  |  
 
            On Sat, 06 Jun 2009 00:59:13 +0200, Rune Jensen
 <runeofdenmark@gmail.com> wrote:
 >Jørn Andersen skrev:
 >
 >>> Håber, spørgsmålet er forståeligt;)
 >> 
 >> Ved ikke helt ...
 >
 >Hvis der når man har rettet, sker utilsigtede ting andre steder i scriptet.
 >
 >Lad os sige, jeg retter øverst i dokumentet, men at det medfører en fejl 
 >senere, som jeg ikke opdager. En catchall fejlrutine vil opfange denne 
 >fejl, og med det samme sende en mail (f.eks.).
 Hvis jeg fortsår dig rigtigt, så gør du netop det med:
 If Err.Number <> 0 Then ...
 placeret ret langt nede i scriptet.
 >Jeg overvejede en løsning med fjernovervågning af websted. Men siden jeg 
 >kører med en del brugerafhængigt script (bl.a. IP-tjek), og eftersom der 
 >jo også kan opstå fejl ved POST,
 Til POST og anden input ville jeg ikke bruge den form for
 fejlhåndtering, men i stedet input-validering. Input-validering bør
 laves, så den tager højde for alle input.
 Der er mange ting, der kan gå galt under afvikling af et script, og de
 skal ikke alle behandles på samme måde - fx:
 Syntax-fejl: bør i alle tilfælde kunne luses ud ved at teste scriptet,
 inden det sættes i drift. (fx Option Explicit er meget nyttig).
 Input-fejl: Brug validering, der kun tillader lovligt input.
 Databasekald: Brug ADO fejlhåndtering
 Fil-åbning o.l.: Brug ASP-fejlhåndtering
 osv.
 Der er altid noget cost-benefit-overvejelse med, når man skal lave
 fejlhåndtering (og her tænker jeg ikke ikke kun på programmør-tid).
 I princippet kunne man lave fejlcheck for næsten hver eneste kode-linie,
 men det ville dels blive meget omfattende, dels give langsom afvikling.
 Jeg mener man "bør" lave fejlhåndtering, når der kaldes eksternt, fx
 hvis man åbner filer eller kalder databaser - det er ydre ting, som kan
 ændre sig, og som scriptet selv ikke har indflydelse på.
 Andre ting vil man nogle gange lave fejlcheck på, andre gange ikke:
 Vil man fx checke om et billede, der skal bruges i den resulterende HTML
 (<img src ...>), eksisterer på serveren? Tjah, det afhænger vel af, hvor
 vigtigt billedet er for slut-resultatet. Det giver jo typisk ikke fejl
 hverken i ASP eller VBScript, men bare et grimt kryds i browseren.
 Vil man checke om Server.CreateObject faktisk danner et objekt
 (komponenten kunne være blevet afinstalleret eller scriptet flyttet til
 anden server, hvor komponenten ikke er installeret)?
 Det vil oftest være en god idé at lave fejlcheck, da det typisk stopper
 scriptet, fordi efterfølgende arbejde med objektet ikke er muligt.
 Men ofte gør jeg det ikke, fordi fejlen næsten kun opstår, når jeg selv
 har været i gang med at ændre noget - og så opdager jeg det typisk med
 det samme.
 Du vil sikkert komme til andre konklusioner, men overvej, hvad det er du
 vil opnå   
Good luck!
 -- 
 Jørn Andersen,
 Brønshøj
            
              |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |