Skip to main content

exportToSDDraft

Краткая информация

Класс MapServiceDraft позволяет создавать файл черновика определения сервиса (.sddraft) для картографического сервиса, который копирует все данные или ссылается на данные, зарегистрированные в ArcGIS Server.

Обсуждение

Чтобы создать объект MapServiceDraft, с помощью функции arcpy.sharing.CreateSharingDraft установите для параметра server_type значение STANDALONE_SERVER, а для параметра service_type значение MAP_SERVICE. Объект MapServiceDraft можно настроить, задав свойства уровня сервиса и свойства метаданных. С помощью свойства targetServer укажите сервер, на котором будет опубликован этот картографический сервис.

Вы также можете задать свойства картографического сервиса, изменив файл .sddraft. Если для свойства не задано значение, устанавливается значение по умолчанию. Вам необходимо задать соответствующие значения свойств, даже если вы перезаписываете картографический сервис, имеющий существующие настроенные свойства.

Примечание:

Если свойства метаданных (credits, description, summary, tags и useLimitations) не заданы или состоят из пустых строк, картографический сервис будет получать метаданные с карты.

Для получения дополнительной информации о создании метаданных см. Редактирование метаданных.

После того, как объект MapServiceDraft сконфигурирован, его можно сохранить в файле черновика определения сервиса (.sddraft) с помощью метода exportToSDDraft. Затем он может быть опубликован в ArcGIS Server с помощью инструментов Промежуточный сервис и Загрузить определение сервиса. Дополнительные сведения см. в разделе Что такое модуль arcpy.sharing.

Как только файл .sddraft будет установлен и загружен на сервер, можно использовать инструменты в группе инструментов Кэширование, чтобы создавать и управлять картографическим кэшем для более быстрого отображения картографических сервисов, например инструментом Управление листами кэша картографического сервиса.

Примеры кода доступны для следующего:

Синтаксис

exportToSDDraft()

Свойства

Имя Объяснение Тип данных

cache.cacheOnDemand

(Чтение / Запись)

Указывает, будут ли листы, которые не кэшируются, созданы по запросу, когда клиентское приложение запрашивает их. Значение по умолчанию равно False.

Boolean

cache.configuration

(Чтение / Запись)

Путь и имя файла предварительно определенного файла схемы листов .xml, созданного с помощью инструмента Создать схему листов кэша картографического сервиса.

String

cache.exportTiles

(Чтение / Запись)

Указывает, будет ли клиентам разрешено загружать листы кэша для автономного использования. Значение по умолчанию равно False.

Boolean

cache.exportTilesCount

(Чтение / Запись)

Максимальное количество листов, которые можно загрузить за один запрос. Это свойство поддерживается, только если для свойства cache.exportTiles задано True. Значение по умолчанию равно 100000.

Integer

cache.useExistingCache

(Чтение / Запись)

Указывает, будут ли данные извлекаться из существующего кэша. Это свойство поддерживается, только если для свойства enableCache задано True. Значение по умолчанию равно False.

Boolean

checkUniqueIDAssignment

(Чтение / Запись)

Указывает, будет ли проводиться анализ карты для того, чтобы определить, включена ли опция Разрешить назначение уникальных числовых ID для публикуемых веб-слоев в Свойствах карты. Более подробно см. в Назначение ID слою.

Boolean

copyDataToServer

(Чтение / Запись)

Устанавливает, будут ли данные карты скопированы на сервер. Если значение True, то будут скопированы все данные на карте, в том числе данные, которые зарегистрированы на сервере. При значении False будут скопированы только данные, которые не зарегистрированы на вашем сервере. Сервис будет использовать данные, которые зарегистрированы на вашем сервере. Значение по умолчанию равно False.

Boolean

credits

(Чтение / Запись)

Кредиты картографического сервиса.

String

description

(Чтение / Запись)

Описание картографического сервиса.

String

enableCache

(Чтение / Запись)

Указывает, будет ли веб-слой динамически отрисовываться из кэша. Значение по умолчанию равно False.

Boolean

enableDynamicWorkspaces

(Чтение / Запись)

