Migration d'une extension d'objet serveur .NET 10.0 vers des versions ultérieures
Les extensions d'objet serveur .NET (SOE) que vous développez avec ArcGIS 10.1 peuvent être utilisées avec la version 10.2 et versions ultérieures. Toutefois, il est plus difficile de migrer les SOE développés avec la version 10.0. La suite de cette rubrique explique comment migrer les SOE de la version 10.0 pour qu'ils fonctionnent avec la version 10.1 et versions ultérieures.
La migration d'une extension d'objet serveur (SOE) .NET de version 10.0 requiert la copie de la majeure partie du code SOE existant dans les modèles Visual Studio pour les SOE REST ou SOAP. La raison pour laquelle vous devez procéder ainsi est que les modèles contiennent la logique d'empaquetage nécessaire à la création d'un fichier .soe. Ce fichier introduit dans la version 10.1 permet de déployer votre SOE dans ArcGIS Server en une seule étape. Le fichier .soe est créé lorsque vous créez le projet.
Un autre avantage du modèle est que les références pointent déjà vers les assemblys d'interopérabilité principales fournies avec le SDK ArcObjects. Si votre projet nécessite des références autres que celles incluses dans le modèle, vous devez ajouter ces références manuellement.
Les SOE créées dans les versions 10.0 et antérieures qui s'appuient sur les connexions locales à ArcGIS for Server (DCOM) ne peuvent pas être utilisées dans la version 10.1 et versions ultérieures. Ces SOE doivent être remaniées pour faire office de services Web REST ou SOAP.
Voici la procédure de migration d'une SOE de la version 10.0 :
- Si la SOE était précédemment inscrite sur votre machine, désinscrivez-la à l'aide d'une commande telle que regasm <chemin vers la DLL> /codebase /u.
- Ouvrez Visual Studio 2010 et cliquez sur Fichier > Nouveau > Projet.
- Dans l'arborescence Modèles installés, développez Visual C# > ArcGIS > Extensions d'objet serveur.
- Dans le haut de la boîte de dialogue Nouveau projet, sélectionnez .NET Framework 3.5 dans le menu déroulant.
- Choisissez d'utiliser les modèles REST ou SOAP, tapez un nom et un emplacement pour votre SOE, puis cliquez sur OK.
- Ajoutez les références et directives dont votre projet a besoin autres que celles incluses dans le modèle.
- Dans le code du modèle, modifiez l'attribut .NET ServerObjectExtension de manière à ce qu'il contienne les fonctions, la description, le nom d'affichage, les propriétés, ainsi que les architectures de service Web prises en charge pour votre SOE. C'est le type de valeurs que vous définissez dans le code d'inscription des versions 10.0 et antérieures. Voici un exemple de code 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)]
La SOE ci-dessous compte deux fonctions disponibles : GetCommonInfo et GetSecretInfo. Cependant, seule GetCommonInfo est activée par défaut.
De la même façon, deux propriétés sont présentes dans cette SOE : la propriété A, qui prend par défaut la valeur de 500, et la propriété B, qui prend par défaut la valeur Cities. Toutes les propriétés sont traitées comme des chaînes au départ.
- Copiez le code de classe entier (mais pas la déclaration de classe) depuis le SOE de la version 10.0 et remplacez le code correspondant dans le modèle. Le code de classe standard est identique au code de la version 10.0, à la différence que les SOE 10.1 et versions ultérieures ne proviennent pas de ServicedComponent et qu'ils ne nécessitent pas de référence à System.EnterpriseServices. Supprimez ces éléments si vous effectuez un copier-coller complet. Vous pouvez utiliser le modèle et les exemples comme guide.
L'exemple ci-après illustre ce que vous devez supprimer et remplacer par votre code 10.0 lors de la migration de la SOE REST :
public class MySampleSOE : IServerObjectExtension, IObjectConstruct, IRESTRequestHandler { // Delete template code and paste your // corresponding 10.0 code here. }
Si la SOE 10.1 et version ultérieure porte un nom différent de la SOE 10.0, vous devez mettre à jour le nom de la SOE dans le constructeur :
public MySampleSOE() { soe_name = this.GetType().Name; logger = new ServerLogger(); reqHandler = new SoeRestImpl(soe_name, CreateRestSchema()) as IRESTRequestHandler; }
- Enregistrez la solution et créez le projet. Une version réussie crée un fichier .soe dans le répertoire bin du projet.
- Déployez votre SOE dans ArcGIS for Server en suivant les instructions mentionnées à la rubrique Déploiement d'une extension d'objet serveur.