最近在做ArcGIS Server JS 的开发。JS API布署在本机上,并通过机器名进行访问。访问的相关代码如下。
- <script type="text/javascript" src="http://MyServer/arcgis_js_api/library/2.1/arcgis/?v=2.1"></script>
- <script type="text/javascript">
dojo.require("esri.map");
dojo.require("esri.toolbars.edit");
dojo.require("esri.layers.FeatureLayer");
dojo.require("dijit.form.CheckBox");
var map; - </script>
其中MyServer 是本机的机器名,周五下班时,程序跑起来还是正常的,周一来上班时,出现 “dojo未定义”的错误!!
通过在浏览器器中输入URL地址:http://MyServer/arcgis_js_api/library/2.1/arcgis/?v=2.1 可以访问到API资源。奇怪,为什么程序出错了呢??
搞古了半天,心想重装系吧,唉,就这样一个莫名奇妙的错误重装系统,代价太大了,而且原因没找到,说不定以后哪天又会遇到。总得有一个解决方案吧。用排除法吧,根据提的错误,很两种可能: 一是:有可能JS API根本就没有加载。二是:程序有错误。于是采取下面的方式来排除:
从ArcGIS 网站下,拷贝一个DEMO程序,到VS2005中,运行,可以正确访问到地图。然后将API的引用地址,改成本机的,运行,一样的错误。这说明程序本身应该没有问题,问题出在本机上的API不能被访问到。
然后想到,在另一台机器上布署API,并通过本机访问。对,这是一个好办法,结果在另一台机器布置好API,在本机上去访问,先通本机的浏览器去访问一下吧,输入http://对方的机器名/…………结果,不能访问!!!于是, ping 对方机器名,也没有ping通,哦,问题找到了:本机不能通过机器名访问其它机器!!!!
然后,前面访问本机的JS API时,是通过本机机器名访问的,而通过 ping 本机机器名是可以ping 通的,通过浏览器器访问本机机器名也是可以访问的,为什么程序运行时就不能通过本机的机器名访问呢??????
问题现在变成了:通过机器名不能访问其它机器的资源!!!
于是上百度去查,通过机器名不能访问其它机器是怎么回事,查了半天,未果,最后有人提醒是不是你的子网掩码有问题???哦,查一下吧:
再一看同一个局域网其他人的:
于是把本机的掩码改成: 255.255.255.0,一系列问题都解决了!!!!!
总结:当本机的子网掩码更改后,本机还可以通过网关上网,还能够通过IP访问其他机器,还能够通过机器名访问自已的机器。
但是在 arcgis api 调用过程序,通过机器名访本机上的API时,出现问题。估计是通过“<script type="text/javascript" src="http://MyServer/arcgis_js_api/library/2.1/arcgis/?v=2.1"></script>”访问本机时,是通过了路由器再来访问本机的API,结果由于 子网掩码错误,结果找不到资源。所以要注意了“通过代去访问某台机器上的资源”和“通过浏览器去访问某台机器上的资源”多少还是有一点区别的。而恰恰是这一样区别会导致和掩盖一系统莫名其妙的错误。
设想一下,如果子网掩码设置有误,又把本机网上拔掉,应该程序运行为正常,因为这时的访问不用经过路由器,就可以通过机器名访问到相关资源了。
一个小小的失误,浪费了我半天的时间去查找,写下这篇博文以示记念.