林业地理信息数据管理之问题解答

林业地理信息数据管理之问题解答

(陈家 安徽省林业调查规划院)

一、使用代理

部署应用程序时,您可能需要使用代理。Web AppBuilder 在下列情况下支持使用代理:

  • 访问跨域资源

  • 超过 2048 个字符的请求

  • 访问受基于令牌的身份验证保护的资源

  • OAuth 2.0 应用程序登录

  • 启用记录

  • 基于资源和 referer 的比率限制

我个人认为,代理最有效的是,对终端用户隐藏后台是ArcGis平台,让人觉得是自己的系统。要确保在统一页面上,不要搞得一团糟,应用程序是基于Web AppBuilder开发版建立的,一定要确保应用程序从开发版上下载下来并部署到我们的网站服务器中(我在以前的章节介绍过)。

要确保两件事情:

1、如果使用ArcGis Online(服务器属于ArcGis的话),要在组织里共享在线地图服务(我在以前的章节介绍过);

2、如果是自己建立的地图服务器,则需要通过安全连接进行访问。

在这个例子中,当我们运行应用程序的时候会面临两个问题:一是安全的网络地图认证,并确保是服务器地图服务。

当我们打开开发工具,看一看网络提示,可以发现当我们想进入ArcGis Online的时候,反馈的是403错误,这是因为在默认情况下,匿名访问者不能访问资源,必须要登录arcgis
online。
这里写图片描述

第二个问题,看一下网络提示,应用程序无法加载服务,提示499错误代码,这个意思是必须要通过用户名和密码访问自己的网站。

这里写图片描述

现在,我们按照以下步骤实现代理:

1、在编辑器里打开应用程序的“config.json”文件:

这里写图片描述

2、在文件的底部,添加“httpProxy”属性域,加入如下代码:
这里写图片描述

属性的定义如下:

属性 说明
useProxy 布尔型。可选。默认:true。如果为 false,则所有请求均不能使用代理。
url 字符串。可选。用于指定代理位置的 URL。如果请求与任意代理规则均不匹配但必须使用代理(例如跨域请求),则会使用此代理。
alwaysUseProxy 布尔型。可选。指定是否始终将代理用于与 REST 端点进行通信。默认:false。如果请求与任意代理规则均不匹配且不需要代理,则应用程序会检查该属性,以确定如何进一步使用代理。如果为 false,则请求不能使用引用 url 的代理。如果为 true,则请求可以使用引用 url 的代理。
规则 Object[]。可选。为具有相同 URL 前缀的一组资源定义代理。如果请求 URL 与规则匹配,则请求会通过代理发送。每个规则具有两个属性: - urlPrefix - 字符串 - 需要通过给定代理访问的资源的 URL 前缀。- proxyUrl - 字符串 - 代理 URL。

3、针对刚才所说的使用ArcGis公共服务器或者自己建立的服务器,因此我们还需要给“config.json”文件添加两种代理规则,其目的都是通过统一的页面访问背后的地图资源,如下图,关于各个平台代理文件的获得方法见本段最后(如.net平台的proxy.ashx文件):

这里写图片描述

第一条代理规则是在ArcGis Online里共享的资源,第二条规则针对自己的ArcGis服务。

urlPrefix属性告诉应用程序,当在请求中看见这个前缀的时候,使用代理去访问资源。ProxyUrl属性告诉应用程序代理服务器的位置。在自己的门户可以查看地图的服务地址。
这里写图片描述

4、在“proxy.config”文件中设置serverUrls属性,因为我们定义了两个代理规则,所以有两个serverUrls属性。如果资源在ArcGis Online上,则用其上注册的用户名和密码填入clientId和clientSecret;如果是自己的网络地图服务器,则使用自己建立的用户名和密码登录(在之前的章节也介绍过的)
这里写图片描述

确保“config.json”和“proxy.config”两个文件按以上内容编辑并保存好了,在浏览器中运行应用程序就可以了。

这里写图片描述

此外,Esri 可提供三种代理,每种代理针对一种特定服务器端平台:ASP.NET、Java/JSP
和 PHP。访问https://github.com/esri/resource-proxy/可以下载三种平台的代理文件。

陆续增加中……….

(如需转载,请注明出处)