ArcGIS 服務對象擴展(SOE)新手自學筆記(1):初識SOE


1.SOE介紹

  在ArcGIS 10.1中ArcGIS Server不在支持DCOM方式的連接,這也就意味着我們不能通過本地方式的連接使用ArcObjects提供的更多功能,所以我們推薦一種新的方式來實現這些功能,這種方式就是SOE服務器對象擴展。SOE存在於整個服務對象的生存期內,可以利用服務對象的資源並對其進行擴展。一個SOE通常在服務對象創建是初始化,並且在整個服務對象的生存期內只會被創建一次。SOE支持SOAP和REST兩種訪問方式,其通過強大的AO來擴展服務對象,並可以運行在一個沒有AO的客戶端中。

  SOE特別適用於那些使用ArcGIS APIs無法完成的復雜業務邏輯功能。SOE可以提供粗粒度的接口,一次完成復雜的工作,而不是向服務器端發送大量的請求。目前大多數Gis公司都有管網項目,而ArcGIS APIs並沒有為我們提供幾何網絡的有關內容,工程師們大多數通過利用AE在后台完成分析操作,然后返回json格式數據。這樣每個公司可能會有一套自己的函數庫用來完成以上問題,SOE的出現剛好可以用來提供統一的方法來解決這個問題,且其執行速度很快。

  SOE比較適合那些有多種平台工作經驗的開發者,開發一個SOE通常會用到AO、.NET或Java、REST或SOAP Web服務通信技術。

2.重要接口

  首先我們來介紹幾個必要的接口(REST方式):IServerObjectExtension、IObjectConstruct(可選)、IRESTQuestHandler

  IServerObjectExtension接口主要由兩個方法:

  Init---該函數有一個IServerObjectHelper類型的參數。該函數在服務啟動時被調用,並將IServerObjectHelper對象傳入,此接口是對Server對象弱引用,可以通過其ServerObject屬性得到Server對象。

  Shutdown---該方法用在服務器關閉時調用,經常我們在該方法中釋放SOE中使用的資源。

 

  IObjectConstruct只有一個方法:Construct();該方法在Init方法執行后立即執行,該方法也只會執行一次,通常用來配置SOE屬性,也可以將比較耗費資源的邏輯放在這個方法中。比如獲取地圖代碼,或者獲取一個每次請求都會被操作的圖層。

 

  IRESTQuestHandler接口主要有以下兩個方法:

  GetSchema() ---以JSON格式返回SOE的資源列表

  HandleRESTREquest() 方法主要有兩個作用:回調資源和操作的方法、獲取資源在實例級別的描述。該方法在識別這兩個作用的時候是通過operationName參數,如果該參數是空字符產那就是第二個作用,否則是第一個作用。
    該方法的參數如下:
      (1).String capabilities:一組被資源授權的操作,可以為空字符串
      (2).String resourceName: 資源名稱. 空字符串表示根級別,子資源會通過‘/’ 表示
      (3).String operationName: 操作名稱
      (4).String operationInput: 操作的參數,JSON格式
      (5).String outputFormat:客戶端請求的輸出格式,如JSON,AMF
      (6).String[] responseProperties: 通過操作返回的一組鍵值對,逗號分開

3.大致流程

  (1)編寫代碼。通常使用ESRI提供的REST SOE模板

  (2)在每台SOC機器上注冊SOE COM組件

  (3)將SOE注冊到ArcGISServer中

  (4)為ArcCatalog或者Manager編寫並部署一個屬性頁(可選)

  (5)在Server中啟動SOE,並測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM