Toon posts:

[ASP] Uploaden resulteert in "service unavailable"

Pagina: 1
Acties:

Verwijderd

Topicstarter
Sinds enkele weken werkt een stuk script niet meer. Voor het uploaden van bestanden maak ik een file aan op de server, en schrijf hier byte voor byte in weg. Dit heeft nooit tot problemen geleid.

Nu liep IIS6.0 vast op bestanden die groter zijn dan 200KB. Door een aanpassing in metabase.xml accepteert IIS6.0 nu bestanden tot 10MB. Bij kleine bestanden werkt alles naar behoren, maar een bestand van 246KB levert rare problemen op.

Wanneer ik op de server kijk wordt het hele bestand gewoon weggeschreven, maar mijn script geeft aan nog bezig te zijn. Wanneer ik ook aangeef dat het script na 2400000 Bytes een response.write moet uitvoeren, kan ik uren wachten.

Na vele keren testen klapt ook regelmatig de application pool, dit resulteert in een "Service unavailable" melding.

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

is het niet een beter idee om met binaryWrite in 1 keer weg te schrijven of gebruik te maken van een component dat gemaakt is door derden? Er is best een aantal goede componenten op de markt hiervoor.

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • cannibal
  • Registratie: Maart 2001
  • Laatst online: 10:18
Uploaden met ASP is sinds de .NET versie geen enkel probleem meer. Hier is dan ook echt niet zomaar een 3rd party-onderdeel voor nodig.

Ik zou vooral even goedkijken of je alle streams goed afsluit enzo.
(eventueel volledig streams gebruiken ipv byte-operaties.)
en anders wat try-catchen en kijken of er ergens iets raars fout gaat, zoals een volle schijf of andere schijnbaar ongerelateerde zaken.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
cannibal74 schreef op maandag 23 januari 2006 @ 13:12:
Uploaden met ASP is sinds de .NET versie geen enkel probleem meer. Hier is dan ook echt niet zomaar een 3rd party-onderdeel voor nodig.

Ik zou vooral even goedkijken of je alle streams goed afsluit enzo.
(eventueel volledig streams gebruiken ipv byte-operaties.)
en anders wat try-catchen en kijken of er ergens iets raars fout gaat, zoals een volle schijf of andere schijnbaar ongerelateerde zaken.
ASP.NET <> ASP

Dit is belangrijk om te onthouden. Het hele mechanisme is anders en upgraden van ASP naar ASP.NET is niet triviaal.

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15:52
Gebruik je nu ASP of ASP.NET?

uploaden van bestanden via ASP.NET kan zeker wel voor problemen zorgen als je geen 3th party component gebruikt omdat (ik weet niet of het nu aan IIS ligt of aan het .NET framework) het gehele bestand in het geheugen word geladen voor er weg geschreven wordt. Ik geloof zelfs in het geheugen van de appl. pool.

Google maar eens wat dan kom je het probleem zeker tegen.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


Verwijderd

Topicstarter
Ik maak geen gebruik van ASP.NET maar ouderwets ASP :)
Heb nog geen oplossing gevonden...

  • kalechinees
  • Registratie: Mei 2005
  • Laatst online: 13-04 21:15
Welke code gebruik je voor het wegschrijven?
Waarom gebruik je geen ASPUpload? ik bedoel... binair wegschrijven van bytes is nou ook niet zo'n retestrakke oplossing :)

Verwijderd

Topicstarter
Ik gebruik een class die ik ooit op aspnl.com heb gevonden. Zoals je ziet zou ik na verloop van tijd de waarde "meep" op mijn scherm willen zien; na 199KB. Als ik op de server kijk dan is het bestand inderdaad 199KB en wordt er niks meer geupload, maar mijn pagina reageert verder helemaal niet. De tweede keer dat ik dit deed kreeg ik weer: "Service unavailable".

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim oUpload
Dim oFSO, oFile
Set oUpload = New FileUpload

Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.CreateTextFile(strPath & strFile)
' 251259
For i = 1 To LenB(oUpload.Value("bestand"))
    if i = 203776 then
        response.Write("Meep")
        response.End()
    end if
    oFile.Write Chr(AscB(MidB(oUpload.Value("bestand"), i, 1)))
