ArcObjects Library Reference  

Program

About the Find near features REST SOE Sample

[C#]

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Server;
using ESRI.ArcGIS;
using ESRI.ArcGIS.ADF.Connection.AGS;

namespace RegisterFindNearFeaturesRestSOE
{
    class Program
    {
        static void Main(string[] args)
        {
             // Must run as an user in the agsadmin group on the SOM
            ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsServerConnection =
                new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection();
            agsServerConnection.Host = "localhost";
            agsServerConnection.Connect();
            ESRI.ArcGIS.Server.IServerObjectAdmin2 serverObjectAdmin =
                agsServerConnection.ServerObjectAdmin as ESRI.ArcGIS.Server.IServerObjectAdmin2;

            // This name must match those defined for property pages 
            string extensionName = "FindNearFeaturesRestSOE";

            // Check command line arguments to see if SOE is to be unregistered
            if (args.Length == 1 && args[0] == "/unregister")
            {
                // Check whether the SOE is registered
                if (ExtensionRegistered(serverObjectAdmin, extensionName))
                {
                    // Delete the SOE
                    serverObjectAdmin.DeleteExtensionType("MapServer", extensionName);
                    Console.WriteLine(extensionName + " successfully unregistered");
                }
                else
                    Console.WriteLine(extensionName + " is not registered with ArcGIS Server");
            }
            else
            {
                // Check whether the SOE is registered
                if (!ExtensionRegistered(serverObjectAdmin, extensionName))
                {
                    // Use IServerObjectExtensionType3 to get access to info properties
                    ESRI.ArcGIS.Server.IServerObjectExtensionType3 serverObjectExtensionType = 
                        serverObjectAdmin.CreateExtensionType() as ESRI.ArcGIS.Server.IServerObjectExtensionType3;

                    // Must match the namespace and class name of the class implementing IServerObjectExtension
                    serverObjectExtensionType.CLSID = "FindNearFeaturesRestSOE.FindNearFeaturesRestSOE";                    
                    //serverObjectExtensionType.CLSID = "{C41E8674-F186-4a0c-8FC9-AAB7885EFD00}";
                    serverObjectExtensionType.Description = "Finds features within a distance from a location";
                    serverObjectExtensionType.Name = extensionName;
                    
                    // Name that will be shown in the capabilities list on property pages
                    serverObjectExtensionType.DisplayName = "FindNearFeatures REST";

                    // Use info properties to define capabilities and msd support
                    serverObjectExtensionType.Info.SetProperty("DefaultWebCapabilities", "GetInfo");
                    serverObjectExtensionType.Info.SetProperty("AllWebCapabilities", "GetInfo,FindFeatures");
                    serverObjectExtensionType.Info.SetProperty("SupportsMSD", "true");

                    // Required to enable exposure of SOE with ArcGIS Server REST endpoint
                    serverObjectExtensionType.Info.SetProperty("SupportsREST", "true");
                    
                    // Register the SOE with the server
                    serverObjectAdmin.AddExtensionType("MapServer", serverObjectExtensionType);

                    Console.WriteLine(extensionName + " successfully registered with ArcGIS Server");
                }
                else
                    Console.WriteLine(extensionName + " is already registered with ArcGIS Server");
            }

            Console.ReadLine();
        }

        // Checks whether an extension with the passed-in name is already registered with the passed-in server
        static private bool ExtensionRegistered(ESRI.ArcGIS.Server.IServerObjectAdmin2 serverObjectAdmin, string extensionName)
        {
            // Get the extensions that extend MapServer server objects
            ESRI.ArcGIS.Server.IEnumServerObjectExtensionType extensionTypes = serverObjectAdmin.GetExtensionTypes("MapServer");
            extensionTypes.Reset();

            // If an extension with a name matching that passed-in is found, return true
            ESRI.ArcGIS.Server.IServerObjectExtensionType extensionType = extensionTypes.Next();
            while (extensionType != null)
            {
                if (extensionType.Name == extensionName)
                    return true;

                extensionType = extensionTypes.Next();
            }

            // No matching extension was found, so return false
            return false;        
        }
    }
}

[Visual Basic .NET]

Program.vb

Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Server
Imports ESRI.ArcGIS
Imports ESRI.ArcGIS.ADF.Connection.AGS

Namespace RegisterFindNearFeaturesRestSOE_VBNet
    Friend Class Program
        Shared Sub Main(ByVal args() As String)
            ' Must run as an user in the agsadmin group on the SOM
            Dim agsServerConnection As New ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection()
            agsServerConnection.Host = "localhost"
            agsServerConnection.Connect()
            Dim serverObjectAdmin As ESRI.ArcGIS.Server.IServerObjectAdmin2 = TryCast(agsServerConnection.ServerObjectAdmin, ESRI.ArcGIS.Server.IServerObjectAdmin2)

            ' This name must match those defined for property pages 
            Dim extensionName As String = "FindNearFeaturesRestSOE_VBNet"

            ' Check command line arguments to see if SOE is to be unregistered
            If args.Length = 1 AndAlso args(0) = "/unregister" Then
                ' Check whether the SOE is registered
                If ExtensionRegistered(serverObjectAdmin, extensionName) Then
                    ' Delete the SOE
                    serverObjectAdmin.DeleteExtensionType("MapServer", extensionName)
                    Console.WriteLine(extensionName & " successfully unregistered")
                Else
                    Console.WriteLine(extensionName & " is not registered with ArcGIS Server")
                End If
            Else
                ' Check whether the SOE is registered
                If (Not ExtensionRegistered(serverObjectAdmin, extensionName)) Then
                    ' Use IServerObjectExtensionType3 to get access to info properties
                    Dim serverObjectExtensionType As ESRI.ArcGIS.Server.IServerObjectExtensionType3 = TryCast(serverObjectAdmin.CreateExtensionType(), ESRI.ArcGIS.Server.IServerObjectExtensionType3)

                    ' Must match the namespace and class name of the class implementing IServerObjectExtension
                    serverObjectExtensionType.CLSID = "FindNearFeaturesRestSOE_VBNet.FindNearFeaturesRestSOE_VBNet"
                    serverObjectExtensionType.Description = "Finds features within a distance from a location (VBNet)"
                    serverObjectExtensionType.Name = extensionName

                    ' Name that will be shown in the capabilities list on property pages
                    serverObjectExtensionType.DisplayName = "FindNearFeatures REST VBNet"

                    ' Use info properties to define capabilities and msd support
                    serverObjectExtensionType.Info.SetProperty("DefaultWebCapabilities", "GetInfo")
                    serverObjectExtensionType.Info.SetProperty("AllWebCapabilities", "GetInfo,FindFeatures")
                    serverObjectExtensionType.Info.SetProperty("SupportsMSD", "true")

                    ' Required to enable exposure of SOE with ArcGIS Server REST endpoint
                    serverObjectExtensionType.Info.SetProperty("SupportsREST", "true")

                    ' Register the SOE with the server
                    serverObjectAdmin.AddExtensionType("MapServer", serverObjectExtensionType)

                    Console.WriteLine(extensionName & " successfully registered with ArcGIS Server")
                Else
                    Console.WriteLine(extensionName & " is already registered with ArcGIS Server")
                End If
            End If

            Console.ReadLine()
        End Sub

        ' Checks whether an extension with the passed-in name is already registered with the passed-in server
        Private Shared Function ExtensionRegistered(ByVal serverObjectAdmin As ESRI.ArcGIS.Server.IServerObjectAdmin2, ByVal extensionName As String) As Boolean
            ' Get the extensions that extend MapServer server objects
            Dim extensionTypes As ESRI.ArcGIS.Server.IEnumServerObjectExtensionType = serverObjectAdmin.GetExtensionTypes("MapServer")
            extensionTypes.Reset()

            ' If an extension with a name matching that passed-in is found, return true
            Dim extensionType As ESRI.ArcGIS.Server.IServerObjectExtensionType = extensionTypes.Next()
            Do While extensionType IsNot Nothing
                If extensionType.Name = extensionName Then
                    Return True
                End If

                extensionType = extensionTypes.Next()
            Loop

            ' No matching extension was found, so return false
            Return False
        End Function
    End Class
End Namespace