Перенос расширений серверных объектов 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:
- Если SOE был ранее зарегистрирован на вашем компьютере, отмените его регистрацию, используя такие команды, как regasm <путь к DLL> /codebase /u.
- Откройте Visual Studio 2010 и щелкните Файл (File) > Новый (New) > Проект (Project).
- В дереве Установленные шаблоны (Installed Templates) разверните Visual C# > ArcGIS > Расширения серверных объектов (Server Object Extensions).
- В верхней части диалогового окна Новый проект (New Project) выберите .NET Framework 3.5 из ниспадающего меню.
- Выберите шаблон REST или SOAP, укажите имя и папку для хранения SOE, а затем нажмите ОК.
- Добавьте ссылки и директивы, которые требуются в вашем проекте, но еще не были включены в шаблон.
- В коде шаблона измените атрибут .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).
- Скопируйте весь код класса (но не объявление класса) из вашего 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; }
- Сохраните свое решение (solution) и произведите компиляцию (build) своего проекта. В случае успешной компиляции (build) будет создан файл .soe в каталоге bin вашего проекта.
- Произведите активацию SOE для ArcGIS Server с помощью инструкций в разделе Активация расширения серверных объектов (SOE).