Arcgis api for javascript學習筆記(4.5版本) - 本地部署及代理配置

在開發過程當中,因爲api的文件比較多,不必每一個項目都將api加入到解決方案中。何況在VS中若是將api加入解決方案,在編寫css或js代碼時,因爲智能提示須要掃描腳本等文件,會致使VS很卡。因此我的比較喜歡將各個版本的api發佈到服務器上。本次記錄以本機爲例。 javascript

步驟1:將各版本arcgis api for javascript在IIS中發佈。

api部署目錄結構( 端口:8001; 應用程序池:集成模式 + V4.0 ):css

步驟2:編寫代碼,引入步驟1中發佈的某個api。

引入本地部署的 arcgis_js_v45_apihtml

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
 6     <title>Intro to SceneView - Create a 3D map</title>
 7     <style type="text/css">
 8  html, body, #viewDiv { height: 100%; width: 100%; }
 9     </style>
10     <script type="text/javascript">
11  dojoConfig = { 12  baseUrl: "http://localhost:8001/arcgis_js_v45_api/dojo"
13  }; 14     </script>
15     <link rel="stylesheet" href="http://127.0.0.1:8001/arcgis_js_v45_api/esri/css/main.css">
16     <script type="text/javascript" src="http://127.0.0.1:8001/arcgis_js_v45_api/init.js"></script>
17     <script>
18  require([ 19             "esri/Map", 20             "esri/views/SceneView", 21             "dojo/domReady!"
22  ], function (Map, SceneView) { 23             var map = new Map({ 24                 "basemap": "hybrid", 25                 "ground": "world-elevation"
26  }); 27             var view = new SceneView({ 28                 "map": map, 29                 "container": "viewDiv"
30  }); 31  }); 32     </script>
33 </head>
34 <body>
35 <div id="viewDiv"></div>
36 </body>
37 </html>

運行後界面能夠加載地圖,可是會出現一下幾個問題(這兩個問題都是跨域引發的):java

a. F12在控制檯出現'Access-Control-Allow-Origin'等錯誤信息web

b. 左上角的幾個按鈕"放到","縮小","切換3D平移或旋轉","羅盤儀"等按鈕沒有圖標json

步驟3:在發佈部署的api中添加Web.config文件,配置MIME映射和跨域節點。

web.config:api

<?xml version="1.0" encoding="utf-8"?>

<!-- 有關如何配置 ASP.NET 應用程序的詳細信息,請訪問 http://go.microsoft.com/fwlink/?LinkId=169433 -->

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <system.webServer>
    <staticContent>
      <remove fileExtension=".lrc" />
      <remove fileExtension=".ogg" />
      <remove fileExtension=".json" />
      <remove fileExtension=".wsv" />
      <remove fileExtension=".woff" />
      <remove fileExtension=".woff2" />
      <mimeMap fileExtension=".lrc" mimeType="text/plain" />
      <mimeMap fileExtension=".ogg" mimeType="audio/mpeg" />
      <mimeMap fileExtension=".json" mimeType="application/x-javascript" />
      <mimeMap fileExtension=".wsv" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/x-font-woff" />
    </staticContent>
    <httpProtocol> 
        <customHeaders> 
            <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/> 
            <add name="Access-Control-Allow-Headers" value="x-requested-with"/> 
            <add name="Access-Control-Allow-Origin" value="*" /> 
        </customHeaders> 
    </httpProtocol>
  </system.webServer>
</configuration>

 至此 步驟2 中的 a和b 兩個問題已經解決。跨域

步驟4.採用官方提供的代理方案。

     如今控制檯還剩下一個錯誤提示:「esriConfig.request.proxyUrl is not set,If making a request to a CORS-enabled server, please push the domain into esriConfig.request.corsEnabledServers」。服務器

   步驟4.1 下載官方代理源碼:resource-proxy-1.1.0

   步驟4.2 將DotNet下面四個文件在IIS中部署。

        代理站點部署目錄結構(端口:8002; 應用程序池:集成模式 + V4.0)app

        

   步驟4.3 設置 proxyUrl 和 corsDetection 屬性。修改後代碼以下:         

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
 6     <title>Intro to SceneView - Create a 3D map</title>
 7     <style type="text/css">
 8  html, body, #viewDiv { height: 100%; width: 100%; }
 9     </style>
10     <script type="text/javascript">
11  dojoConfig = { 12  baseUrl: "http://localhost:8001/arcgis_js_v45_api/dojo"
13  }; 14     </script>
15     <link rel="stylesheet" href="http://127.0.0.1:8001/arcgis_js_v45_api/esri/css/main.css">
16     <script type="text/javascript" src="http://127.0.0.1:8001/arcgis_js_v45_api/init.js"></script>
17     <script>
18  require([ 19             "esri/config", 20             "esri/Map", 21             "esri/views/SceneView", 22             "dojo/domReady!"
23  ], function (esriConfig, Map, SceneView) { 24  esriConfig.request.proxyUrl = "http://127.0.0.1:8002/proxy.ashx"; 25  esriConfig.request.corsDetection = true; 26             var map = new Map({ 27                 "basemap": "hybrid", 28                 "ground": "world-elevation"
29  }); 30             var view = new SceneView({ 31                 "map": map, 32                 "container": "viewDiv"
33  }); 34  }); 35     </script>
36 </head>
37 <body>
38 <div id="viewDiv"></div>
39 </body>
40 </html>

 

   步驟4.4 刷新頁面後發現還會出現某些文件沒法請求到:

         此問題解決很容易,從上面錯誤信息就能夠看出來,請求的wsv文件被禁止訪問。因此只須要在代理文件中的 proxy.config 配置文件中添加該Url地址匹配就好了。以下所示:

         控制檯錯誤信息

         

         proxy.config:

         

 

 

至此控制檯的錯誤已所有解決

相關文章
相關標籤/搜索