Las extensiones de objetos de servidor (SOE) .NET desarrolladas con ArcGIS 10.1 se pueden usar con la versión 10.2 y con versiones posteriores. No obstante las SOE desarrolladas con la versión 10.0 son más laboriosas de migrar. El resto de este tema explica cómo se migran las SOE de la versión 10.0 para que funcionen con la versión 10.1 y con versiones posteriores.
Migrar una extensión de objeto del servidor (SOE) .NET de la versión 10.0 exige copiar la mayor parte del código de la SOE existente en las plantillas de Visual Studio para las SOE REST y SOAP. Esto es necesario porque las plantillas contienen la lógica de empaquetado necesaria para crear un archivo .soe. Este archivo se introdujo en la versión 10.1 y permite implementar su SOE en ArcGIS Server en un solo paso. El archivo .soe se crea cuando se crea el proyecto.
Otra ventaja de la plantilla es que las referencias ya apuntan a ensamblados de interoperación primarios incluidos en el SDK de ArcObjects. Si su proyecto requiere de cualquier referencia diferente a las que se incluyen en la plantilla, debe agregar manualmente esas referencias.
Las SOE creadas en la versión 10.0 y en versiones anteriores que dependen de las conexiones locales (DCOM) de ArcGIS Server no se pueden utilizar en la versión 10.1 y en versiones posteriores. Estas SOE se deben cambiar para actuar como servicios Web REST y SOAP.
A continuación, se describen los pasos para migrar una SOE de la versión 10.0:
- Si previamente registró las SOE en su equipo, deberá darlas de baja mediante un comando como regasm <path to DLL> /codebase /u.
- Abra Visual Studio 2010 y haga clic en Archivo > Nuevo > Proyecto.
- En el árbol de plantillas instaladas, expanda Visual C# > ArcGIS > Extensiones de objeto de servidor.
- En la parte superior del cuadro de diálogo Nuevo proyecto, elija .NET Framework 3.5 desde el menú desplegable.
- Elija entre las plantillas REST o SOAP, escriba un nombre y la ubicación de la SOE y, a continuación, haga clic en Aceptar.
- Agregue cualquier referencias y directivas que requiera su proyecto y no están incluidas en la plantilla.
- En el código de plantilla, modifique ServerObjectExtension del atributo .NET para que contenga los recursos, la descripción, el nombre de visualización, las propiedades y las arquitecturas del servicio Web admitido de la SOE. Estos son los tipos de valores que se establecen en el código de registro de la SOE en las versiones 10.0 y anteriores. Un ejemplo C# puede verse de la siguiente manera:
[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)]
La SOE anterior tiene dos recursos disponibles: GetCommonInfo y GetSecretInfo. Sin embargo, solo GetCommonInfo está habilitado por defecto.
Del mismo modo, existen dos propiedades en esta SOE: la Propiedad A, que establece un valor predeterminado de 500 y la Propiedad B, que establece un valor predeterminado de Ciudades. Todas las propiedades inicialmente son tratadas como cadenas de caracteres.
- Copie todo el código de clase (pero no la declaración de clase) de la SOE de la versión 10.0 y reemplace el código correspondiente en la plantilla. El código de clase reutilizable de la versión es idéntico al código de la versión 10.0, excepto que las SOE de 10.1 y de versiones posteriores no se derivan de ServicedComponent ni necesitan una referencia a System.EnterpriseServices. Debe quitar estos elementos si hace un copiado y pegado completo. Puede utilizar la plantilla y las muestras como guía.
El ejemplo a continuación muestra lo que debe quitar y reemplazar con su código de 10.0 al migrar una SOE de REST:
public class MySampleSOE : IServerObjectExtension, IObjectConstruct, IRESTRequestHandler { // Delete template code and paste your // corresponding 10.0 code here. }
Si la SOE de la versión 10.1 o de versiones posteriores tiene un nombre distinto al de la SOE 10.0, deberá actualizar el nombre de la SOE en el constructor:
public MySampleSOE() { soe_name = this.GetType().Name; logger = new ServerLogger(); reqHandler = new SoeRestImpl(soe_name, CreateRestSchema()) as IRESTRequestHandler; }
- Guardar la solución y cree el proyecto. Si se crea correctamente, se creará un archivo .soe bajo el directorio bin del proyecto.
- Implemente la SOE en ArcGIS for Server siguiendo las instrucciones que se indican en Implementar una extensión.