У меня ужасное время, пытаясь найти причину ошибки при загрузке файла (размер файла не имеет значения) через HTTP в Windows 2012 R2 Essentials (IIS 8.5) веб сервер.
Приложение безупречно работает на Windows 2003 (IIS 6). Он также отлично работает на моем компьютере для разработки под управлением Windows 7. IIS 7.5
Поскольку IIS Manager для IIS 7.5 очень похож на IIS 8.5, у меня не было особых трудностей с настройкой моего веб-приложения ISAPI, но все, кроме загрузки файлов, работает нормально.
Сначала я проверил базовые вещи:
Другие вещи, которые я пробовал:
Когда на веб-сервер загружается большой файл, я вижу, что w3wp.exe (32-разрядный процесс) потребляет ЦП при загрузке файла. Проблема в том, что ошибка возникает еще до того, как какой-либо из моего кода приложения получит шанс для работы с загрузкой. Например:
// handle any HTTP POST
if (strcmp(spContext->GetRequestMethod(), "POST") == 0) {
// what was posted?
if (form == FILE_UPLOADED) {
// A file has been uploaded. Check it to make sure it is
// not corrupt and do what I need to do with it.
…
// I then prepare a JSON response:
m_HttpResponse.SetContentType("application/json; charset=UTF-8");
…
// Now send a reply to the client browser letting it know that the
// file was either successfully / unsuccessfully handled
…
Я предполагаю, что это проблема конфигурации IIS 8.5, поскольку эта проблема не возникает в IIS 7.5 или IIS 6.
Может ли кто-нибудь поделиться со мной своими мыслями о том, что может происходить? Спасибо!
ОБНОВИТЬ
Питер Хандорф посоветовал мне использовать функцию трассировки, поэтому я включил ее, и это «Сводка запроса»:
Url
http://www.fileuploads.tst:80/FileUpload.srf
App Pool
DefaultAppPool_classic
Authentication
anonymous
User from token
NT AUTHORITY\IUSR
Activity ID
{8000000F-0001-F800-B63F-84710C7967BB}
Site
8
Process
4652
Failure Reason
STATUS_CODE
Trigger Status
500
Final Status
500
Time Taken
0 msec
Ошибки и предупреждения Предупреждение о серьезности
Event
MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName
IsapiModule
Notification
EXECUTE_REQUEST_HANDLER
HttpStatus
500
HttpReason
Internal Server Error
HttpSubStatus
0
ErrorCode
The operation completed successfully.
(0x0)
ConfigExceptionInfo
this field is empty...nothing to display
После недели безумия я наконец нашел корень проблемы, оказалось, что это жесткий диск. Время от времени он издавал щелкающие звуки, но я подумал, что это не будет проблемой, поскольку я только оценивал Windows 2012.
В конце концов, Windows загрузилась правильно, и единственной очевидной проблемой были случайные сбои при загрузке, но после запуска сервера все, казалось, шло гладко, за исключением функции загрузки файлов моего приложения.
После замены жесткого диска проблема исчезла. Больше никаких внутренних ошибок сервера при загрузке любого файла!