在客户的生产环境下,处于安全考虑,网络环境比较复杂,GIS 服务器一般是不可以访问外网的,而开发商的测试环境或者应用服务器又是分布在不同的服务器下,那么,这样就需要解决跨域访问的问题。
首先,我们需要说明一下在ArcGIS Server服务目录Services Directory里面通过ArcGIS Javascript浏览服务是需要Internet环境的,离线情况下肯定是不能预览的,因为它需要访问在线的javascript API。
其次,在实际开发环境我们可能需要叠加多源底图数据和业务数据,而数据投影信息的不一致或者缺失也会导致服务加载失败;
上次在客户现场遇到的问题:服务发布后ArcGIS JavaScript里面无法预览(有Internet环境),开发环境不能访问,没有日志记录无代码提示。
问题分析:经检查发现客户就将一张图片加载到mxd文档中进行了服务发布,而且数据没有投影坐标系;
解决方法:给数据定义投影,重新发布服务,ArcGIS JavaScript里面可以看到服务,开发环境不能访问,无代码提示;
进一步分析发现,GIS 服务器和开发环境存在跨域访问问题,有些代码可能会提示(服务安全问题,无法加载的提示)。
解决方法:
生产跨域访问安全策略文件crossdomain.xml:
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <site-control permitted-cross-domain-policies="all"/> <allow-access-from domain="*"/> </cross-domain-policy>
注:设置安全策略为允许所有连接访问
将以上内容复制到文本文件里面,并修改其文件名为crossdomain.xml
然后放在web服务器的根目录 问题解决:比如ArcGIS Server for .Net应该是IIS的根目录(如:C:/Inetpub/wwwroot);ArcGIS Server for Java应该是web_output目录(如:C:/Program Files/ArcGIS/java/web_output)。对于10.0版本可能为**/ArcGIS/Server10.0/java/manager/web_output
总结:对于服务不能访问的问题,应该考虑以下三个方面:1.数据问题,投影信息是否正确,多源数据投影是否一致;2.服务是否正常,是否可以正常预览;3.检查是否存在跨域访问问题,设置跨域访问的安全策略;