10.0 .NET サーバ オブジェクト エクステンションの 10.1 以降への移行

ArcGIS 10.1 で開発した .NET サーバ オブジェクト エクステンション(SOE)は、バージョン 10.2 以降でも使用できます。ただし、バージョン 10.0 で開発した SOE を使用する場合は、移行のための作業が必要です。このトピックでは、バージョン 10.0 の SOE を 10.1 以降のバージョンで動作するように移行する方法について説明します。

バージョン 10.0 の .NET サーバ オブジェクト エクステンション(SOE)を移行するには、既存の SOE コードの大部分を REST または SOAP SOE 用の Visual Studio テンプレートにコピーする必要があります。この作業が必要になるのは、テンプレートに *.soe ファイルを作成するためのパッケージ ロジックが含まれているからです。10.1 で配置されたこのファイルにより、SOE を 1 つのステップで ArcGIS Server に配置できます。*.soe ファイルは、プロジェクトを構築したときに作成されます。

このテンプレートのもう 1 つの利点は、参照が ArcObjects SDK に付属のプライマリ相互運用アセンブリをすでにポイントしていることです。このテンプレートに含まれていない参照が必要なプロジェクトでは、それらの参照を手動で追加する必要があります。

ArcGIS Server Local(DCOM)接続に依存する 10.0 以前のバージョンで作成された SOE は、バージョン 10.1 以降のバージョンでは使用できません。それらの SOE は REST または SOAP Web サービスとして機能するようにリファクタリングする必要があります。

10.0 SOE を移行する手順は次のとおりです。

手順:
  1. SOE をコンピュータに登録している場合は、regasm <DLL のパス> /codebase /u などのコマンドを使用して登録を解除します。
  2. Visual Studio 2010 を開いて、[ファイル] → [新規作成] → [プロジェクト] の順にクリックします。
  3. [インストールされたテンプレート] ツリーで [Visual C#] → [ArcGIS] → [Server Object Extensions] の順に展開します。
  4. [新しいプロジェクト] ダイアログ ボックスの最上部で、ドロップダウン メニューから [.NET Framework 3.5] を選択します。
  5. REST または SOAP テンプレートを選択し、SOE の名前と場所を入力して [OK] をクリックします。
  6. プロジェクトで必要な参照とディレクティブがまだテンプレートに含まれていない場合は、追加します。
  7. テンプレート コードで、.NET 属性の ServerObjectExtension を変更して、SOE のケーパビリティ、説明、表示名、プロパティ、サポートされる Web サービス アーキテクチャを含めます。これらは、10.0 以前のバージョンで SOE 登録コードに設定していた種類の値です。C# の例は次のようになります。
    [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)]
    

    上の SOE には、GetCommonInfo および GetSecretInfo という 2 つの利用可能なケーパビリティがあります。ただし、GetCommonInfo だけがデフォルトで有効にされます。

    同様に、この SOE には、Property A(デフォルト値は 500)と Property B(デフォルト値は Cities)という 2 つのプロパティがあります。すべてのプロパティが最初は文字列として扱われます。

  8. クラス コード全体(ただしクラス宣言は除く)を 10.0 の SOE からコピーして、テンプレートの対応するコードを置き換えます。10.1 以降のバージョンの SOE が ServicedComponent から取得されず、System.EnterpriseServices の参照を必要としない点を除いて、ボイラープレート クラス コードは 10.0 のコードと同じです。完全にコピーして貼り付ける場合は、これらのアイテムを削除する必要があります。このテンプレートとサンプルを参考にすることができます。

    下の例は、REST SOE を移行するときに、削除し、10.0 コードに置き換えるものを示しています。

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

    10.1 以降のバージョンの SOE の名前が 10.0 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 に配置します。
5/20/2014