Quelle (s) classe (s) d'entités est / sont utilisée (s) par le service?

8

J'ai plusieurs classes d'entités et beaucoup de services. Lorsque j'essaie de rendre ma classe d'entités versionnée, je reçois le message que la classe d'entités est verrouillée, ce qui est évident. Mais cela ne me dit pas par quel service il est verrouillé.

Existe-t-il une possibilité de parcourir toutes les classes d'entités avec ArcPy et de savoir dans quel service il est référencé?

user32324
la source

Réponses:

7

ArcGIS Server 10.1+:

Vous pouvez le faire, mais il n'y a pas de fonctionnalité prête à l'emploi pour cela. Les informations sur les classes d'entités utilisées (et à partir de quels fichiers de base de données elles proviennent) ne sont pas exposées via ArcGIS Server Manager / Répertoire des services / Admin REST.

Cependant, ces informations sont stockées en tant que métadonnées de service dans le C:\arcgisserver\directories\arcgissystem\arcgisinput\ServicePaths.MapServer\extracteddossier du manifest.xmlfichier (il existe à la fois .json et .xml). Le fichier .Xml contient des informations plus détaillées, je recommande d'analyser ce fichier (mais vous pouvez commencer par .json d'abord pour avoir l'idée).

Les deux balises que vous devez examiner dans le fichier .xml sont <Name>ServicePaths</Name>: le nom du service et plusieurs <OnPremisePath>C:\GIS\Temp\test.gdb\StopsSandiego</OnPremisePath>balises qui contiendront les noms des classes d'entités et leur chemin d'accès au catalogue / géodatabase.

En ce qui concerne le code, vous pouvez utiliser Python pour analyser ce fichier .xml, obtenir un dictionnaire avec cette structure:

{str:(tuple)} #data type

{servicename:(featureclasspath)} #pseudocode
{servicename:(fc1,fc2,fc3); servicename1:(fc1,fc2); servicename2:(fc5);...} #pseudocode

Lorsque vous avez terminé, vous pouvez écrire une fonction qui renverra la clé du dictionnaire (nom du service) en fonction de la valeur (nom de chemin d'accès à la classe d'entités que vous fournissez). Cela vous permettra de savoir quels services vous devez arrêter pour libérer le verrou de la classe d'entités.

MISE À JOUR avril 2016: vous pouvez le faire avec le manifeste du service API REST pour le service, ajouté dans ArcGIS Server 10.1 SP1:

http://localhost:6080/arcgis/admin/services/Parks/Landmarks.MapServer/iteminfo/manifest/manifest.%format% 

%format%est jsonouxml

Un article avec une réponse complète est ici: Script Python pour imprimer les classes d'entités qui font référence aux services de carte AGS

ArcGIS Server 10.0:

Accédez à C:\Program Files (x86)\ArcGIS\Server10.0\server\user\cfget ouvrez le fichier .cfg associé à votre service. Recherchez la <FilePath>balise. Vous pouvez maintenant parcourir tous les fichiers .cfg dans ce dossier avec Python et obtenir des informations sur les fichiers .mxd utilisés et puisque vous avez accès au .mxd, vous pouvez obtenir chaque chemin de source de données de couche et donc les noms de classe d'entités.

<ServerObjectConfiguration>

    <Description></Description>

    <Properties>
        <FilePath>D:\temp\TempService.mxd</FilePath>
Alex Tereshenkov
la source
Alex, merci pour la réponse. Je le comprends mais il me semble que votre réponse est liée à la version 10.1. Je travaille avec 10.0 (;-() et je ne trouve pas exactement cette structure de répertoire et le fichier xml. Des conseils? Thnxs !!
user32324
Ah, je vois. J'ai modifié ma réponse pour répondre à vos besoins.
Alex Tereshenkov
Alex, merci encore pour votre réponse. Il est clair pour moi maintenant et peut avancer avec ma "recherche".
user32324