esri.config.defaults.io.proxyUrl设置

1、前言:

在IE8中使用用圆形或椭圆形进行缓冲区查询时,会报如下错误:esri.config.defaults.io.proxyUrl 尚未进行设置。如果向启用了 CORS 的服务器发出请求,请将域推送到 esri.config.defaults.io.corsEnabledServers。但是我们手动绘制一个简单多边形作为输入参数则不会出现上述错误。

2、原因:

一般使用框选的时候对query.geometry,我们一般会赋予一个Extent变量,但是当我们需要用一个比如圆,或者点很多的不规则多边形的Polygon去查询时,就会出现esri.config.defaults.io.proxyUrl 尚未进行设置”错误。因为多边形(含有的point多)导致的web service的url的参数个数大于2048个,而我们这里采用的是get方式(最大的字符数为2048)不是post方式。所以我们需要一个proxy page做代理通过代理使用post方式做查询,这样我们就不会受限于字符总数的限制了。

3、post和get请求的区别

根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的,POST表示可能修改变服务器上的资源的请求。

(1)Get方式:首先是"GET方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。注意这是限制是整个URL长度,而不仅仅是你的参数值数据长度。

(2)Post方式:理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。

(3)代理页面:通常部署在一台服务器和一个应用系统之间,通过启用代理,你可以使一个应用系统认可你的行为是安全的,从而避开认证,正常访问设置了安全验证的服务。实现代理的方式之一是令牌(Token),虽然令牌本身是不可见的,但是应用却可以通过基于令牌验证的验证,这是由于代理在后台处理了一个超过2048个字符的post请求完成的。另外,当一个应用和一个需要引入的资源之间存在跨域问题时,代理就可以帮助你解决跨域访问问题了。

当我们所请求的url总地址长度大于2048个字符,我们可以通过代理的方式将get请求通过代理转换为post请求,这样就避免了长度受限的问题。

3、解决

3.1 下载代理包

https://github.com/Esri/resource-proxy/releases,内如如下:

1.1.0

@bsvensson bsvensson released this on 6 Nov 2015 · 8 commits to master since this release

Added

Support for 10.3 tokens

Support for federated services

Support for hostRedirect to use aliased domains

Added "?ping" for easier testing

(DotNet) Support for Windows authentication

目录中包含三个子目录,分别对应不同的Web服务器类型:

(1)DotNet – IIS服务器

(2)Java – Tomcat 服务器

(3)PHP – Apache服务器

3.2 在IIS上部署

在IIS服务器下,将DotNet文件夹下的四个文件拷贝到IIS的wwwroot目录下,内如如下(Web.config文件可以只拷贝里面部分内容到项目的web.config文件夹中)。

proxy.ashx,proxy.config,proxy.xsd,Web.config

在浏览器里访问localhost/prosy.ashx,如果返回以下结果,则说明配置成功。

修改配置文件proxy.config,加入如下内容:

<?xml version="1.0" encoding="utf-8" ?>
<ProxyConfig allowedReferers="*"  mustMatch="true">
    <serverUrls>
      <serverUrl url="http://services.arcgisonline.com"   matchAll="true"/>
      <serverUrl url="http://59.75.119.108:6080/arcgis/rest/services"   matchAll="true"/>
      <serverUrl url="http://localhost:6080/arcgis/rest/services"   matchAll="true"/>
    </serverUrls>
</ProxyConfig>
<!-- See https://github.com/Esri/resource-proxy for more information -->

说明:如果地址需要ArcGIS全球账户的认证,那么需要在url中加入用户名和密码信息。

例如:<serverUrl url="http://services.arcgisonline.com" UserName="UserName"  PassWord ="PassWord" matchAll="true"/>

在应用程序中配置代理,添加到需要使用的代理的代码前即可:

    esriConfig.defaults.io.proxyUrl = "proxy.ashx";
    esriConfig.defaults.io.alwaysUseProxy = false;
时间: 2024-10-15 17:28:27

