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