Next

'Sluit het bestand en geef de objecten vrij
oFile.Close
Set oFile = Nothing

[ Voor 10% gewijzigd door Verwijderd op 24-01-2006 09:21 ]


  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

En als je nou response.flush doet ipv response.end?

Tevens is dit script een grote belasting voor je server, hij blijft loopen tot je volledige bestand binnen is, ik zou daar als hoster niet blij van worden.

Huur mij in als freelance SEO consultant!


  • kalechinees
  • Registratie: Mei 2005
  • Laatst online: 13-04 21:15
dit is geen flame maar ik vind het persoonlijk een nogal knullige oplossing....
Constante loop, gigantische server belasting :)

Bijna hetzelfde als je een do while not rs.eof gebruikt zonder movenext >:)

'k heb maar een oplossing voor je :)

3rd party!!

Verwijderd

Topicstarter
kalechinees schreef op dinsdag 24 januari 2006 @ 13:27:
dit is geen flame maar ik vind het persoonlijk een nogal knullige oplossing....
Constante loop, gigantische server belasting :)

Bijna hetzelfde als je een do while not rs.eof gebruikt zonder movenext >:)

'k heb maar een oplossing voor je :)

3rd party!!
Erg flauwe vergelijking, zonder movenext resulteert in een endless loop. Dat is hier totaal niet het geval.

  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 07-04 15:02

Dutch_guy

WYSIWYG

ASP upload of Dundas upload gebruiken.

Iedere goede ASP hoster heeft die wel geinstalleerd.

Kan je er ook nog een mooie voortgangsindicator bij plaatsen.

Hmm,las je post nog even. Host je op een eigen server ?

Dundas upload is in ieder geval gratis en werkt perfect.

[ Voor 28% gewijzigd door Dutch_guy op 24-01-2006 13:48 ]

Pay peanuts get monkeys !


  • kalechinees
  • Registratie: Mei 2005
  • Laatst online: 13-04 21:15
code:
1
2
3
4
5
6
7
For i = 1 To LenB(oUpload.Value("bestand"))
    if i = 203776 then
        response.Write("Meep")
        response.End()
    end if
    oFile.Write Chr(AscB(MidB(oUpload.Value("bestand"), i, 1)))
Next


Een loop 203776 uitvoeren noem ik wel degelijk 'bijna' oneindig. En dan hebben we het nog maar over een bestand van 200kb ....
Ik weet niet welk soort bestanden je upload maar 200kb is nog niet eens zo veel...

Stel dat je 200.000 loops nog niet veel vind. Bij 1MB zou je dan meer dan een miljoen loops draaien!
Ik denk niet dat dit de bedoeling is van automatiseren...

voorbeeldje van ASPupload (persits) :)
Form:
code:
1
2
3
   <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="upload.asp">
      <INPUT TYPE="FILE" SIZE="40" NAME="FILE1"><BR>
   <INPUT TYPE=SUBMIT VALUE="upload!">


upload.asp
code:
1
2
Set Upload = Server.CreateObject("Persits.Upload")
Upload.Save("c:\upload")

Verwijderd

Topicstarter
De loop is inderdaad wel erg overdreven 8)7

Ik heb een nieuwe class, geen component, gevonden die nu wel goed werkt. Dit is bovendien aan aanzienlijk stuk sneller :)

Toch blijf ik her een raar probleem vinden, want de loop opzich ging goed, het bestand werd gewoon geupload. Misschien inderdaad te maken met de response buffer die volloopt ofzo.

Bedankt allemaal

  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 07-04 15:02

Dutch_guy

WYSIWYG

Welke gebruik je nu dan ?

Pay peanuts get monkeys !

Pagina: 1