win2008 IIS7 ASP 的 405 错误
两天前突然接到测试的报告,说网络查询没有数据,很纳闷,这个系统跑了很多年,还没有出现过这个问题。
数据是服务器A去另一个服务器B上取来的,用的是:
Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
responsebody取回来数据后经过转化:
1 Function BytesToBstr(body,Cset) 2 dim objstream 3 set objstream = Server.CreateObject("adodb.stream") 4 objstream.Type = 1 5 objstream.Mode =3 6 objstream.Open 7 objstream.Write body 8 objstream.Position = 0 9 objstream.Type = 2 10 objstream.Charset = Cset 11 BytesToBstr = objstream.ReadText 12 objstream.Close 13 set objstream = nothing 14 End Function
服务器B不止有一台,运行的系统 有win2003和win2008,调试输出BytesToBstr =
objstream.ReadText这一行,发现win2003系统下跑的系统正常返回数据,win2008下的就会出现405错误。
405错误是谓词错误,服务器不认识或者拒绝执行谓词(Get、Post之类)。当时想的是可能是win2008的权限问题。
可以几乎把所有可以开的权限都打开了还是没能解决问题,而这已经花去了一天多的时间,是在让人郁闷。
搜索引擎,发帖询问都无果,后来询问了一个朋友,他提示了下大小写问题,由于asp对大小写不敏感,所以之前没有想到这个问题。
XMLHTTP.open "GET","http://catcoder.com/",true
上一条语句中原来是“Get”,改成“GET”后,问题居然就这样解决了,当时的感觉,真有砸电脑的冲动。
但问题总算解决,但本质问题还是不太理解,猜想可能是IIS7中对“谓词”审查比较严,但我也配置过兼容IIS6,所以真正的问题根源并不清楚。
大小写,OH MY GOD!!
原文:http://catcoder.com/index.php/2013/01/09/win2008-iis7-asp-405/