Toon posts:

[asp] IIS loopt vast na vaak uitvoeren functie

Pagina: 1
Acties:
  • 61 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo,

Ik heb hier een dedicated w2k webserver met een aantal sites erop.
Ik heb een functie gemaakt die van een (externe) templatefile en een (lokale) contentfile een index.asp maakt door stukken code samen te voegen.
Deze functie stuurt aan het einde een email met een rapport erin.

Nu is het zo dat als ik die functie een keer of 20 achter elkaar run, IIS vastloopt!

Tijdens het achter elkaar runnen (testen, mag een paar minuten tussen zitten...) krijg ik ineens geen response meer, terwijl normaliter ook het rapport op het scherm moet komen.
De eerste keer dat ik niets op het scherm zie krijg ik vaak nog wel het rapport-emailtje.

Ongeveer een kwartier later loopt vaak de hele IIS vast! (erg!)

Dit zegt mij dat deze functie dingen doet die niet goed zijn, maar ik heb geprobeerd zo netjes mogelijk te programmeren.

Ik ben ten einde raad, want het script moet draaien en ik heb geen idee wat de oorzaak voor de serverinstabiliteit zou kunnen zijn.

Zou iemand eens naar de code kunnen kijken en mij vertellen of er echt 'vieze' of slechte dingen in staan?

