Перенос дополнительного расширения серверных объектов .NET в версию 10.1

При переносе расширения серверных объектов (SOE) на платформе .NET в версию 10.1 требуется скопировать большую часть существующих кодов SOE в шаблоны Visual Studio для создания SOE на основе REST или SOAP версии 10.1. Это нужно сделать потому, что шаблоны версии 10.1 содержат специальную логику упаковки для создания файлов .soe. Этот тип файла появился в версии 10.1; с его помощью можно произвести активацию SOE для ArcGIS Server в одно действие. Файл .soe создается при компиляции (build) проекта в Visual Studio.

Еще одно преимущество шаблона версии 10.1 в том, что ссылки на библиотеки (reference) уже обращаются к основным сборкам взаимодействия (primary interop assembly), поставляемым в ArcObjects SDK версии 10.1. Если ваш проект требует каких-либо ссылок (reference), отличных от включенных в шаблон, вы должны вручную добавить эти ссылки.

SOE, созданные в версии 10.0 и раньше, которые используют локальные подключения ArcGIS Server Local (DCOM), не могут быть использованы в версии 10.1. Эти SOE нужно модифицировать, чтобы они могли быть использованы в качестве веб-сервисов REST или SOAP.

Ниже приведены действия для переноса SOE с версии 10.0 на 10.1:

Шаги:
  1. Если SOE был ранее зарегистрирован на вашем компьютере, отмените его регистрацию, используя такие команды, как regasm <путь к DLL> /codebase /u.
  2. Откройте Visual Studio 2010 и щелкните Файл (File) > Новый (New) > Проект (Project).
  3. В дереве Установленные шаблоны (Installed Templates) разверните Visual C# > ArcGIS > Расширения серверных объектов (Server Object Extensions).
  4. В верхней части диалогового окна Новый проект (New Project) выберите .NET Framework 3.5 из ниспадающего меню.
  5. Выберите шаблон REST или SOAP, укажите имя и папку для хранения SOE, а затем нажмите ОК.
  6. Добавьте ссылки и директивы, которые требуются в вашем проекте, но еще не были включены в шаблон.
  7. В коде шаблона измените атрибут .NET ServerObjectExtension, чтобы добавить описание, функциональность, отображаемое имя, свойства и поддерживаемые веб-сервисом архитектуры для SOE. Это те значения, которые вы установили в коде регистрации SOE версии, предшествующей 10.1. Пример C# может выглядеть так:
    [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)]
    

    В указанном выше SOE доступны две функции: GetCommonInfo и GetSecretInfo. Тем не менее, только GetCommonInfo включена по умолчанию.

    Кроме того, есть два свойства этого SOE: свойство A, имеющее по умолчанию значение 500, и свойство B, имеющее по умолчанию значение Cities. Все свойства изначально рассматриваются как строки (string).

  8. Скопируйте весь код класса (но не объявление класса) из SOE версии до 10.1 и замените соответствующий код в шаблоне. Код шаблонного класса в версии 10.1 идентичен коду в версии 10.0 за исключением того, что SOE версии 10.1 не получаются из ServicedComponent и не требуют ссылки на System.EnterpriseServices. Необходимо удалить эти элементы, если вы делаете полное копирование и вставку. Вы можете использовать шаблон и примеры кода версии 10.1 в начале работы.

    В следующем примере показано, какую часть кода необходимо удалить и заменить с использованием кода версии 10.0 при миграции SOE на основе REST:

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

    Если ваш SOE версии 10.1 имеет имя, отличное от имени SOE версии 10.0, вам необходимо обновить имя SOE в конструкторе:

    public MySampleSOE()
            {
                soe_name = this.GetType().Name;
                logger = new ServerLogger();
                reqHandler = new SoeRestImpl(soe_name, CreateRestSchema()) as IRESTRequestHandler;
            }
    
  9. Сохраните свое решение (solution) и произведите компиляцию (build) своего проекта. В случае успешной компиляции (build) будет создан файл .soe в каталоге bin вашего проекта.
  10. Произведите активацию SOE для ArcGIS Server с помощью инструкций в разделе Активация расширения серверных объектов (SOE).
9/12/2013