Skip To Content

エクステンションのコーディング プラクティス

マップ サービスまたはイメージ サービス (SOE または SOI) を拡張するには、一般に、必要なインターフェイスを実装し、ビジネス ロジックを実行するコードを記述します。Eclipse プラグインのウィザードを使用してエクステンションの作成を開始できます。ウィザードを使用することで、エクステンションに必要なインターフェイスが実装され、REST または SOAP Web サービスの呼び出しに SOESupport のクラスを使用して応答できることが保証されます。

エクステンションのコーディング手順の詳細については、使用している SDK のドキュメントをご参照ください。

適切なクラスおよびインターフェイス

SOE と SOI の開発時に使用が許可されているクラスとインターフェイスは、使用している SDK によって異なります。

ArcObjects SDK (.NET および Java)

エクステンションは、マップ サービスとイメージ サービスでのみサポートされています。マップ サービスとイメージ サービスは、サービス定義ファイルを使用し、マップ ドキュメント (MXD) に直接アクセスしないため、エクステンションを記述するときに避ける必要があったり、使用を推奨される特定のクラスがあります。

MXD で使用するように特に設計されている Carto ライブラリの ArcObjects の使用を避けてください。これには、IMap、ILayer、およびデータ フレームやページ レイアウトに関連するアイテムがあります。代わりに、MapServer、MapLayerInfos、および MapDescription など、マップ サービスの操作用に設計されている ArcObjects を使用します。マップの各レイヤーの基盤となるデータセットにアクセスするには、インターフェイス IMapServerDataAccess を使用します。

マップ ドキュメントに直接関連しない com.esri.arcgis.geometrycom.esri.arcgis.geodatabase などのライブラリは、エクステンションで常に使用できます。

ArcGIS Enterprise SDK

エクステンションは、マップ サービスでのみサポートされています。

ArcGIS Enterprise SDK は、カスタム エクステンションの開発を容易にするためのライブラリのコア セットに付属しています。この SDK で利用できるクラスとインターフェイスはすべて、エクステンションで使用するように設計され、使用が許可されています。

サーバー オブジェクト インターセプター (SOI) の考慮事項

サーバー オブジェクト インターセプター (SOI) を作成する場合、SOI の目的が、マップおよびイメージ サービスで利用できる多くの操作のうち 1 つまたは少数の操作だけを強化することであっても、すべてのタイプの受信リクエストを処理する必要があります。このセクションでは、処理する必要のあるインターフェイスと利用可能な方法について説明します。これらは、実装する機能が、セキュリティに関連しているか、セキュリティ以外に関連しているかによって異なります。

REST、SOAP、および OGC サービス リクエストのインターセプト

マップおよびイメージ サービスは、3 つの異なるタイプのリクエストをサポートしています。

  • REST API リクエスト
  • SOAP API リクエスト
  • OGC リクエスト

SOI でこれらのリクエストをインターセプトできるようにするには、次のインターフェイスを実装する必要があります。

  • IRESTRequestHandler - REST API リクエストを処理する場合
  • IRequestHandler2 (ArcObjects SDK) または IRequestHandler (ArcGIS Enterprise SDK) - ArcGIS for Desktop クライアント (ArcMap や ArcGIS Pro など) が送信するリクエストを含む SOAP API リクエストを処理する場合
  • IWebRequestHandler - OGC リクエストを処理する場合

特定のサービス構成が OGC リクエストをサポートしていない場合でも、上記すべてのインターフェイスを処理する必要があります。実装するビジネス ロジックによって、2 つの一般的な方法を使用することができます。

セキュリティ機能を実行する SOI を実装する場合、はじめに、上記すべてのインターフェイスを実装し、すべてのリクエストをブロックすることをお勧めします。カスタム コードを実装するため、上記インターフェイスを使用してアクセスを論理的に許可することができます。最初に受信リクエストをブロックせずに、希望するアクセスを許可した場合、意図せずにセキュリティの脆弱性にさらされるリスクが高まります。

セキュリティ機能を実装しない場合、通常の機能を許可するために、基盤となる標準的な実装にすべてのリクエストを渡すことで、3 つのインターフェイスを実装することができます。次に、その他のビジネス ロジックを、強化する 1 つ以上の操作に追加します。

サービスを SOI で構成すると、サーバー ワークフローは、すべてのサービス リクエストを SOI にルーティングします。SOI の役割は、リクエストをフィルタリングし、リクエストを実際のマップまたはイメージ サービス オブジェクト (該当する場合) に委任し、次にオプションで、クライアントにリクエストが戻ってくる前に、応答を処理することです。

レイヤー レベルのアクセスの制御の実装

SOI を使用してレイヤー レベルのアクセスの制御を実装する場合、ArcGIS Server の REST ハンドラーを構成して、サービスに含まれるすべてのレイヤーのリソースのキャッシュ作成を無効化する必要があります。これにより、操作をインターセプトして、許可されないレイヤーを除外することができます。これを無効化するには、ArcGIS Server Administrator Directory で、サービスの disableCaching プロパティを true に設定します。

  1. ArcGIS Server Administrator Directory を開いて、サイン インします。多くの場合、URL の形式は https://gisserver.domain.com:6443/arcgis/admin です。
  2. [services] をクリックして、必要なサービスの名前をクリックします。リスト内にサービスが表示されていない場合は、このディレクトリのフォルダー内にあります。
  3. [edit] をクリックします。
  4. サービス JSON の properties セクションで、disableCaching プロパティを追加して、その値を true に設定します。たとえば、次のようになります。
    "properties": {
      ...
      "disableCaching": "true",
      ...
     },
  5. [編集の保存] をクリックします。

.soe ファイルの作成

エクステンション (SOE または SOI) は *.soe ファイルにカプセル化されます。*.soe ファイルには、エクステンションを ArcGIS Server に登録するために必要なすべての情報が含まれています。Ecliplse に組み込まれているウィザードを使用して、*.soe ファイルを作成します。 *.soe ファイルは、手動で実行したり、自動的に作成されるスクリプトに統合できる、Esri のコマンドライン ユーティリティを使用して作成できます。

ArcGIS Enterprise SDK を使用して開発されたエクステンションには、接尾辞 _ent がその *.soe ファイル名に追加されています。たとえば、SimpleRESTSOE という名前のエクステンションの出力ファイル名は SimpleRESTSOE_ent.soe になります。