Skip To Content

Programmiermethoden für Erweiterungen

Zur Erweiterung eines Karten- oder Image-Services (SOE oder SOI) wird normalerweise ein Code programmiert, der einige der erforderlichen Schnittstellen implementiert und die Geschäftslogik ausführt. Wenn Sie in Java arbeiten, können Sie damit beginnen, eine Erweiterung mithilfe eines Eclipse-Plug-In-Assistenten zu erstellen. Wenn Sie in .NET arbeiten, beginnen Sie in Visual Studio mit einem Vorlagenprojekt. Der Assistent und die Vorlagen stellen sicher, dass die Erweiterung die erforderlichen Schnittstellen implementiert und auf REST- oder SOAP-Web-Service-Aufrufe mithilfe von SOESupport reagieren kann.

Ausführliche Anweisungen zur Codierung von Erweiterungen finden Sie in der Dokumentation für das SDK, das Sie verwenden. Unter Windows haben Sie auch die Möglichkeit, Erweiterungen in C++ zu erstellen. Ein Beispiel dazu finden Sie im ArcObjects SDK for C++.

Geeignete Klassen und Schnittstellen

Welche Klassen und Schnittstellen beim Entwickeln von SOEs und SOIs verwendet werden können, hängt von dem SDK, das Sie verwenden, ab.

ArcObjects SDKs (für .NET und für Java)

Erweiterungen werden nur für dynamische (nicht gecachte) Karten- und Image-Services unterstützt. Da Karten- und Image-Services eine Service-Definitionsdatei verwenden und nicht direkt auf ein Kartendokument (MXD) zugreifen, sind beim Programmieren von Erweiterungen bestimmte Classes zu vermeiden und andere wiederum vorzuziehen.

Vermeiden Sie die Nutzung von ArcObjects aus der Carto-Bibliothek, die eigens für den Einsatz mit MXDs vorgesehen sind. Zu diesen zählen IMap, ILayer und Elemente, die sich auf Datenrahmen und Seitenlayouts beziehen. Verwenden Sie stattdessen ArcObjects, die für den Einsatz mit Kartenservices konzipiert wurden, z. B. MapServer, MapLayerInfos und MapDescription. Verwenden Sie die Oberfläche IMapServerDataAccess, um auf Datasets zuzugreifen, die den Layern in Ihrer Karte zugrunde liegen.

Bibliotheken, die nicht unmittelbar mit dem Kartendokument in Beziehung stehen, z. B. ESRI.ArcGIS.Geometry und ESRI.ArcGIS.Geodatabase for .NET oder com.esri.arcgis.geometry und com.esri.arcgis.geodatabase for Java, können immer in Erweiterungen verwendet werden.

ArcGIS Enterprise SDK

Sie können ArcGIS Enterprise SDK verwenden, um Serverobjekterweiterungen (SOEs) zum Erweitern von Kartenservices und Serverobjekt-Interceptoren (SOIs) zum Anpassen der Funktionen von Karten- und Image-Services (einschließlich Service-Erweiterungen, wie Feature-Services und OGC-kompatible Services) zu entwickeln.

ArcGIS Enterprise SDK befindet sich in einem Paket mit einem Kernsatz aus Bibliotheken, um die Entwicklung benutzerdefinierter Erweiterungen zu vereinfachen. Die verfügbaren Klassen und Schnittstellen in diesem SDK wurden für die Verwendung in Erweiterungen gestaltet.

Überlegungen zu Serverobjekt-Interceptoren

Beim Erstellen von Serverobjekt-Interceptoren (SOIs) müssen alle eingehenden Anforderungstypen auch dann behandelt werden, wenn der SOI nur zur Verbesserung einer oder mehrerer der vielen Operationen dienen soll, die mit Karten- und Image-Services verfügbar sind. In diesem Abschnitt werden die zu behandelnden Schnittstellen und die Methoden erläutert, deren Verfügbarkeit davon abhängt, ob Sie sicherheitsbezogene oder nicht sicherheitsbezogene Funktionen implementieren.

Abfangen von REST-, SOAP- und OGC-Service-Anforderungen

Karten- und Image-Services unterstützen drei Anforderungstypen:

  • REST-API-Anforderungen
  • SOAP-API-Anforderungen
  • OGC-Anforderungen