Alvast ontzettend bedankt.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
<%
Function MakeFile(TemplateFile,ContentFile,OutputFile)
    
    'Hier staan de emailadressen waarnaar gemaild wordt...
    Dim EmailAdressen: EmailAdressen = "ik@domein.nl"
    
    Dim objXML, objTextFile, TextFile, EXT_Template, CDG_Content, Line, Mailer, ResultFile, blnError, Subject, BestandsNaam
    Dim CharBeginOnLoad, CharEindOnLoad, OutPutString, CharBeginCSS
    Dim BeginVBScript, BeginCSS, BeginJavaScript, BeginOnLoad, BeginContent
    Dim VBScriptExist, CSSExist, JavaScriptExist, OnLoadExist, ContentExist
    Dim VBScript, CSS, JavaScript, OnLoad, Content
    Dim Temp1, Temp2, Temp3, Temp4, Temp5, Temp6
    Dim Report

    'Deze variabelen moeten standaard False zijn (netjes)...
    blnError = False
    BeginVBScript = False
    BeginCSS = False
    BeginJavaScript = False
    BeginOnLoad = False
    BeginContent = False
    VBScriptExist = False
    CSSExist = False
    JavaScriptExist = False
    OnLoadExist = False
    ContentExist = False
    
    'Bestandsnaam van outputfile extraheren voor in afzender email en titel van Report...   
    BestandsNaam = Right(OutputFile,Len(OutputFile) - InstrRev(OutPutFile,"\"))
    
    'Deze variabele krijgt een error-report in html-formaat als waarde...
    Report = "<html><head><title>Merge Report</title></head><body><font face=""arial"">Report Merge <strong>" & Request.ServerVariables("HTTP_HOST") & "&nbsp;<font color=""green"">(" & BestandsNaam & ")</font></strong><br /><hr /><br />" & vbNewLine
    
    'Via XML-object de templatefile inlezen...
    Report = Report & Now() & " - " & TemplateFile & " inlezen...<br /><br />" & vbNewLine
    Set objXML = Server.CreateObject("Microsoft.XMLHTTP")
    objXML.Open "GET", TemplateFile, False
    objXML.Send
    EXT_Template = objXML.ResponseText
    'ErrorHandling voor het inlezen van de Template
    If Instr(EXT_Template, "HTTP Error 404") > 0 Then
        blnError = True
        Report = Report & "<strong><font color=""red"">" & Now() & " - Fout bij inlezen Templatefile! (404-error)</font></strong><br />" & vbNewLine
    End If
    
    'Het Contentbestand inlezen...
    Report = Report & Now() & " - " & ContentFile & " inlezen...<br /><br />" & vbNewLine
    Set objTextFile = Server.CreateObject("Scripting.FileSystemObject")
    On Error Resume Next 'Vanaf hier kan het fout gaan als bronbestand niet beschikbaar is. Daarom even On Error Resume Next...
    Set CDG_Content = objTextFile.OpenTextFile(ContentFile, 1, 0)
    'ErrorHandling voor het inlezen van het Contentbestand
    If Err.Number <> 0 Then
        blnError = True
        Report = Report & "<strong><font color=""red"">" & Now() & " - Fout bij inlezen Contentfile!</font></strong><br />" & vbNewLine
        Report = Report & "<strong>FoutCode:</strong> " & Err.Number & "<br /><strong>Bron:</strong> " & Err.Source & "<br /><strong>Description</strong> : " & Err.Description & "<br /><strong>HelpContext:</strong> " & Err.HelpContext & "<br /><br />" & vbNewLine
        Err.Clear
    End If
    On Error Goto 0
    
    'Bronbestand doorlopen en alle benodigde delen in variabelen opslaan zodat ze later in de template ingevoegd kunnen worden...
    If blnError = False Then 'Als er een errorsituatie is geweest heeft dit geen zin meer...
        Report = Report & Now() & " - " & ContentFile & " doorlopen...<br /><br />" & vbNewLine
        Do Until CDG_Content.AtEndOfStream
            Line = CDG_Content.ReadLine
            'VBScript opzoeken en in variabele plaatsen...
            If Instr(Line, "<!-- BEGIN VBSCRIPT -->") > 0 Then
                BeginVBScript = True
                VBSCriptExist = True
            End If
            If BeginVBScript = True Then
                VBScript = VBScript & Line & vbNewLine
            End If
            If Instr(Line, "<!-- EINDE VBSCRIPT -->") > 0 Then
                BeginVBScript = False
            End If
            'CSS opzoeken en in variabele plaatsen...
            If Instr(Line, "<!-- BEGIN CSS -->") > 0 Then
                BeginCSS = True
                CSSExist = True
            End If
            If BeginCSS = True Then
                CSS = CSS & Line & vbNewLine
            End If
            If Instr(Line, "<!-- EINDE CSS -->") > 0 Then
                BeginCSS = False
            End If
            'JavaScript opzoeken en in variabele plaatsen...
            If Instr(Line, "<!-- BEGIN JAVASCRIPT -->") > 0 Then
                BeginJavaScript = True
                JavaScriptExist = True
            End If
            If BeginJavaScript = True Then
                JavaScript = JavaScript & Line & vbNewLine
            End If
            If Instr(Line, "<!-- EINDE JAVASCRIPT -->") > 0 Then
                BeginJavaScript = False
            End If
            'OnLoad opzoeken en in variabele plaatsen...
            If Instr(Line, "<!-- BEGIN ONLOAD -->") > 0 Then
                BeginOnLoad = True
                OnLoadExist = True
            End If
            If BeginOnLoad = True Then
                CharBeginOnLoad = Instr(Line, "<!-- BEGIN ONLOAD -->") + 21
                CharEindOnLoad = InstrRev(Line, "<!-- EINDE ONLOAD -->")
                OnLoad = Mid(Line,CharBeginOnLoad,(CharEindOnLoad - (CharBeginOnLoad)))
            End If
            If Instr(Line, "<!-- EINDE ONLOAD -->") > 0 Then
                BeginOnLoad = False
            End If
            'Main Content opzoeken en in variabele plaatsen...
            If Instr(Line, "<!-- BEGIN CONTENT -->") > 0 Then
                BeginContent = True
                ContentExist = True
            End If
            If BeginContent = True Then
                Content = Content & Line & vbNewLine
            End If
            If Instr(Line, "<!-- EINDE CONTENT -->") > 0 Then
                BeginContent = False
            End If
        Loop
        CDG_Content.Close
        
        If VBScriptExist = False Then
            blnError = True
            Report = Report & Now() & "<font color=""red""> - Er is geen VBScript-sectie gevonden!</font><br />" & vbNewLine
        End If
        If CSSExist = False Then
            blnError = True
            Report = Report & Now() & "<font color=""red""> - Er is geen CSS-sectie gevonden!</font><br />" & vbNewLine
        End If
        If JavaScriptExist = False Then
            blnError = True
            Report = Report & Now() & "<font color=""red""> - Er is geen JavaScript-sectie gevonden!</font><br />" & vbNewLine
        End If
        If OnLoadExist = False Then
            blnError = True
            Report = Report & Now() & "<font color=""red""> - Er is geen Onload-sectie gevonden!</font><br />" & vbNewLine
        End If
        If ContentExist = False Then
            blnError = True
            Report = Report & Now() & "<font color=""red""> - Er is geen Content-sectie gevonden!</font><br /><br />" & vbNewLine
        End If

    End If

    'VBScript invoegen in Template...
    If blnError = False Then
        Report = Report & Now() & " - VBScript invoegen...<br />" & vbNewLine
        OutPutString = VBScript & vbNewLine & EXT_Template
    End If
    
    'CSS Invoegen in Template...
    If blnError = False Then
        Report = Report & Now() & " - CSS invoegen..."
        CharBeginCSS = Instr(LCase(OutputString), "<link rel=""stylesheet""")
        If CharBeginCSS > 0 Then 'Deze tekst staat in het template-bestand (dus er is al een stylesheet). We plaatsen hem vlak na de stylesheet die al in de template staat.
            Report = Report & " <font color=""green"">(tweede stylesheet)</font><br />" & vbNewLine
            Temp1 = Left(OutPutString, Instr(LCase(OutPutString), "<head>") + 5)
            Temp2 = Mid(OutPutString, Instr(LCase(OutPutString), "<head>") + 6)
            OutPutString = Temp1 & vbNewLine & CSS & Temp2
        Else 'Er is geen stylesheet aanwezig in het template-bestand: we plaatsen de stylesheet in de <head>.
            Report = Report & " <font color=""red"">(eerste stylesheet! Template is veranderd.)</font><br />" & vbNewLine
            Temp1 = Left(OutPutString, Instr(LCase(OutPutString), "</head>") - 1)
            Temp2 = Mid(OutPutString, Instr(LCase(OutPutString), "</head>"))
            OutPutString = Temp1 & vbNewLine & CSS & Temp2
        End If
    End If
    
    'JavaScript invoegen in Template...
    If blnError = False Then
        Report = Report & Now() & " - JavaScript invoegen...<br />" & vbNewLine
        Temp1 = Left(OutPutString, Instr(LCase(OutPutString), "<head>") + 5)
        Temp2 = Mid(OutPutString, Instr(LCase(OutPutString), "<head>") + 6)
        OutPutString = Temp1 & vbNewLine & JavaScript & Temp2
    End If
    
    'Onload invoegen in Template...
    If blnError = False Then
        Report = Report & Now() & " - OnLoad invoegen..."
        Temp1 = Left(OutPutString, Instr(LCase(OutPutString), "<body") - 1) 'Pagina tot aan "<body"...
        Temp2 = Mid(OutPutString, Instr(LCase(OutPutString), "<body")) 'Pagina inclusief "<body sdfsdf>" tot einde...
        Temp3 = Left(Temp2, Instr(Temp2, ">")) 'Complete "<body sdfsdf>" regel uit Template...
        Temp2 = Mid(Temp2,Instr(Temp2, ">") + 1) 'Pagina na "<body>" tot einde...
        If Instr(LCase(Temp3), "onload") > 0 Then 'Als er in de <body> regel een onload staat...
            Report = Report & " <font color=""green"">(toegevoegd aan bestaande onLoad)</font><br />" & vbNewLine
            Temp5 = Left(Temp3, Instr(LCase(Temp3), "onload=""") + 7)
            Temp6 = Mid(Temp3, Instr(LCase(Temp3), "onload=""") + 8)
            Temp4 = Temp5 & OnLoad & Temp6
        Else 'Als deze er niet is...
            Report = Report & " <font color=""red"">(onLoad geheel aangemaakt! Template veranderd.)</font><br />" & vbNewLine
            Temp4 = Replace(Temp3, ">", " onload=""" & OnLoad & """>") 
        End If
        OutPutString = Temp1 & vbNewLine & Temp4 & vbNewLine & Temp2
    End If
    
    'Content Invoegen in Template...
    If blnError = False Then
        Report = Report & Now() & " - Main Content invoegen...<br /><br />" & vbNewLine
        OutPutString = Replace(OutPutString, "<!-- Please insert your main content here -->", Content)
    End If
    
    'Outputbestand wegschrijven...
    If blnError = False Then
        Report = Report & Now() & " - " & OutPutFile & " wegschrijven...<br /><br />" & vbNewLine
        On Error Resume Next 'Als er bijv. rechten op de webserver veranderd zijn etc. kan het fout gaan...
        Set ResultFile = objTextFile.CreateTextFile(OutputFile)
        ResultFile.Write OutPutString
        ResultFile.Close
        'ErrorHandling voor het wegschrijven van het outputbestand...
        If Err.Number <> 0 Then
            blnError = True
            Report = Report & "<strong><font color=""red"">" & Now() & " - Fout bij wegschrijven outputfile!</font></strong><br />" & vbNewLine
            Report = Report & "<strong>FoutCode:</strong> " & Err.Number & "<br /><strong>Bron:</strong> " & Err.Source & "<br /><strong>Description</strong> : " & Err.Description & "<br /><strong>HelpContext:</strong> " & Err.HelpContext & "<br /><br />" & vbNewLine
            Err.Clear
        End If
        On Error Goto 0
    End If
    
    'Links toevoegen aan report...
    Report = Report & Now() & " - Mergeproces be&euml;indigd<br /><br /><hr /><br />" & vbNewLine
    Report = Report & "Klik hier om nogmaals te mergen: <a href=""http://" & Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("SCRIPT_NAME") & """>http://" & Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("SCRIPT_NAME") & "</a><br />" & vbNewLine
    Report = Report & "Klik hier om output te bekijken: <a href=""http://" & Request.ServerVariables("HTTP_HOST") & """>http://" & Request.ServerVariables("HTTP_HOST") & "</a><br>" & vbNewLine
    Report = Report & "</font></body></html>"
    
    'Mailtje met report versturen...
    If blnError = True Then
        Subject = "Error Report " & Now()
    Else
        Subject = "Success Report " & Now()
    End If
    
    On Error Resume Next
    Set Mailer = Server.CreateObject("ocxQmail.ocxQmailCtrl.1")
    Mailer.XHeader "Content-Type", "text/html; charset=""iso-8859-1"""
    Mailer.Q "mail.domein.nl", "Merge " & Request.ServerVariables("HTTP_HOST") & "(" & BestandsNaam & ")", "info@domein.nl", "", "", EmailAdressen, "", "", "", Subject, Report
    If Err.Number <> 0 Then
        Report = Report & "<strong><font color=""red"">" & Now() & " - Fout bij aanmaken van ocxQmail-object!</font></strong><br />" & vbNewLine
        Report = Report & "<strong>FoutCode:</strong> " & Err.Number & "<br /><strong>Bron:</strong> " & Err.Source & "<br /><strong>Description</strong> : " & Err.Description & "<br /><strong>HelpContext:</strong> " & Err.HelpContext & "<br /><br />" & vbNewLine
        Err.Clear
    End If
    On Error Goto 0

    'Report op scherm tonen...
    Response.Write "<p>" & Report & "</p><br />" & vbNewLine
    
    'Alle objecten afsluiten...
    Set Mailer = Nothing
    Set objTextFile = Nothing
    Set objXML = Nothing
    
    'Alle variabelen leegmaken...
    EmailAdressen = ""
    TextFile = ""
    EXT_Template = ""
    CDG_Content = ""
    Line = ""
    ResultFile = ""
    blnError = ""
    Subject = ""
    BestandsNaam = ""
    CharBeginOnLoad = ""
    CharEindOnLoad = ""
    OutPutString = ""
    CharBeginCSS = ""
    BeginVBScript = ""
    BeginCSS = ""
    BeginJavaScript = ""
    BeginOnLoad = ""
    BeginContent = ""
    VBScriptExist = ""
    CSSExist = ""
    JavaScriptExist = ""
    OnLoadExist = ""
    ContentExist = ""
    VBScript = ""
    CSS = ""
    JavaScript = ""
    OnLoad = ""
    Content = ""
    Temp1 = ""
    Temp2 = ""
    Temp3 = ""
    Temp4 = ""
    Temp5 = ""
    Temp6 = ""
    Report = ""

End Function
%>

<%
MakeFile "http://www.domein1.nl/pagina1.html","D:\InetPub\wwwroot\domein2.nl\pagina2.asp","D:\InetPub\wwwroot\domein2.nl\index.asp"
%>


En dit doet precies wat ik bedoel. Waarom zou IIS 5 dit nu geen 25 keer achter elkaar kunnen doen?

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Hou het geheugengebruik eens in de gaten.
En waar loopt hij op vast dan, post alleen relevante code.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 24-05 21:13

mulder

ik spuug op het trottoir

Doe je een request op de zelfde virutual/website?

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Ik post op dezelfde server (fysiek)/website.

En ik weet absoluut niet waar het fout gaat, dus voor mij is alle code relevant.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 24-05 21:13

mulder

ik spuug op het trottoir

Wat zou kunnen helpen (weet niet meer precies waar ik het vandaan heb, ik had iets dergelijks) is een 2e virtual aanmaken, en de Application Protection op High zetten. En dan daar de posts/request heen doen.

Edit: en je zou Http Keep Alives nog uit kunnen zetten

[ Voor 24% gewijzigd door mulder op 11-06-2004 13:34 ]

oogjes open, snaveltjes dicht


  • pasz
  • Registratie: Februari 2000
  • Laatst online: 20-03 22:01
Komen er geen gekke meldingen in je Event Viewer tevoorschijn als hij vast loopt ?

woei!


  • party42
  • Registratie: Oktober 2000
  • Laatst online: 22-05 17:39
daarnaast

heb je zelf al gedebugged? weet je welke regel het specifiek mis gaat? probeer 'es wat uit te commentarieren... etc

Everyday's an endless stream, of cigarettes and magazines...


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Ja doei, 295 regels code debuggen mag je zelf doen. Kom maar terug als je het probleem 'iets' verder geisoleerd hebt :X

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.