Сбой сценария загрузки FileSystemObject в Windows Server 2008

Мы перешли с Windows Server 2003 на Windows Server 2008, и наш сценарий FileSystemObject больше не работает. Всякий раз, когда мы пытаемся скачать файл размером 10-12 Мб, получается короткая загрузка, то есть: иногда получается только 15, 19 или 22 Мб из файла 26 Мб.

Сервер настроен на загрузку более 40 МБ без проблем, и это было подтверждено прямыми загрузками по http в файл на корневом уровне ... тесты прямой загрузки на 32 МБ проходят успешно в 100% случаев. Однако нам нужно обеспечить загрузку файлов, которые хранятся ниже root, поэтому нам нужно использовать скрипт FSO.

Мы успешно использовали этот сценарий в течение нескольких лет на Windows Server 2003, но в последнее время мы не можем получить полную загрузку с Windows Server 2008.

strChunkSize = 1024000*1    
strDocFile = "someDocument.doc"
FPath = "C:\data\" & strDocFile
Response.Buffer = True
Response.Clear

Set adoStream = CreateObject("ADODB.Stream") 
adoStream.Open() 
adoStream.Type = 1 

on error resume next

Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fl = fso.GetFile(FPath)
intFilelength = fl.size

adoStream.LoadFromFile(FPath)

Response.AddHeader "Content-Disposition", "attachment; filename=" & fl.name
Response.AddHeader "Content-Length", intFilelength
Response.AddHeader "Accept-Ranges", "bytes"
Response.ContentType = "application/octet-stream"

For i = 0 To adoStream.Size
i = i + strChunkSize
Response.BinaryWrite(adoStream.Read(strChunkSize))
Response.Flush
Next

adoStream.Close
Set adoStream = Nothing 

Я тщательно изучил эту тему в другом месте, и каждый пример сценария загрузки FSO дает сбой, даже при использовании фрагментов для любого файла размером более 4 МБ.


person WilliamK    schedule 08.08.2013    source источник
comment
Могут ли на это повлиять настройки времени ожидания в IIS?   -  person WilliamK    schedule 08.08.2013


Ответы (1)


Проблема в этом случае заключалась в тайм-ауте сценария, который по умолчанию составляет всего 90 секунд, поэтому большие файлы прекращались. Чтобы решить эту проблему, я добавил некоторый скрипт, чтобы установить время ожидания, пропорциональное загрузке, и разрешить медленные тренеры...

if strDocFileSize <> "" then
strScriptTimeout = (strDocFileSize/1024000)*40
else
strScriptTimeout = 30000
end if

Server.ScriptTimeout = strScriptTimeout
person WilliamK    schedule 08.08.2013