Arcgis api for JavaScript 跨域配置(在线编辑问题)
关于发布Feature Sever的详细步骤可以查看下面的链接:
http://blog.youkuaiyun.com/lrspace/article/details/41704431
http://blog.youkuaiyun.com/lrspace/article/details/41730707
在线编辑的样例可以使用:
https://developers.arcgis.com/en/javascript/jssamples/ed_default_editingwidget.html
样例中使用的而是Editor工具,非常的全面,既包含图形编辑又有属性编辑(更改的时候自动进行保存),但是使用的时候一定要注意,跨域代理的问题,不设置这个,数据更改是没办法保存的。
再说三遍,代理真的很重要,代理真的很重要,代理真的很重要。Arcgis APi提供了关于代理的说明:https://developers.arcgis.com/en/javascript/jshelp/ags_proxy.html。里面提供了代理代码的下载:https://github.com/Esri/resource-proxy/releases
(本人所使用的arcgis server是10.1和10.2版本)解压后的文件如下:
分为.net版本,java版本,php版本,这里我们以.net为示例。
打开DotNet文件夹:
打开README.md,这里是部署的文档,明确说明了怎样部署代理文件,我将主要步骤罗列下来:
一、打开proxy.config:
<?xml version="1.0"encoding="utf-8" ?>
<ProxyConfigallowedReferers="*"
mustMatch="true">
<serverUrls>
<serverUrl url="http://services.arcgisonline.com"
matchAll="true"/>
</serverUrls>
</ProxyConfig>
<!-- Seehttps://github.com/Esri/resource-proxy for more information -->
配置文件的服务地址一定是要改的,改成自己的地图服务地址,如:
<serverUrl url="http://192.168.1.109:6080/arcgis/rest/services"
matchAll="true"/>
这里有个很有趣的小问题,我会在结尾说明。
保存好后,将整个DotNet文件夹拷贝到C:\inetpub\wwwroot下(确保以及开启了IIS,不然还是别往下看了)。
二、打开IIS管理器,右击DotNet,选择转换为应用程序。
应用程序池选择.Net 4.0(及以上)
至此,部署就告一段落了,接下来进行测试:
三、访问:http:// localhost/DotNet/proxy.ashx?ping,会看到:
{ "ProxyVersion":"1.1.0", "Configuration File":"OK", "LogFile": "OK"},然后再访问:http:// localhost/DotNet/proxy.ashx?http://192.168.1.109:6080/arcgis/rest/services/?f=pjson,如果看到指定ArcgisServer目录下的json数据,如
{"currentVersion":10.21,"folders":["Utilities","XKMSLFH"],"services":[{"name":"DOM2013","type":"ImageServer"}]},则到目前为止,代理配置成功!
这里有一个有趣的问题,当我在配置文件中设置的是:http://localhost:6080/arcgis/rest/services地址时,测试访问则依然使用http://192.168.1.109:6080/arcgis/rest/services,那么在测试时就会遇到403问题,所以这里一定要注意,如果配置的是localhost,那么在前端使用时,服务全部都是loalhost(当然这是服务也在本机的情况),如果使用本机的ip地址,那么所有的服务都应该是ip,服务不在本机时,不会有这种情况。
四、Js端在使用的时候,加上下面的代码就行了:
esri.config.defaults.io.proxyUrl="http:// localhost/DotNet/proxy.ashx ";
esri.config.defaults.io.alwaysUseProxy=false;