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