Указывает, будет ли пользователям разрешено изменять оформление или поведение веб-слоя при отрисовке. Значение по умолчанию равно True.

Boolean

extension.feature.allowTrueCurvesUpdates

(Чтение / Запись)

Указывает, будет ли разрешено веб-клиентам заменять геометрию истинных кривых объекта уплотненной геометрией. Это свойство поддерживается, только если включено редактирование. Значение по умолчанию равно True.

Boolean

extension.feature.allowUpdateWithoutMValues

(Чтение / Запись)

Указывает, будет ли разрешено обновление геометрии до объектов с m-значениями без указания этого m-значения. Значение по умолчанию равно False.

Boolean

extension.feature.featureCapabilities

(Чтение / Запись)

Включенные возможности, разделенные запятыми. Поддерживаются следующие возможности:

  • Query

  • Create

  • Update

  • Delete

  • Sync

  • Extract

  • Editing

String

extension.feature.isEnabled

(Чтение / Запись)

Указывает, будет ли включен сервис пространственных объектов. Значение по умолчанию равно False.

Boolean

extension.feature.onlyAllowTrueCurveUpdatesByTrueCurveClients

(Чтение / Запись)

Указывает, будет ли доступ к обновлению геометрии истинной кривой только у клиентов, которые поддерживают истинные кривые, таких как ArcGIS Pro. Это свойство поддерживается, только если включено редактирование. Значение по умолчанию равно True.

Boolean

extension.feature.zDefault.enable

(Чтение / Запись)

Указывает, будет ли разрешено редакторам добавлять или обновлять объекты через клиентов, которые не разрешают ввод z-значений. Значение по умолчанию равно False.

Boolean

extension.feature.zDefault.value

(Чтение / Запись)

Z-значение по умолчанию, которое будет использоваться для заполнения при добавлении или обновлении объектов. Это свойство поддерживается, только если для свойства zDefault.enable задано True. По умолчанию значение равно 0.

Double

extension.kml.isEnabled

(Чтение / Запись)

Указывает, будут ли включены возможности KML. Значение по умолчанию равно False.

Boolean

extension.ogcFeature.isEnabled

(Чтение / Запись)

Указывает, будет ли включен Сервис объектов OGC. Значение по умолчанию равно False.

Boolean

extension.wcs.isEnabled

(Чтение / Запись)

Указывает, будут ли включены возможности WCS. Значение по умолчанию равно False.

Boolean

extension.wfs.isEnabled

(Чтение / Запись)

Указывает, будет ли включен cервис WFS. Значение по умолчанию равно False.

Boolean

extension.wms.isEnabled

(Чтение / Запись)

Указывает, будет ли включен cервис WMS. Значение по умолчанию равно False.

Boolean

mapOperations

(Чтение / Запись)

Включенные операции, разделенные запятыми. Поддерживаются следующие операции:

  • Map

  • Data

  • Query

String

maxRecordCount

(Чтение / Запись)

Максимальное количество записей, возвращаемых сервером во время запроса. Значением по умолчанию является 2000.

Integer

offline

(Чтение / Запись)

Указывает, будет ли использоваться подключение к серверу. Если установлено значение False, вы должны указать URL-адрес сервера или файл подключения ArcGIS Server (.ags) для свойства targetServer, чтобы создать файл черновика определения сервиса (.sddraft) с помощью функции exportToSDDraft. Если установлено значение True, то файл черновика определения сервиса может быть создан без заполнения параметра targetServer.

Boolean

offlineTarget

(Чтение / Запись)

Версия целевого сервиса, для которой будет опубликовано определение сервиса. Задание версии позволяет быть уверенным в том, что в определении сервиса содержится контент, совместимый с вашим сервером. Это свойство поддерживается, только если для свойства offline задано True.

  • ENTERPRISE_10x - контент будет совместим с ArcGIS Server 10.9.1 или более ранней версии. Используется по умолчанию.

  • ENTERPRISE_11 - контент будет совместим с ArcGIS Server 11.0 или более поздней версии.

String

overwriteExistingService

(Чтение / Запись)

