Server spatial query server object extension
RegisterSOE_VBNet\Program.vb
' Copyright 2010 ESRI
' 
' All rights reserved under the copyright laws of the United States
' and applicable international laws, treaties, and conventions.
' 
' You may freely redistribute and use this sample code, with or
' without modification, provided you include the original copyright
' notice and use restrictions.
' 
' See the use restrictions.
' 

Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Text

Namespace RegisterSOE_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 = "SpatialQuerySOE_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
          Dim serverObjectExtensionType As ESRI.ArcGIS.Server.IServerObjectExtensionType2 = TryCast(serverObjectAdmin.CreateExtensionType(), ESRI.ArcGIS.Server.IServerObjectExtensionType2)

          ' Must match the namespace and class name of the class implementing IServerObjectExtension
          serverObjectExtensionType.CLSID = "SpatialQuerySOE_VBNet.Extension"
          serverObjectExtensionType.Description = "Spatial Query Server Object Extension (VBNet)"
          serverObjectExtensionType.Name = extensionName

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

          ' 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