如何將.Net SOE遷移升級到10.1上

孫群發表於2013-01-01

將.Net SOE升級到10.1需要你將大部分已經存在的程式碼拷貝到Visual Studio的REST模板或者SOAP模板中。之所以要這麼做是因為10.1的模板包含了打包的邏輯,可以將SOE打包成一個.soe檔案。這個檔案是在10.1中新增的,並且提供了將SOE一步部署到ArcGIS for Server上的能力。當SOE專案被建立的時候,這個.soe檔案也隨之被建立。

10.1模板的另一個優勢是需要的引用已經指向了主要的互動式程式集,這些程式集封裝在ArcObjects SDK中。如果你的專案需要其他的引用而不是模板中提供的這些,那麼你需要手動新增這些引用。

在10.0或更早的版本中建立的SOE依賴於ArcGIS Server Local(分散式元件物件模型) Connections。但是在ArcGIS for Server10.1中不能使用了。這些SOE需要作為REST或SOAP Web服務進行程式碼重構。

將SOE從10.0升級到10.1的步驟如下:

1.如果這個SOE以前在你的機器上註冊過,那麼用命令列(比如regasm <path to DLL> /codebase /u)進行反註冊。

2.開啟Visual Studio 2010,單擊 檔案->新建->專案。

3.在安裝的模板樹中,展開Visual C#->ArcGIS->Server Object Extensions。

4.在”新建專案“對話方塊的最頂部選擇.Net Framework版本為3.5。

5.選擇REST或SOAP模板,寫入SOE的名稱,選擇儲存的路徑,然後單擊確定按鈕。

6.增加模板中沒有的引用或資料夾。

7.在模板中修改.Net attribute SOE以使其包含能力(capabilities)、描述、顯示名稱、屬性以及你的SOE支援的Web架構。

在10.1之前,這些值是在SOE的註冊程式碼中設定的。一個C#的SOE如下所示:

[ServerObjectExtension("MapServer", AllCapabilities = "GetCommonInfo;GetSecretInfo",
    DefaultCapabilities = "GetCommonInfo", Description = 
    "An example SOE for the help system", DisplayName = "My Sample SOE", Properties 
    = "PropertyA=500;PropertyB=Cities", SupportsREST = true, SupportsSOAP = false)]

8.從你10.1版本之前的SOE中拷貝整個類的程式碼(出去類的宣告)並替換模板中相應的程式碼。10.1中SOEs沒有從ServicedComponent中繼承,也不需要引入1System.EnterpriseServices,除此之外,0.1中引用類的程式碼與10.0中相同。如果你想完整的拷貝和貼上,你應該移除這些內容。你可以使用10.1的模板和示例作為一個導引。

當你想移植一個 C# REST SOE的時候,下面的程式碼展示了你應該移除和替換10.0中的哪些內容:

public class MySampleSOE: IServerObjectExtension, IObjectConstruct,
    IRESTRequestHandler
{
    // Delete 10.1 template code and paste your 
    //   corresponding 10.0 code here.
}

如果與10.0的SOE相比10.1的SOE更改了名稱,那麼在建構函式中更新SOE的名稱。檢視如下的程式碼示例:

public MySampleSOE()
{
    soe_name = this.GetType().Name;
    logger = new ServerLogger();
    reqHandler = new SoeRestImpl(soe_name, CreateRestSchema())as IRESTRequestHandler;
}

9.儲存解決方案,並且編譯。這會在你的專案的bin目錄下建立一個.soe檔案。

10.將你的SOE部署到ArcGIS Server上請參見How to deploy a server object extension to ArcGIS Server

相關文章