Определяет, будут ли перезаписываться имеющиеся сервисы с одинаковыми именами.

Boolean

pooling.maxInstances

(Чтение / Запись)

Максимальное число экземпляров на компьютер. Это свойство поддерживается, только если для свойства pooling.type задано DEDICATED.

Integer

pooling.minInstances

(Чтение / Запись)

Минимальное число экземпляров на компьютер. Это свойство поддерживается, только если для свойства pooling.type задано DEDICATED.

Integer

pooling.type

(Чтение / Запись)

Тип слияния сервиса, который будет использоваться.

  • SHARED

  • DEDICATED

String

serverFolder

(Чтение / Запись)

Имя папки сервера, в которой будет опубликован сервис. По умолчанию будет использоваться корневой каталог сервера. Этот каталог будет создан, если его еще нет.

String

serverType

(Только для чтения)

Тип сервера, который был указан при создании MapServiceDraft из функции CreateSharingDraft. Единственно возможное значение, которое возвращается из serverType для MapServiceDraftSTANDALONE_SERVER. serverType из STANDALONE_SERVER говорит о поддержке создания картографического сервиса для ArcGIS Server.

String

serviceName

(Чтение / Запись)

Имя картографического сервиса. Это имя будут видеть пользователи и идентифицировать по нему сервис. Имя может содержать только буквы, цифры и знак подчеркивания. В имени нельзя использовать пробелы и специальные символы. Длина имени не должна превышать 120 символов.

String

summary

(Чтение / Запись)

Краткий обзор картографического сервиса.

String

tags

(Чтение / Запись)

Теги картографического сервиса. Несколько тегов можно разделить запятыми.

String

targetServer

(Чтение / Запись)

Сервер, на котором будет опубликована карта. Для указания сервера могут использоваться следующие форматы:

Более подробно см. в разделе Подключение к ГИС-серверу.

Подсказка:

Это свойство также может использоваться в параметре in_server для инструмента Выгрузить определение сервиса.

String

timezone.DaylightSavingTime

(Чтение / Запись)

Указывает, учитывается ли в данном часовом поясе летнее время. Значение по умолчанию равно False.

Boolean

timezone.ID

(Чтение / Запись)

Часовой пояс, в котором будут храниться значения дат. Строковое значение должно соответствовать одному из официальных ID часовых поясов, распознаваемых операционной системой Windows. Список часовых поясов приведен в разделе Часовые пояса в документации Microsoft.

Примечание:

Эта настройка применяется в следующем сценарии:

  • В ваших данных есть поля отслеживания изменений, настроенные на запись дат в базе данных.

  • Вы публикуете данные с полями дат в ArcGIS Enterprise 11.5 и более ранней версии.

  • Вы публикуете данные в ArcGIS Online или ArcGIS Enterprise 12.0 и более поздней версии, а в свойствах слоя не определен часовой пояс.

String

useLimitations

(Чтение / Запись)

Ограничения по использованию картографического сервиса.

String

Методы

exportToSDDraft(out_sddraft)

Конвертирует MapServiceDraft в файл черновика определения сервиса (.sddraft).

Имя Объяснение Тип данных

out_sddraft

Путь и имя файла для выходного файла черновика определения сервиса (.sddraft).

String

Пример кода

Публикация картографического сервиса в папке сервера

Следующий скрипт создает файл черновика определения сервиса (.sddraft) для картографического сервиса и задает свойства метаданных. Картографический сервис публикуется в папке на отдельном сайте ArcGIS Server.

import arcpy
import os

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapServiceDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Create MapServiceDraft and set metadata and server folder properties
target_server_connection = r"C:\Project\gisserver.ags.esri.com (publisher).ags"
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service_name, m)
sddraft.targetServer = target_server_connection
sddraft.credits = "These are credits"
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.useLimitations = "These are use limitations"
sddraft.serverFolder = "MyServerFolder"

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Publish to server
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, target_server_connection)

print("Finish Publishing")
Перезаписать картографический сервис

