我在尝试查找通过 HTTP 上传文件(文件大小无关紧要)到 Windows 2012 R2 Essentials 时出现错误原因时遇到了很大麻烦(IIS 8.5) 网络服务器。
该应用程序在 Windows 2003 上完美运行(微软 IIS 6 新功能)。它在我的 Windows 7 开发电脑上运行良好,运行IIS 7.5
由于 IIS 7.5 的 IIS 管理器与 IIS 8.5 非常相似,因此我在配置 ISAPI Web 应用程序时几乎没有遇到任何困难,而且除了文件上传之外的一切都运行正常。
我首先测试了一些基本的东西:
- 就像在以前的 IIS 版本中一样,我验证了上传文件夹权限。
- 我检查了事件查看器,没有看到有关我的网络应用程序的任何内容。
- 发送到 IIS 7.5 和 IIS 8.5 版本的请求标头是相同的。发布的数据是相同的。
- 设置最大帖子大小。
- 将文件类型添加到允许列表。
我尝试过的其他方法:
当将大型文件上传到 Web 服务器时,我发现 w3wp.exe(32 位进程)在文件上传过程中消耗 CPU。问题是在我的任何应用程序代码有机会执行之前就发生错误处理上传。例如:
// 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 中不会发生。
有人能告诉我可能会发生什么吗?谢谢!
更新
Peter Hahndorf 建议我使用跟踪功能,因此我启用了它,这是“请求摘要”:
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
答案1
经过一周的疯狂尝试,我终于找到了问题的根源,原来是硬盘。它偶尔会发出咔嗒声,但我认为这不会是个问题,因为我只是在评估 Windows 2012。
毕竟,Windows 已正确加载,唯一明显的问题是偶尔的启动失败,但一旦服务器运行,除了我的应用程序的文件上传功能外,一切似乎都运行顺利。
更换硬盘后,问题就消失了。上传任何文件时都不会再出现内部服务器错误!