Skip To Content

Перенос расширений серверных объектов 10.0 .NET в более новые версии

Расширения объектов сервера (SOE) .NET, которые вы разрабатываете в ArcGIS 10.1, можно использовать и в версии 10.2. и более поздних. Однако SOE, разработанные в версии 10.0, сложнее переносить. Далее в данном разделе рассматривается как переносить SOE версии 10.0 в версию 10.1 и более поздние версии.

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

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

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

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

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

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

    public class MySampleSOE : IServerObjectExtension, IObjectConstruct, IRESTRequestHandler
        {
           // Delete 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 с помощью инструкций из раздела Развертывание расширения.