Следующий скрипт перезаписывает картографический сервис. Если имя сервиса уже существует, сервис будет перезаписан. В противном случае будет создан новый сервис. Если вы хотите, чтобы у вашего картографического сервиса были определенные свойства, вам необходимо задать значения свойств, даже если у перезаписываемого картографического сервис уже настроены свойства. В противном случае существующие свойства будут перезаписаны настройками по умолчанию.

import arcpy
import os

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapServiceDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Create MapServiceDraft and set overwrite property
target_server_connection = r"C:\Project\gisserver.ags.esri.com (publisher).ags"
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service_name, m)
sddraft.targetServer = target_server_connection
sddraft.overwriteExistingService = True

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Publish to server
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, target_server_connection)

print("Finish Publishing")
Публикация картографического сервиса с сервисом объектов

Следующий скрипт создает файл черновика (.sddraft) определения картографического сервиса, который ссылается на зарегистрированные данные. Для использования данных, хранилище данных должно быть уже зарегистрировано на сервере. Затем он включает возможности объекта и устанавливает свойства картографического сервиса и сервиса объектов. Затем этот файл .sddraft будет обработан и опубликован на ArcGIS Server.

import arcpy
import os

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapServiceDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Create MapServiceDraft and set copyDataToServer property to false to reference registered data
target_server_connection = r"C:\Project\gisserver.ags.esri.com (publisher).ags"
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service_name, m)
sddraft.targetServer = target_server_connection
sddraft.copyDataToServer = False
sddraft.mapOperations = "Map,Data"
sddraft.extension.feature.isEnabled = True
sddraft.extension.feature.featureCapabilities = "Create,Sync,Query"

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Publish to server
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, target_server_connection)

print("Finish Publishing")
Публикация кэшированного картографического сервиса

Следующий скрипт публикует кэшированный картографический сервис, вызывая инструмент Управление листами кэша картографического сервера для построения листов кэша картографического сервиса.

import arcpy
import os

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapServiceDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Create MapServiceDraft
target_server_connection = r"C:\Project\gisserver.ags.esri.com (publisher).ags"
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service_name, m)
sddraft.targetServer = target_server_connection
sddraft.enableCache = True

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

try:
    # Stage Service
    print("Start Staging")
    arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
    warnings = arcpy.GetMessages(1)
    print(warnings)

    # Publish to server
    print("Start Uploading")
    arcpy.server.UploadServiceDefinition(sd_output_filename, target_server_connection)
    print("Finish Publishing")

    # Manage Map server Cache Tiles
    # For cache, use multiple scales separated by semicolon (;)
    # For example, "591657527.591555;295828763.795777"
    arcpy.server.ManageMapServerCacheTiles(target_server_connection + os.sep + service_name + ".MapServer", "591657527.591555", "RECREATE_ALL_TILES")
except Exception as stage_exception:
    print("Analyzer errors encountered - {}".format(str(stage_exception)))

except arcpy.ExecuteError:
    print(arcpy.GetMessages(2))
Публикация картографического сервиса, отображающегося на основе имеющегося кэша

Следующий скрипт создает файл черновика определения сервиса (.sddraft) для картографического сервиса и использует существующий кэш для создания сервиса. Затем этот файл .sddraft будет обработан и опубликован на ArcGIS Server.

import arcpy
import os

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapServiceDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Create MapServiceDraft
target_server_connection = r"C:\Project\gisserver.ags.esri.com (publisher).ags"
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service_name, m)
sddraft.targetServer = target_server_connection
sddraft.enableCache = True
sddraft.cache.useExistingCache = True

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Publish to server
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, target_server_connection)

print("Finish Publishing")
Анализ и регистрация хранилища данных

Следующий скрипт создает файл черновика определения сервиса (.sddraft) для картографического сервиса. Файл определения черновика сервиса анализируется во время промежуточного хранения. Если появится ошибка 24011, предупреждающая о том, что источник данных не зарегистрирован на сервере, хранилище данных будет зарегистрировано с помощью функции AddDataStoreItem.

import arcpy
import os