Die folgenden Schnittstellen müssen implementiert werden, damit ein SOI diese Anforderungen abfangen kann:

  • IRESTRequestHandler: Zum Behandeln von REST-API-Anforderungen
  • IRequestHandler2 (für ArcObjects SDKs) oder IRequestHandler (für ArcGIS Enterprise SDK): Zum Behandeln von SOAP-API-Anforderungen, einschließlich Anforderungen durch ArcMap und ArcGIS Pro
  • IWebRequestHandler: Zum Behandeln von OGC-Anforderungen

Alle oben genannten Schnittstellen müssen auch dann behandelt werden, wenn eine bestimmte Service-Konfiguration keine OGC-Anforderungen unterstützt. Je nach Geschäftslogik, die Sie implementieren, können Sie zwei allgemeine Ansätze nutzen.

Hinweis:

Wenn ein Karten- oder ein Image-Service gecachte Kacheln enthält, können Anforderungen an diese Kacheln nicht abgefangen werden.

Wenn Sie einen SOI implementieren, der Sicherheitsfunktionen ausführt, empfiehlt es sich, zunächst alle oben aufgeführten Schnittstellen zu implementieren und alle Anforderungen zu blockieren. Wenn Sie Ihren benutzerdefinierten Code implementieren, können Sie den Zugriff logisch über die Schnittstellen oben gewähren. Wenn Sie eingehende Anforderungen nicht zuerst blockieren und dann den Zugriff wie gewünscht erlauben, gehen Sie ungewollt ein höheres Sicherheitsrisiko ein.

Wenn Sie keine Sicherheitsfunktionen implementieren, können Sie die drei Schnittstellen implementieren, indem Sie alle Anforderungen über die zugrunde liegende Standardimplementierung übergeben, um normale Funktionen zu erlauben. Fügen Sie anschließend Geschäftslogik zu den Operationen hinzu, die Sie verbessern möchten.

Wenn ein Service mit einem SOI konfiguriert wird, werden alle Service-Anforderungen vom Server-Framework an den SOI weitergeleitet. Der SOI ist dafür zuständig, die Anforderungen zu filtern, die Anforderung an die Karten- oder Image-Service-Objekte (falls zutreffend) zu delegieren und anschließend optional die Antworten zu verarbeiten, bevor sie an den Client zurückgesendet werden.

Implementieren der Zugriffssteuerung auf Layer-Ebene

Wenn Sie die Zugriffssteuerung auf Layer-Ebene über einen SOI implementieren, müssen Sie außerdem den REST-Handler von ArcGIS Server konfigurieren, um das Caching aller im Service enthaltenen Layer-Ressourcen zu deaktivieren. Dadurch können Sie Operationen abfangen und Layer herausfiltern, die nicht zulässig sind. Dies kann deaktiviert werden, indem Sie die Eigenschaft disableCaching des Service im ArcGIS Server-Administratorverzeichnis auf true festlegen.

  1. Öffnen Sie das ArcGIS Server-Administratorverzeichnis, und melden Sie sich an. Die URL hat oft das Format https://gisserver.domain.com:6443/arcgis/admin.
  2. Klicken Sie auf Services und auf den Namen des gewünschten Service. Wenn er nicht in der Liste angezeigt wird, befindet er sich möglicherweise in einem Ordner in diesem Verzeichnis.
  3. Klicken Sie auf Bearbeiten.
  4. Fügen Sie im Abschnitt properties des Service-JSON die Eigenschaft disableCaching hinzu, und legen Sie deren Wert auf true fest, z. B.:
    "properties": {
      ...
      "disableCaching": "true",
      ...
     },
  5. Klicken Sie auf Änderungen speichern.

Erstellen einer SOE-Datei

Erweiterungen (SOEs oder SOIs) werden in einer .soe-Datei gekapselt. Die .soe-Datei enthält alle Informationen, die zum Registrieren der Erweiterung bei ArcGIS Server erforderlich sind. Bei der Verwendung von .NET wird die .soe-Datei angelegt, wenn Sie das Projekt anhand der Vorlage erstellen. Bei der Verwendung von Java erstellen Sie die .soe-Datei mit einem in Eclipse erstellten Assistenten. Die .soe-Datei kann auch mit von Esri bereitgestellten Befehlszeilendienstprogrammen erstellt werden, die manuell ausgeführt oder in automatisierte Build-Skripte integriert werden können.

Bei Erweiterungen, die mit dem ArcGIS Enterprise SDK entwickelt werden, wird das Suffix _ent an den Namen der .soe-Datei angehängt. Beispiel: Bei einer Erweiterung mit dem Namen SimpleRESTSOE erhält die Ausgabedatei den Namen SimpleRESTSOE_ent.soe.