ArcGIS クライアントで実行できるカスタム ロジックを使用して、ArcGIS Server マップおよびイメージ サービス (フィーチャ サービスのようなマップおよび イメージ サービス エクステンションを含む) を拡張できます。これらのサービス タイプを拡張するには、2 つの方法があります。
- サーバー オブジェクト エクステンション (SOE) - 新しいサービスのオペレーションを作成して、マップまたはイメージ サービスの基本機能を拡張できます。明確に定義されたビジネス ロジックを実行するときに、ArcGIS クライアント API では簡単に実現できない場合は SOE を使用することが適切です。ほとんどの SOE は、ArcObjects コードを使用して GIS データとマップを操作することで、これらの拡張を行います。ArcObjects は ArcGIS を構築するための中心的なコンポーネントであり、これを利用することで GIS 機能を最も柔軟に記述できます。
- サーバー オブジェクト インターセプター (SOI) - マップまたはイメージ サービスの既存の組み込み操作に対するリクエストをインターセプトできます。これにより、既存のクライアントにシームレスな方法で、既存の操作を優先することで、カスタム ロジックを実行したり、これらのサービスの振舞いを変更することができます。これらのクライアントは、ArcGIS API for Javascript、ArcGIS Runtime SDK などで構築されたアプリケーションである必要があります。
以下のセクションでは、各タイプの詳細について説明します。
サーバー オブジェクト エクステンション (SOE)
マップおよびイメージ サービス (フィーチャ サービスのようなマップおよびイメージ サービス エクステンションを含む) のベース機能を拡張して新しいサービス操作を作成する場合は、SOE が適切です。SOE には以下の利点があります。
- SOE を REST (Representational State Transfer) または SOAP (Simple Object Access Protocol) Web サービスとして公開し、ArcGIS クライアント API を基に構築されたカスタム クライアントおよびその他の REST または SOAP クライアントがこれらを簡単に呼び出せるようにできます。実際に、REST SOE は ArcGIS Services Directory に表示され、ArcGIS クライアント API が認識できる一般的なオブジェクト タイプを (ほとんどの場合は、JSON 形式で) 公開できます。
- SOE を構築するときには、ArcGIS Server で作業を実行する汎用的なメソッドを提供して、クライアントからサーバーに大量の呼び出しが発生しないようにします。SOE は ArcObjects ロジックを効果的にカプセル化し、呼び出しをすばやく実行するための理想的な環境を提供します。
他の方法では使用できないか、すばやく実行する必要のある ArcObjects の機能を公開する場合、SOE を開発できます。SOE は、経験豊かな開発者を対象としており、さまざまな開発プラットフォームの知識が必要です。ArcObjects SDK for Java には、検証に利用できるさまざまな SOE のサンプルが用意されています。
SOE の必要性
SOE は、Web 開発、ArcObjects、および Java または C# のような .NET ベースの言語などのプログラミング言語の知識が必要です。また、これらも配置プロセスを実施して、サーバーで使用できるようにする必要があります。サーバー オブジェクト エクステンションの開発を行う前に、他に簡単な方法がないか検討してください。
SOE 開発の代わりとして最も簡単な方法は、ビジネス ロジックを実行するジオプロセシング モデルを作成してから、これをサービスとして公開することです。ArcObjects コードを記述する代わりに、ModelBuilder を使用して必要なツールを対話的にドラッグ、ドロップ、および接続することができます。ジオプロセシング サービスでは非同期実行も可能であるため、ジョブを開始してからも、他の作業をしながら、実行結果を確認することができます。
ジオプロセシング サービスの短所として、メモリのフットプリントが比較的大きく、SOE より実行に時間がかかることが挙げられます。プロセスの実行回数が 1 日に数回だけであれば、これらの点は問題にならないでしょう。 ただし、プロセスを 1 日に何度も実行する場合や多数の同時ユーザーが発生する場合は、時間をかけて SOE を構築する価値があります。
ArcObjects を使用しなくても現在は達成できるさまざまなタスクに対して、これまで多くの開発者が ArcObjects コードを作成してきました。ArcObjects を使用せずに Web マッピングを利用する方法の詳細については、「サーバー オブジェクト エクステンションの代替手法」をご参照ください。
サーバー オブジェクト インターセプター (SOI)
既存のマップまたはイメージ サービス操作 (フィーチャ サービス操作などのマップおよびイメージ サービス エクステンションなど) の振舞いを変更する予定の場合は、SOI が適切です。たとえば、クエリまたはマップ イメージのエクスポート リクエストの振舞いを変更できます。SOI で実行可能なことの例は、次のとおりです。
- すべてのマップ イメージへのウォーターマークの追加
- レイヤー レベルのセキュリティの提供
- ユーザー ロールによる特定の操作へのアクセスの許可または却下
SOI の必要性
SOI は、Web 開発、ArcObjects、および Java または C# のような .NET ベースの言語などのプログラミング言語の知識が必要です。また、これらも配置プロセスを実施して、サーバーで使用できるようにする必要があります。サーバー オブジェクト インターセプターを開発する前に、これが、必要としている機能かどうか検討してください。
新しい機能でサーバーを拡張する予定の場合、SOE またはジオプロセシング モデルおよびスクリプトを検討してください。SOI は、既存のクライアント アプリケーションを意識しない方法で、既存の ArcGIS Server 操作に新しい機能または振舞いを追加する場合に最適です。
一連のエクステンションを使用して 1 つ以上のタスクを実行したい場合、SOI を使用して実現することができます。複数の SOI を、1 つ以上のサービスで一緒に連結することができます。SOI のリストと、それらがチェーン内で実行される順序を、いつでも変更できます。
デフォルトのマップまたはイメージ サービスが満たしていないセキュリティまたは監査要件など、カスタム ビジネス ロジックを実装する必要がある場合に、1 つ以上の SOI を作成することをお勧めします。次に例を示します。
- サーバーによって作成されたすべてのマップ イメージにウォーターマークを含める。一連の SOI を作成して、サーバーによって作成されたマップ イメージにカスタム ウォーターマークを重ね合わせます。これにより、組織またはホスティング企業は、すべての画像に対して適切にブランディングすることができます。
- すべてのリクエストを監査し、記録する。デバッグする目的の場合、リクエストで渡される入力パラメーターおよびユーザーの認証情報の詳細情報など、受信するリクエストなどの詳細情報を記録する一連の SOI を作成することができます。
- プロセス後の応答。空間データとその他のタイプのビジネス インテリジェンス データを統合するために、ArcGIS Server でサポートされていない各ビジネス システムの追加情報を、発信する応答に追加することができます。
- マップ サービスにおける操作レベルのアクセスの制御。ArcGIS Server は、サービスのすべてのユーザーのサービス操作の有効化またはアクセスの完全な無効化のみをサポートします。一連の SOI は、サービスに対する操作レベルのアクセスを実装するために、ユーザーのロールに基づいた受信リクエストをフィルタリングすることができます。
- マップ サービスにおけるレイヤー レベルのアクセスの制御。ArcGIS Server は、サービス レベルのデータ アクセスのみをサポートします。ユーザーに、すべてのサービスに対するフル アクセスが付与されているか、アクセスがまったく付与されていないかのいずれかです。一連の SOI を実装して、特定のレイヤーへのアクセスをフィルタリングしたり、ユーザーの ロールに基づいてレイヤー内のデータをフィルタリングすることもできます。
エクステンションの開発に必要な知識
エクステンションは、特定のサービス タイプ (マップまたはイメージ サービスのいずれか) のみに対して開発できます。たとえば、マップ およびイメージ サービスの両方で動作する汎用的なエクステンションを開発することはできません。この場合、マップ サービスとイメージ サービスの各サービス タイプに 1 つずつ、エクステンションを開発する必要があります。
エクステンションの開発者には、Java で ArcObjects を使用する方法についての知識が必要です。REST または SOAP の基本原理についての知識も必要です。Java を使用して開発したエクステンションは、ArcGIS for Server (Windows) および ArcGIS for Server (Linux) に配置できます。.NET で開発されたエクステンションは、ArcGIS for Server (Linux) に配置できません。
また、自動的に生成されるプロパティ ページ以外にエクステンションのカスタム プロパティ ページを記述する場合は、Windows フォームの開発または Java Swing の知識 (ArcCatalog ページの場合) や、HTML (Hypertext Markup Language) を使用した Web フォームの開発と JavaScript の知識 (Manager ページの場合) が必要です。