Skip To Content

Ejemplo: Publicar un servicio utilizando un archivo de definición de servicio

Un archivo de definición de servicio (.sd) encapsula un servicio en un único archivo transferible, incluyendo de forma opcional los datos SIG de origen. La herramienta de geoprocesamiento Cargar definición de servicio carga una definición de servicio en el sitio de ArcGIS Server y la publica. Puede invocar la herramienta desde el paquete del sitio de ArcPy que se incluye con ArcGIS Server.

El siguiente ejemplo de Python recorre en bucle una carpeta determinada en un equipo de Microsoft Windows, encuentra las definiciones de servicio contenidas en la carpeta (excluidas las subcarpetas) y las publica en el sitio de ArcGIS Server independiente especificado mediante el archivo de conexión (.ags).

Para ejecutar la herramienta se requiere una ubicación de datos local que contenga los archivos de definición de servicio, la ruta al archivo de conexión de ArcGIS Server y el nombre de la carpeta de destino en el sitio de ArcGIS Server.

# Publishes all service definitions in an operating system directory
#  (excluding subfolders). Services are published but not started.
# Import required modules
import arcpy
import os

# Define path to SD files on local machine
sdDir = "C:/data/sd_files"

# Provide path to ArcGIS Server connection file
con = "C:/projects/publishing_project/arcgis on myserver_6443.ags"

# Destination folder name on ArcGIS Server
serverFolder = "ScriptPublish"

# Loop through all items in local directory
sdList = os.listdir(sdDir)

for sd in sdList:
    
    # Construct path to item
    extension = os.path.splitext(sd)[1]  # Get file extension
    sdPath = os.path.join(sdDir, sd)

    # Check if item is an SD file and, if so, try to publish
    if os.path.isfile(sdPath) and extension == ".sd":    
        try:     
            arcpy.UploadServiceDefinition_server(sdPath, con, "", "", "EXISTING", serverFolder, "STOPPED")
            print("Published " + sd + " with no errors reported.")
            
        except:
            print("Could not complete publishing operation for " + sd + ".")

        print(arcpy.GetMessages())