esri.config.defaults.io.proxyUrl设置的相关文章

ArcGIS API for Javascript 使用query查询以某个点为半径的圆内的要素出现“esri.config.defaults.io.proxyUrl 尚未进行设置”错误

当使用Query查询时,会用如下配置 var queryTask = new esri.tasks.QueryTask(applicationModelOneSearchPOIURL); var query = new esri.tasks.Query(); query.geometry = geometry; query.outSpatialReference = map.spatialReference; query.spatialRelationship = esri.tasks.Quer

STM8S---独立按键IO口设置及按下事件问题

GPIO设置 按键检测 1 连续按键检测短按长按 关键代码 1 GPIO设置 ????????????????STM8 I/O 口引脚配置表 Px_DDR Px_CR1 Px_CR2 I/O 方式 引脚状态 0 0 0 输入 悬浮输入 0 0 1 输入 上拉输入 0 1 0 输入 中断悬浮输入 0 1 1 输入 中断上拉输入 1 0 0 输出 开漏输出 1 1 0 输出 推挽输出 1 x 1 输出 输出(最快速度为10MHZ) 对STM8S的IO配置,我们只需要操作五个寄存器就行了: 输出数据寄

linux的cpu和磁盘io优先级设置

通常linux下限制cpu使用有三种方法: nice/renice:调整进程使用cpu的优先级 cpulimit:不修改进程的nice值,通过暂停进程一段时间,来限制cpu使用 cgroups:内核提供的机制,可以限制.记录.隔离一组进程所使用的cpu.内存.磁盘.网络等资源,是docker等容器的基础技术之一 限制磁盘io : ionice : 调整io调度的优先级 cgroups 这里只说nice和ionice,实际上nice和ionice只是改变优先级,并没有真正的限制 一.nice 1.

Socket编程实践(9) --套接字IO超时设置方法

引:超时设置3种方案 1. alarm超时设置方法 //代码实现: 这种方式较少用 void sigHandlerForSigAlrm(int signo) { return ; } signal(SIGALRM, sigHandlerForSigAlrm); alarm(5); int ret = read(sockfd, buf, sizeof(buf)); if (ret == -1 && errno == EINTR) { // 超时被时钟打断 errno = ETIMEDOUT;

ueditor.config.js文件中设置enableAutoSave参数为false就可以关闭本地保存功能。

//启用自动保存 1 ,enableAutoSave: false ueditor1.4.3版本是没有效果的,需要修改代码,在ueditor1.5.0版本已经得到修复. 修改方法 ueditor.all.js文件 找到 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

EntityFramework在root目录web.config中的配置设置

未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序.请确保在应用程序配置文件的“entityFramework”节中注册了该提供程序.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882. 确保项目中引入 pasting entityFramework.dll,然后在配置文件中配置(如果使用nuget)install包,可以忽略该篇随笔 <configuration> <

ArcGIS For JavaScript API 默认参数

“esri.config”的是在1.3版中的的“esriConfig”的替代品.如果您使用的是1.2或更低的版本,您应该参阅默认API v1.2和更低的配置.对于版本1.3或更高版本,您可以使用“esri.config”在地方的“esriConfig”.虽然“esriConfig”可以继续使用,与1.3版本,您应该更新您的应用程序,而不是使用“esri.config”.ArcGIS的JavaScript API中有一些默认的配置,可以被重写编程.例如:        var zoomSymbol

针对ArcGIS Server 跨域问题的解释

XMLHttpRequest cannot load http://server/arcgis/rest/info?f=json. Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin Leave a reply 在博客Hello World文章中提起过,以前在sinaapp中建立过wordpress博客,也写过一篇关于ArcGIS JavaScript API的文章,但是由于sinaapp开始收费以

ArcGIS JavaScript API动态图层

? 矢量动态图层 ? ? <!DOCTYPE HTML> <html> ? <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Test Map</title> <link rel="stylesheet" href="http://172.16