问题描述
我们的项目在Global.asax的Application_Error里进行异常的全局统一处理,出现异常则记录日志并返回提示的Json,现在本地调试没问题,发布到服务器的IIS上在服务器访问没问题,可是如果在另一台机访问服务器的站点,如果报出异常则直接返回500,换了一台服务器依然如此。请问这排查该如何下手?
解决方案
解决方案二:
尝试使用Firefox浏览器的firebug来看看。
解决方案三:
连接:
解决方案四:
引用1楼insus的回复:
尝试使用Firefox浏览器的firebug来看看。
已经用chrome看了,response就是500状态。
解决方案五:
在服务器的事件查看器中看看有没有iis错误日志,500应该也会有错误日志
解决方案六:
引用4楼starfd的回复:
在服务器的事件查看器中看看有没有iis错误日志,500应该也会有错误日志
也看过事件查看器,没有IIS的错误日志……
解决方案七:
通过记录日志发现,直到抛出异常上一步依然正常,但没有进入到application_error进行处理,站点用的是state_server,session服务也一切正常
解决方案八:
引用2楼insus的回复:
连接:
好东西,问题是……返回结果是<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><metaname="viewport"content="width=device-width"/><title>错误</title></head><body><hgroup><h1>错误。</h1><h2>处理你的请求时出错。</h2></hgroup></body></html>
解决方案九:
发布到服务器的IIS上在服务器访问没问题,可是如果在另一台机访问服务器的站点,如果报出异常则直接返回500我建议楼主去防火墙把iis上站点的端口加进去。控制面板--防火墙--入站规则--新建规则--选择端口填写完后在试试。
解决方案十:
引用8楼hanjun0612的回复:
发布到服务器的IIS上在服务器访问没问题,可是如果在另一台机访问服务器的站点,如果报出异常则直接返回500我建议楼主去防火墙把iis上站点的端口加进去。控制面板--防火墙--入站规则--新建规则--选择端口填写完后在试试。
或者我的描述不详细,我们的项目是前后端分离,之间只通过JSON交互,如果没有异常的话那么一切正常,请求返回的都是200,但只要一出现异常请求则变成500,根据日志记录发现是没进入到application_error.
解决方案十一:
引用8楼hanjun0612的回复:
发布到服务器的IIS上在服务器访问没问题,可是如果在另一台机访问服务器的站点,如果报出异常则直接返回500我建议楼主去防火墙把iis上站点的端口加进去。控制面板--防火墙--入站规则--新建规则--选择端口填写完后在试试。
另外telnet的话端口正常
解决方案十二:
更新调试结果:在Application_Start里添加日志记录,发现是有的,也就是不存在Global.asax加载失败问题
解决方案十三:
首先要找出来这个500是谁抛出来的。不一定是最终的IIS跑出来的。
解决方案十四:
引用12楼sundacheng1989的回复:
首先要找出来这个500是谁抛出来的。不一定是最终的IIS跑出来的。
发布到本地然后附加进程调试完全没问题,但别的机子发送请求来调试发现只能跑到抛出异常那一句,application_error连进都没进。
解决方案十五:
1.看看IIS上的FrameWork版本是否和开发中的版本一致.2.看看是否放在根目录上,我有一次也是报错,弄了很久,发现放在根目录就行了,也不知道为什么.
解决方案:
谢谢大家回帖,问题已经解决了,stackoverflow果然是吾等码农的苦海明灯……重要的是下面这段:Bydefault(whenanewprojectisgenerated),anMVCapplicationhassomelogicintheGlobal.asax.csfile.Thislogicisusedformappingroutesandregisteringfilters.Bydefault,itonlyregistersonefilter:aHandleErrorAttributefilter.WhencustomErrorsareon(orthroughremoterequestswhenitissettoRemoteOnly),theHandleErrorAttributetellsMVCtolookforanErrorviewanditnevercallstheApplication_Error()method.Icouldn'tfinddocumentationofthisbutitisexplainedinthisansweronprogrammers.stackexchange.com.所以将Application_Start中的这一句注释掉就行//FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);