ArcGIS API For JavaScript无法加载ArcGIS Server地图服务的原因及对策
来源:用户上传
作者:
摘 要:采用美国Esri公司地理信息系统二次开发工具包ArcGIS API for JavaScript,加载ArcGIS Serve地图服务时,常出现浏览器端不能显示地图的问题,针对该问题,本文从浏览器控制台调试信息入手,采用敏感信息关联法,结合客户端、服务器端和浏览器端各自特点进行了深入分析和研究,得出当使用HTTPS协议访问服务器时,自签名证书不能通过浏览器安全验证是导致问题的主要原因,基于该分析通过采用HTTP协议和禁止浏览器警告的方法解决了问题,并针对三款主流浏览器给出了具体的方法和步骤。
关键词:Esri;ArcGIS;地理信息系统;JavaScript;地图
中图分类号:TP274 文献标识码:A
Abstract:When adopting the ArcGIS API For Javascript,which is the second development kit of the geographic information system from American ESRI company,to load the ArcGIS Server map service,the problem that the browser cannot display the map often occurs.In order to solve this problem,this paper starts with the debugging information of browser console,uses the sensitive information association method,considers the characteristics of the client,the server and the browser,and conducts in-depth analysis and studies.It is concluded that when using the HTTPS protocol to access the server,the main cause for the problem is that the self-signed certification cannot pass the browser security verification.Based on this analysis,this paper solved the problem by using the HTTP protocol and forbidding browser warning.Specific methods and steps are given for three mainstream browsers.
Keywords:Esri;ArcGIS;geographic information system;javascript;map
1 引言(Introduction)
ArcGIS API for JavaScript是ESRI根据JavaScript技术实现的调用ArcGIS Server REST API接口的一组脚本,通过ArcGIS API for JavaScript可以将ArcGIS Server提供的地图资源嵌入到Web应用中,使地图在浏览器上显示。但在ArcGIS Server单机部署开发环境下,往往会遇到web浏览器端不显示地图的问题。本文针对该问题首先从ArcGIS API for JavaScript语言本身和HTTPS协议对签名证书的要求两方面进行了原因分析,并基于不同原因给出了客户段、浏览器端和服务器端的解决办法[1-3]。
2 原因分析(Reason analysis)
通过ArcGIS API for JavaScript加载发布在ArcGIS Server上的地图资时,导致浏览器不显示地图的原因是多方面的,这里仅对几个典型的隐蔽的原因加以分析。
2.1 视图显示参数设置不当导致的不显示
要使发布在ArcGIS Server上的地图资显示在浏览器上,需要对视图显示属性如范围(extent)、中心点(center)和缩放(zoom)等参数进行正确设置,否则将会导致地图在视图中看不见,这类错误调试窗口不会有任何提示,因为程序本身没错,很难找到原因[4]。
范围(extent)属性,决定了地图在浏览器视图中显示的范围,有四个参数xmin、ymin、xmax、ymax,单位为投影坐标(米),设置时必须弄清地图实际投影坐标大小,四个参数大小必须在实际投影坐标范围内,否则地图将不能正确显示。
中心点(center)和缩放(zoom)一般同时设置,中心点确定了地图在浏览器视图中的位置,缩放确定了地图在视图中的大小。中心点坐标设置不在地图实际坐标范围内或者缩放比例太小将会导致地图在视图中不显示。
为了避免此类错误,在不确定地图实际坐标范围的情况下,最好不要设置这些参数,视图在默认情况下也能正确显示。
2.2 图层与对应的地图服务不对应导致的不显示
图层是承载服务的载体,ArcGIS for Server将GIS资源作为服务发布出来,要想在浏览器端看到这些服务,就必须将图层和服务关联起来,不同的服务对应不同的图层类型,弄错了这种对应关系,浏览器加载地图服务时将不会显示[5]。比如MapImageLayer图层,对应 ArcGIS for Server发布的2D动态地图服务,TileLayer图层对应ArcGIS for Server发布的2D缓存地图服务,如果程序中错误用TileLaye圖层加载发布的动态地图服务,将不会有任何显示,调试窗户显示如图1所示。 因此在编程时一定要弄清各类图层对应的服务,切不可随意改变对应关系。
2.3 由于自签名证书验证导致的不显示
ArcGIS API for JavaScript库的默认主机配置是HTTPS,默认情况下,ArcGIS Server强制使用HTTPS协议,而HTTPS要求Web服务器使用Web服务器证书。证书一般有三类:CA签名证书、域证书、自签名证书。CA签名证书是证书颁发机构(CA)签名证书,使用由著名CA颁发的证书时,Web浏览器中不会显示任何警告消息;域证书是由组织的证书颁发机构签名的内部证书,域内用户通常不会收到异常行为或警告消息,外部用户将看到有关站点不受信任的浏览器警告;仅由网站所有者签名的证书称为自签名证书,任何使用自签名证书连接到网站,Web客户端(例如Web浏览器)都将显示一个警告禁止通信。
在ArcGIS Server安装和部署时会自动创建自签名证书,由于CA证书和域内证书申请程序复雜且需要一定费用,故在开发和学习阶段一般采用自签名证书。采用Web浏览器连接到ArcGIS Server站点时,默认情况下ArcGIS Server会为 HTTPS请求使用此自签名证书,由于该证书不能通过浏览器端安全验证,故浏览器会显示安全警告,并禁止通信,采用ArcGIS API for JavaScript库编写网页脚本程序加载发布在ArcGIS Server上的地图服务,实质是向ArcGIS Server发起了HTTPS请求,浏览器虽不会显示警告,但同样由于自签名证书不能通过安全验证浏览器会阻止访问,从而导致加载的地图不能在浏览器上显示[6]。
3 解决对策(Countermeasure)
前两个问题比较简单,在原因分析时已给出解决措施,下面就自签名证书验证导致的地图服务不显示问题给出解决对策。
3.1 采用http协议访问ArcGIS Server
ArcGIS Server10.6之前的版本默认支持使用HTTP和HTTPS协议进行通信,而HTTP协议不要求服务器证书,故可以使用HTTP协议访问ArcGIS Server,从而避免因浏览器验证服务器证书,阻止访问服务器,导致加载地图不显示问题的发生。但鉴于HTTP协议的不安全且从ArcGIS Server10.7开始默认强制使用HTTPS协议,故不建议采用这种方法。
3.2 禁止浏览器自签名证书的警告
这个对策的思路就是采用一定的操作使浏览器通过对ArcGIS Server自签名证书的验证,从而禁止自签名证书的警告,使浏览器不再阻止访问ArcGIS Server上的地图资源,顺利显示加载的地图。由于每个浏览器对自签名证书的验证模式不同,每个浏览器禁止自签名证书警告的做法也不尽相同,下面就Internet Explorer、Google Chrome、Mozilla Firefox三款主流浏览器分别做一介绍。
3.2.1 Mozilla Firefox
使用自签名证书连接到ArcGIS Server站点时,Mozilla Firefox会显示连接不受信任的警告,如图2所示。
运行采用ArcGIS API for JavaScript编写的网页脚本程序加载地图服务时,浏览器无任何显示,控制台调试信息如图3所示。
从调试信息来看好像是跨域访问引起的问题,而实际上这与跨域访问没有任何关系,是浏览器由于无法通过自签名证书验证,从而阻止了访问请求而引起的。要使浏览器同过自签名证书验证,只需在Mozilla Firefox浏览器证书管理器中,将自签名证书添加到安全例外就行了。下面以Firefox Quantum版给出具体步骤:
单击上图警告窗口中“高级”,在弹出窗口中点击“接受风险并继续“,此时网页可以正常打开,且对应的服务器自签名证书已经添加到了Mozilla Firefox浏览器证书管理器安全例外中。运行ArcGIS API for JavaScript库编写的网页脚本程序加载发布在ArcGIS Server上的地图服务,地图已能在浏览器中正常显示。
3.2.2 Internet Explorer
使用自签名证书连接到ArcGIS Server站点时,Microsoft Internet Explorer会显示该网站的安全证书存在问题的警告,如图4所示。
运行采用ArcGIS API for JavaScript编写的网页脚本程序加载地图服务时,浏览器无任何显示,控制台调试信息如图5所示。
控制台没有显示任何调试信息,给查找原因带来了很大困难,事实证明这也是浏览器无法通过自签名证书验证,阻止了访问请求而引起的。
单击‘继续浏览此网站(不推荐)’,地址栏会显示为红色,并且旁边的安全状态栏中会显示证书错误消息,单击安全状态栏中的‘证书错误’,将显示一个指示该站点的证书不可信的弹出窗口,单击查看证书,将显示一个关于该ArcGIS Server站点使用的证书信息的新窗口,窗口提示内容如下:“此CA根目录证书不受信任,要启用信任,将该证书安装到‘受信任的根证书颁发机构’存储区”。故要使Internet Explorer浏览器通过自签名证书验证,解除对访问的阻止,只需要把ArcGIS Serve安装时创建的自签名证书安装到“受信任的根证书颁发机构”存储区即可。首先从ArcGIS Serve导出创建的自签名证书,然后将证书导入到OS证书存储中,具体步骤如下:
①登录到 ArcGIS Server管理员目录。 ②浏览至计算机→[计算机名称]→sslcertificates。
③单击 ArcGIS Server正在使用的证书并单击导出。将文件保存到计算机上的某个位置。
④打开证书管理器。可通过单击开始按钮,在搜索框中输入certmgr.msc,并按 Enter键执行此操作。
⑤在证书管理器窗口中,单击受信任的根证书颁发机构并单击证书。
⑥在顶部菜单中单击操作并选择所有任务→导入。
⑦在证书导入向导对话框中,单击下一步,然后按照向导中的说明导入证书。
完成上述步骤后在Internet Explorer浏览器打开加载ArcGIS Server地图服务的网页,地图已能在浏览器中正常显示。
3.2.3 Google Chrome
在Google Chrome浏览器中使用自签名证书连接到 ArcGIS Server 站点时,会显示连接不受信任的警告。如图6所示。
运行采用ArcGIS API for JavaScript编写的网页脚本程序加载地图服务时,浏览器无任何显示,控制台调试信息如图7所示。
从控制台调试信息可以看出,地图不显示原因是浏览器无法通过自签名证书安全验证,访问请求被阻止。从调试信息分析来看,Google Chrome不能通过自签名证书安全验证的原因是ArcGIS Server默认创建的自签名证书格式不符合Google Chrome浏览器的要求,没有指定“使用者可选名称”。因此必须重新创建自签名证书并将证书导入到OS证书存储中。具体步骤如下:
①登录到ArcGIS Server管理员目录
②浏览至计算机(Machines)→[计算机名称]→
sslcertificates。
③单击生成(generate)将打开一张表格如图8所示。
带*号是必填项,按要求或者默认内容填写即可,特别要注意的是最后一项Subject Alternative Name(主题备选名称)用于验证所访问网站所提供的SSL证书是否针对该网站颁发。ArcGIS Server默认创建的自签名证书中该项是空白的,导致生成的自签名证书没有“使用者可选名称“这一项,Google Chrome浏览器无法验证提供的自签名证书是否是针对该网站颁发的,从而阻止访问。因此手动新建自签名证书时该项必须要填写,填写要求如下:
如果服务器主要通过https://www.esri.com进行访问,则SAN参数应设置为DNS:www.esri.com。如果将在公共网络中使用https://www.esri.com并在组织的LAN(局域网)中使用https://gisserver.esri.com访问服务器,则SAN参数应设置为DNS:www.esri.com,DNS:gisserver.esri.com。填写好后点击generate便可生成证书。
证书生成后还需要配置ArcGIS Server以使用该证书,步骤如下:
①登录到ArcGIS Server管理员目录https://gisserver.domain.com:6443/arcgis/admin。
②浏览至计算机→[计算机名称]。
③单击编辑。
④在Web服务器SSL证书字段中键入要使用的证书名称。
⑤单击保存编辑内容以应用更改。
⑥ArcGIS Serve站点自动重新启动,配置完成,新的证书已经启用。
配置好ArcGIS Server启用新生成的证书后,还必须安装服务器证书作为受信任的证书,步骤同上。
完成上述步骤后在Google Chrome浏览器打开ArcGIS Serve Manager網页已无警告信息,运行加载ArcGIS Server地图服务的程序,地图已能在浏览器中正常显示。
4 结论(Conclusion)
通过ArcGIS API for JavaScript编程,使用HTTPS协议加载发布在ArcGIS Server上的地图服务时,出现浏览器端地图不显示问题原因是多方面的,在排除语言本身的原因后,应重点考虑自签名证书的问题,故为避免此类问题,在开发环境搭建时首先应按本文所述的方法采用自签名证书配置好ArcGIS Server和主流浏览器。
参考文献(References)
[1] Yingjie Hu,Krzysztof Janowicz,Sathya Prasad.Metadata Topic Harmonization and Semantic Search for Linked-Data-Driven Geoportals:A Case Study Using ArcGIS Online[J].Transactions in GIS,2015,19(3):398-416.
[2] Hu Y,Janowicz K,Prasad S,et al.Metadata Topic Harmonization and Semantic Search for Linke-Data-Driven Geoportals:A Case Study Using ArcGIS Online[J].Transactions in Gis,2015,19(3):398-416.
[3] Abulizi N,Kawamura A,Tomiyama K,et al.Measuring and evaluating of road roughness conditions with a compact road profiler and ArcGIS[J].Journal of Traffic & Transportation Engineering,2016,3(5):16-29.
[4] Durumeric Z,Kasten J,Bailey M,et al.Analysis of the HTTPS certificate ecosystem[C].Proceedings of the 2013 conference on Internet measurement conference.ACM,2013,1(10):291-304.
[5] 黄茹芬,农强.基于证书的任意指定验证人签名方案[J].太原师范学院学报(自然科学版),2012(3):70-73.
[6] 王洪伟,张立朝,张海东,等.分布式ArcGIS Server体系结构的研究与开发[J].测绘科学技术学报,2007,24(2):110-113.
作者简介:
万研新(1971-),男,硕士,高级工程师.研究领域:地理信息,地图开发.
刘 鑫(1989-),男,硕士,工程师.研究领域:自动控制.
王作兵(1981-),男,本科,工程师.研究领域:电子信息,软件开发.
转载注明来源:https://www.xzbu.com/1/view-15130299.htm