SOI簡單體驗

2022-02-08 04:43:31 字數 2473 閱讀 4744

arcgis for server10.3.1中提供了乙個新的功能叫做soi。本文簡單的介紹soi概念,實現,在使用過程中的注意事項。閱讀本文和使用soi需要以下先決條件

soi是arcgis server 10.3.1中新增加的功能。故開發和部署soi需要安裝arcobject sdk 10.3.1 和 arcgis server 10.3.1。

了解soe開發的流程。

soi是server object interceptors的縮寫。從字面意思,是服務物件捕獲器。esri對其的介紹是,用來捕獲觸發地圖服務和影像服務內建操作的請求。

也即是任何呼叫server服務功能的前端,傳送的請求,都能在伺服器端被自定義的soi應用程式捕獲到。soi可以過濾到達的請求,也可以在response中新增內容返回前端。如下示意圖:

在網路開發中,有個常見的功能,就是開發防盜煉。即在上加logo等水印。在server的出圖操作中,可以運用soi,捕獲每次export map返回的結果。給結果加上水印。

除了這種情形,還有一些,比如,針對圖層和功能級別的控制都可以使用soi。

定位上,soe是server object extension 的縮寫,其旨在豐富sever伺服器端能夠提供的功能。而soi旨在對每次到達伺服器端的請求處理。

實現上,兩種的底層的實現原理其實是一樣的,編寫dll,註冊到伺服器端。且兩者的開發和部署的方式一樣。安裝了ao sdk 10.3.1的版本,在編輯中,新建專案可以看到多了乙個soi的模板。

soi開發編譯完後,也是生成soe檔案,在site中部署即可。可以直接說soi即是乙個soe的功能子集。在soe的開發模板中可以實現soi的這種功能。只不過使用soe獲取引數的過程,soi直接給你引數變數。具體怎麼實現,這裡就按下不表。

soi支援 以下三種請求的捕捉:

根據請求型別的不一樣,其需要實現的介面是不一樣的,上面三種請求型別,對應需要實現的介面如下:

三種都隸屬於命名空間esri.arcgis.esrisystem

需要注意的是,不管你想捕獲的請求是上面的那一種,這三個介面的是必須實現。如你只想捕獲rest請求,但是在模板除了新增irestrequesthandler的實現方法,其他兩個介面的方法也必須實現。 而你在其他兩個介面方法中,不編寫任何的處理**。看完這段話,也許會感到詫異,為何只需要控制一種請求,而需要實現三種方式,考慮下面的情形:

arcgis server發布的地圖服務,既通過rest也通過soap對外提供服務能力。如果在開發某乙個功能,特別是安全方面的控制的時候,如果只在rest的實現方式中新增控制**而soap中不新增,就soap這端會存在安全漏洞。這個時候的建議就是在三種實現中都處理所有的請求

三種實現方式中,rest是最為簡單的實現方式。所有的引數都是json的形式。其中有兩個必須實現的方式,其中下面的方法,是需要開發人員處理的:

public byte handlerestrequest(string capabilities, string resourcename, string

operationname, string operationinput, string outputformat, string

requestproperties, ref string responseproperties);

看下這個方法的中的輸入引數名,是不是對soi的實現一目了然。在這個方法中,通過對傳遞過來的引數就行判斷,就可以對請求進行過濾。

那怎麼對輸出,返回到前端的結果進行處理呢?

如果需要對結果進行處理,需要捕獲response。在模板中,上面函式的返回結果就是response。

可以宣告乙個response變數,來接受返回。可以把模板中的return改為var response

var response = restrequesthandler.handlerestrequest(

capabilities, resourcename, operationname, operationinput,

outputformat, requestproperties, out responseproperties);

獲取到response變數後對response的變數進行處理操作。

最後,在該函式的末尾自己,寫乙個序列化的函式return回去。可以參考esri.arcgis.soesupport中關於序列化與反序列化的內容。

開發完了就是部署了。需要注意的是,乙個服務只能啟用乙個soi。 本人也思索了下這種情形的原因,因為soi本身沒有增加服務的能力。在rest上,功能通過url提供,麼有功能增加,url就保持不變。乙個服務的多個soi的url是完全一樣。

另外兩種介面的實現的思路差不多,不同的是,處理的引數的型別不同。如soap的二進位制等。

如果有soe的開發經歷,開發soi還是很易上手的。一開始費了勁讀模板中utilities的實現,其實這部分的內容自己完全無需了解。直接用即可。

ConstraintLayout簡單體驗

constraintlayout 約束布局 的出現是為了在android應用布局中保持扁平的層次結構,減少布局的巢狀,為應用建立響應快速而靈敏的介面。constraintlayout可以替代其他布局。android studio在3.5.版本之後建立布局時,預設的布局根節點就是constraintl...

Office 2013簡單體驗

北京時間7月17日,微軟發布了下一代office軟體 office 2013。office 2013消費者預覽版版本號為office15,面向windows 7和windows 8使用者但不支援windows vista和windows xp。老使用者可以考慮公升級系統了。之前體驗過,和window...

單體模式的簡單實現

單體模式的思路 單體模式在多執行緒中容易出現被例項化多次的問題,因此要進行雙重為空判斷來緩解次問題 1.把建構函式的作用域改為私有的,那樣外面就不能new 2.通過乙個類的靜態方法得到乙個靜態例項 例如 public class a static a a null static a console....