Migrieren einer .NET-Serverobjekterweiterung nach Version 10.1

Wenn Sie eine .NET-Serverobjekterweiterung (SOE) nach Version 10.1 migrieren möchten, müssen Sie den größten Teil des vorhandenen SOE-Codes in die Visual Studio-Vorlagen von Version 10.1 für REST oder SOAP SOEs kopieren. Dies ist erforderlich, weil die Vorlagen von Version 10.1 die Paketlogik zum Erstellen einer SOE-Datei beinhalten. Diese Datei ist in Version 10.1 neu und ermöglicht Ihnen die Bereitstellung Ihrer SOE auf dem ArcGIS-Server in einem Schritt. Die SOE-Datei wird erstellt, wenn Sie das Projekt erstellen.

Ein weiterer Vorteil der Vorlage von Version 10.1 besteht darin, dass bereits auf primäre Interop-Assemblys verwiesen wird, die mit der ArcObjects SDK für 10.1 ausgeliefert wird. Wenn für das Projekt andere Referenzen als die in der Vorlage enthaltenen erforderlich sind, müssen diese manuell hinzugefügt werden.

In Version 10.0 und früheren Versionen erstellte SOEs, die auf lokalen ArcGIS-Server-Verbindungen (DCOM) basieren, können in Version 10.1 nicht verwendet werden. Diese SOES sollten so umgewandelt werden, dass sie als REST- oder SOAP-Web-Services fungieren.

Zum Migrieren einer SOE von 10.0 nach 10.1 führen Sie die folgenden Schritte aus:

Schritte:
  1. Wenn die SOE zuvor auf Ihrem Computer registriert wurde, heben Sie die Registrierung mit einem Befehl wie beispielsweise regasm <path to DLL> /codebase /u auf.
  2. Öffnen Sie Visual Studio 2010 und klicken Sie auf Datei > Neu > Projekt.
  3. Blenden Sie im Verzeichnis "Installierte Vorlagen" Visual C# > ArcGIS > Serverobjekterweiterungen ein.
  4. Wählen Sie oben im Dialogfeld Neues Projekt den Eintrag .NET Framework 3.5 aus dem Dropdownmenü.
  5. Wählen Sie zwischen den REST- oder SOAP-Vorlagen aus, geben Sie einen Namen und einen Speicherort für die SOE und klicken Sie dann auf OK.
  6. Fügen Sie die für das Projekt erforderlichen Referenzen und Direktiven hinzu, die nicht bereits in der Vorlage enthalten sind.
  7. Ändern Sie im Vorlagencode die .NET-Attribut-ServerObjectExtension so, dass sie die Funktionen, die Beschreibung, den Anzeigenamen, die Eigenschaften und die unterstützten Web-Service-Architekturen für die SOE enthalten. Hierbei handelt es sich um die Arten von Werten, die im SOE-Registrierungscode von Versionen vor 10.1 festgelegt wurden. Ein Beispiel für C# könnte so aussehen:
    [ServerObjectExtension("MapServer",
            AllCapabilities = "GetCommonInfo;GetSecretInfo",
            DefaultCapabilities = "GetCommonInfo",
            Description = "An example SOE for the help system",
            DisplayName = "My Sample SOE",
            Properties = "PropertyA=500;PropertyB=Cities",
            SupportsREST = true,
            SupportsSOAP = false)]
    

    Die oben genannte SOE verfügt über zwei Funktionen: GetCommonInfo and GetSecretInfo. Standardmäßig ist jedoch nur die Funktion GetCommonInfo aktiviert.

    Entsprechend gibt es zwei Eigenschaften für diese SOE: Eigenschaft A mit dem Standardwert "500" und Eigenschaft B mit dem Standardwert "Cities". Alle Eigenschaften werden zunächst wie Zeichenfolgen behandelt.

  8. Kopieren Sie den gesamten Klassencode (jedoch nicht die Klassendeklaration) aus der SOE der Vorversion von 10.1 und ersetzen Sie den entsprechenden Code in der Vorlage. Der Standardklassencode von Version 10.1 ist mit dem Code von Version 10.0 identisch, SOEs aus Version 10.1 stammen jedoch weder aus ServicedComponent noch erfordern Sie einen Verweis auf System.EnterpriseServices. Sie sollten diese Elemente entfernen, wenn Sie einen vollständigen Kopieren- und Einfügen-Vorgang ausführen. Sie können die Vorlage und Beispiele aus Version 10.1 als Leitfaden verwenden.

    Im folgenden Beispiel wird verdeutlicht, welche Elemente beim Migrieren einer REST-SOE im Code von Version 10.0 entfernt und ersetzt werden sollten.

    public class MySampleSOE : IServerObjectExtension, IObjectConstruct, IRESTRequestHandler
        {
           // Delete 10.1 template code and paste your 
           //   corresponding 10.0 code here.
        }
    

    Wenn die SOE aus Version 10.1 einen anderen Namen hat als die aus Version 10.0, müssen Sie den SOE-Namen im Konstruktor aktualisieren.

    public MySampleSOE()
            {
                soe_name = this.GetType().Name;
                logger = new ServerLogger();
                reqHandler = new SoeRestImpl(soe_name, CreateRestSchema()) as IRESTRequestHandler;
            }
    
  9. Speichern Sie die Lösung und erstellen Sie das Projekt. Wenn die Erstellung erfolgreich durchgeführt wurde, wird eine SOE-Datei im Verzeichnis "Bin" des Projekts erstellt.
  10. Stellen Sie die SOE anhand der Anweisungen unter Bereitstellen einer Serverobjekterweiterung auf dem ArcGIS-Server bereit.
9/23/2013