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.
En dit doet precies wat ik bedoel. Waarom zou IIS 5 dit nu geen 25 keer achter elkaar kunnen doen?
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") & " <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ë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?