REST SOE模板概覽

孫群發表於2013-01-26

本文將解釋REST SOE模板中的部分程式碼的含義。關於如何開啟該模板,請參見如何在Visual Studio中開啟REST SOE模板

我們知道一個SOE就是你伺服器上的一個COM類,這一點很重要。所以SOE中有幾行和COM相關的程式碼,這些程式碼給你的SOE分配了一個唯一的ID,並使它對COM是可見的。你也會看到與SOE相關的一些attributes,可以用來定義SOE的顯示名稱、屬性和能力(有時候在ArcGIS的對話方塊中稱作“允許的操作”)。示例程式碼如下:

[C#]

[ComVisible(true)][Guid("fbcd47be-14e5-4c65-b49d-7cdb6871f30a")][ClassInterface
    (ClassInterfaceType.None)][ServerObjectExtension("MapServer", AllCapabilities = 
    "", DefaultCapabilities = "", Description = "Insert SOE Description here",
    DisplayName = "SimpleRestSoe1", Properties = "", SupportsREST = true,
    SupportsSOAP = false)]

[VB.NET]

<ServerObjectExtension("MapServer", AllCapabilities
= "", DefaultCapabilities
= "", _
  Description
= "Insert SOE Description here", DisplayName
= "SimpleRestSoe1", 
  Properties
= "", SupportsREST
= True, SupportsSOAP
= False)>

你無須更改這些程式碼。當你建立專案的時候,GUID會自動分配。

你會注意到你的SOE類是實現了一些介面,程式碼如下:

[C#]

public class SimpleRestSoe1: IServerObjectExtension, IObjectConstruct,
    IRESTRequestHandler

[VB.NET]

Public Class RestSOE1
    Implements IServerObjectExtension, IObjectConstruct, IRESTRequestHandler

如下的介面都是建立REST SOE所必需的,各個介面的功能如下所示:

IServerObjectExtension——該介面包含了Init()和Shutdown()方法,分別用於啟動和關閉SOE。你無需關注模板中的這部分程式碼,除非你要在關閉SOE時銷燬一些資源。如果在SOE第一次啟動的時候,你需要執行一些邏輯程式碼,不要把程式碼寫在Init()函式中或者SOE的建構函式中,你應該將程式碼寫在下面的IObjectConstruct.Construct() method中。

IObjectConstruct——該介面僅僅包含了一個方法 Construct(),該方法在你的SOE第一次啟用的時候執行。你應該把重要的業務邏輯程式碼(不需要在每次請求的時候都執行的程式碼)寫在此處。比如,如果你知道你總要處理地圖中的某一個圖層,那麼你可以把獲取該圖層的程式碼寫在此處。

IRESTRequestHandler——該介面用於處理REST請求和響應。該介面中的方法建立schema並處理請求。

在SOE的建構函式中,你會發現SoeRestImpl 類被例項化了,程式碼如下所示:

[C#]

reqHandler = new SoeRestImpl(soe_name, CreateRestSchema())as IRESTRequestHandler;

[VB.NET]

Dim restImpl As New SoeRestImpl(c_SOEName, rootResource)
reqHandler = CType(restImpl, IRESTRequestHandler)

SoeRestImpl類用於如下功能:

a.驗證SOE的schema

b.驗證HandleRESTRequest 呼叫中的資源名和操作名

c.記錄服務呼叫和響應

d.處理錯誤

SoeRestImpl類實現了IRESTRequestHandler介面。一般情況下,SOE類包含了一個SoeRestImpl類的例項並儲存了對IRESTRequestHandler介面的引用。你可以在模板中看到這部分內容。

模板中剩餘的函式用於定義REST SOE可以做什麼以及如何處理每一個SOE請求。CreateRestSchema() 方法定義了SOE中可獲得的資源和操作。每個資源和操作都有一個相關的處理函式,當請求資源或執行操作的時候,相應的處理函式就會被呼叫。模板中包含了一個示例資源處理函式RootResHandler()以及一個示例操作處理函式SampleOperHandler()。

相關文章