arcpy.env.overwriteOutput = True

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapServiceDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Create MapServiceDraft and set copyDataToServer property to False to reference registered data
target_server_connection = r"C:\Project\gisserver.ags.esri.com (publisher).ags"
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service_name, m)
sddraft.targetServer = target_server_connection
sddraft.copyDataToServer = False

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage the service and analyze the .sddraft file for registered data store
# Continue publishing only if data store is registered
print("Start Staging")
stage_service = True
while stage_service:
    arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
    # Get analyzer warnings to check if data store is registered
    warnings = arcpy.GetMessages(1)
    print(warnings)
    # If data store is not registered
    if "24011" in warnings:
        # Register data store
        db_conn = r"C:\Project\db_conn.sde"
        register_msg = arcpy.AddDataStoreItem(target_server_connection, "DATABASE", "datastore_name", db_conn)
        print("Registered datastore: {0}".format(register_msg))
        # Stage the service again
        stage_service = True
    else:
        stage_service = False

# Publish to server
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, target_server_connection)

print("Finish Publishing")
Задание часового пояса и настройка слияния сервисов

Следующий скрипт создает файл черновика определения сервиса (.sddraft) для картографического сервиса. Для использования данных, хранилище данных должно быть уже зарегистрировано на сервере. Затем он задаст часовой пояс слоев с полями дат и настроит параметры экземпляра сервиса. Затем этот файл .sddraft будет обработан и опубликован на ArcGIS Server.

import arcpy
import os
import codecs

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapServiceDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Create MapServiceDraft and set copyDataToServer property to False to reference registered data, set time zone, and configure pooling options
target_server_connection = r"C:\Project\gisserver.ags.esri.com (publisher).ags"
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service_name, m)
sddraft.targetServer = target_server_connection
sddraft.copyDataToServer = False
sddraft.timezone.ID = "Pacific Standard Time"
sddraft.timezone.DaylightSavingTime = True
sddraft.extension.feature.isEnabled = True
sddraft.pooling.type = "DEDICATED"
sddraft.pooling.minInstances = 0
sddraft.pooling.maxInstances = 2
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Publish to server
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, target_server_connection)

print("Finish Publishing")
Создание и публикация определения автономнго сервиса

Следующий скрипт создает определение автономного сервиса для версии целевого сервера и публикует его как картографический сервис.

import arcpy
import os

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapServiceDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Create MapServiceDraft and set offline and offlineTarget properties
# The targetServer property is not needed when the offline property is set to True
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service_name, m)
sddraft.offline = True
# Set offlineTarget property to "ENTERPRISE_11" for ArcGIS Server 11.0 or later
# The default is ArcGIS Server 10.9.1 or earlier
sddraft.offlineTarget = "ENTERPRISE_10x"

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Publish to server
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, r"C:\Project\gisserver.ags.esri.com (publisher).ags")

print("Finish Publishing")
Анализируйте, чтобы убедиться, что карта настроена так, чтобы разрешить присвоение уникальных числовых ID

Следующий скрипт создает файл черновика определения сервиса (.sddraft) для картографического сервиса, который активирует свойство checkUniqueIDAssignment. Файл определения черновика сервиса анализируется во время промежуточного хранения. Если карта не настроена на назначение уникальных числовых ID для публикации веб-слоев, возвращается ошибка анализатора 00374 и печатается сообщение. Более подробно см. в Назначение ID слою.

import arcpy
import os

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapServiceDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Create MapServiceDraft and set the check unique ID assignment property
target_server_connection = r"C:\Project\gisserver.ags.esri.com (publisher).ags"
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service_name, m)
sddraft.targetServer = target_server_connection
sddraft.checkUniqueIDAssignment = True

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

try:
    # Stage Service
    print("Start Staging")
    arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
    # Share to portal
    print("Start Uploading")
    arcpy.server.UploadServiceDefinition(sd_output_filename, server_type)

    print("Finish Publishing")
except Exception as stage_exception:
    if "00374" in str(stage_exception):
        print("The map is not set to allow assignment of unique IDs")
    print("Analyzer errors encountered - {}".format(str(stage_exception)))

except arcpy.ExecuteError:
    print(arcpy.GetMessages(2))