Skip To Content

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

このトピックの内容
注意:

サーバー オブジェクト インターセプター (SOI) は、10.3.1 の新機能です。このトピックに記載されている SOI の情報は 10.3.1 にのみ適用されます。

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

ArcObjects SDK でエクステンションをコーディングする詳細な手順については、下記をご参照ください。Windows 上で C++ を使用してエクステンションを作成することもできます。また、サンプルが ArcObjects SDK for C++ に収録されています。

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

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

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

マップ ドキュメントに直接関連しない ESRI.ArcGIS.Geometry および ESRI.ArcGIS.Geodatabase for .NET または com.esri.arcgis.geometry および com.esri.arcgis.geodatabase for Java などのライブラリは、エクステンションで常に使用できます。

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

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

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

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

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

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

  • IRESTRequestHandler - REST API を処理する場合
  • IRequestHandler2 - SOAP API リクエスト (ArcGIS for Desktop クライアント (ArcMap など) によって作成されたリクエストなど) を処理する場合
  • 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 の形式は通常、http://gisserver.domain.com:6080/arcgis/admin です。
  2. [services] をクリックして、必要なサービスの名前をクリックします。リスト内にサービスが表示されていない場合は、このディレクトリのフォルダー内にあります。
  3. [edit] をクリックします。
  4. サービス JSON の properties セクションで、disableCaching プロパティを追加して、その値を true に設定します。たとえば、次のようになります。
    "properties": {
      ...
      "disableCaching": "true",
      ...
     },
  5. [Save Edits] をクリックします。

.soe ファイルの作成

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