环境: win server 2008 R2,IIS7
错误原因:使用了自定义的状态响应码。
最近在做接口限流的处理,使用的现成的插件。引入进项目后,本地测试正常,放到服务器上后,请求受限返回响应时 直接返回自定义错误模块不能识别此错误。
排查半天,添加异常日志记录,并没有发现异常。。经过仔细观察和搜索后终于找到原因。是因为在请求次数达到受限值时,过滤器返回响应的时候,状态码是自定义的 429 Too Many Requests
,对于本地开发是好的. 本地IIS 也正常。 放在win server 2008R2 服务器 II7上就不行, 可能是IIS版本太老旧 不支持自定义的状态码吧.
解决方法: 如果自定义状态码不是必须条件的话,最简单的就是 响应的时候 把 Response.StatusCode 设置成200就可以啦; 如果非要维持自定义状态码并且要正常响应,那就得手动把错误码添加到IIS里去。
我已经改了状态码就可以正常响应了,所以第二个方法就没试,引用一下其它文章写得解决步骤作参考:
把错误代码添加到IIS 7:
1. 用HTML编辑器或文本编辑器,为错误消息创建一个简单的.htm页面。提供<title>和带一段简短描述的<body>,比如“GIS服务需要token才能访问,参考ArcGIS Server Help,了解如何使用token访问安全的服务。”把.htm文件保存在服务器上。
2. 点击“开始—所有程序—管理工具”,点击“服务器管理器”,打开服务器管理器程序
3. 点击“角色”,在右边栏定位到Web服务器(IIS),在列表里检查一下“HTTP 错误”项是否已安装,如果没有安装,点击“添加角色服务”安装HTTP错误角色服务
4. 在服务器管理器左边,展开角色—Web 服务器(IIS),点击“Internet信息服务(IIS)管理器”,在中间的连接列里,点击服务器名称,在右边窗口会显示服务器主页以及设置的链接。
5. 在服务器管理器的右边,分组依据选择“类别”,在HTTP 功能组中双击“错误页”,会显示错误代码和页面的列表
6. 在右边的操作栏里,点击“添加…”,打开对话框,在状态代码里输入499。选中“将静态文件中的内容插入错误响应中”,输入第1步创建的.htm文件路径。点击确定保存设置,然后关闭服务器管理器。
7. 在另一台电脑上打开浏览器,请求一个需要token的服务的WSDL,比如:
http://myserver/arcgis/services/MySecuredService/MapServer?wsdl应该会自定义的错误页面。
参考资料: