摘要
您可通过 GeoprocessingSharingDraft 类创建 ArcGIS Enterprise 的 Web 工具服务定义文件 (.sddraft) 或 ArcGIS Server 的地理处理服务。
说明
要创建 GeoprocessingSharingDraft 对象,请使用 CreateSharingDraft 函数。
- 要共享 Web 工具,将 serverType 参数设置为 FEDERATED_SERVER,将 serviceType 参数设置为 WEB_TOOL。
- 要共享地理处理服务,将 serverType 参数设置为 STANDALONE_SERVER,将 serviceType 参数设置为 GP_SERVICE。
配置 GeoprocessingSharingDraft 对象后,可以使用 exportToSDDraft 方法将其保存到服务定义草稿文件 (.sddraft)。 随后即可使用过渡服务和上传服务定义工具将其过渡和共享给 ArcGIS Enterprise 或 ArcGIS Server。 有关详细信息,请参阅 arcpy.sharing 简介。
代码示例可用于以下用途:
属性
属性 | 说明 | 数据类型 |
serverType (只读) | 创建共享草稿时指定的服务器类型。
| String |
serviceType (只读) | 创建共享草稿时指定的服务类型。 | String |
serviceName (可读写) | Web 工具或地理处理服务的名称。 用户可以看到该名称并使用该名称来识别服务。 名称只能包含字母数字字符和下划线。 对于 Web 工具,允许使用空格。 对于地理处理服务,不允许使用空格或特殊字符。 名称不能超过 120 个字符。 默认值为 None。 | String |
description (可读写) | Web 工具或地理处理服务的描述。 默认值为 None。 | String |
summary (可读写) | Web 工具或服务摘要。 使用此属性可以覆盖用户界面摘要,如果摘要不存在,则将提供摘要。 此处提供的摘要不会保留回原始地理处理工具中。 默认值为 None。 | String |
tags (可读写) | Web 工具或服务标签。 使用此属性可以覆盖用户界面标签,如果标签不存在,则将提供标签。 此处提供的标签不会保留回原始地理处理工具中。 默认值为 None。 | String |
offline (可读写) | 指定是否要保存离线服务定义。 默认值为 False。 以下列表显示属性设置为特定值时要执行的操作。
| Boolean |
offlineTarget (可读写) | 将发布服务定义的目标服务器版本。 指定一个版本可确保服务定义包含与服务器兼容的内容。 仅在属性 offline 设置为 True 时支持此属性。
| String |
targetServer (可读写) | 将发布 Web 工具或地理处理服务的服务器。 如果 offline 属性设置为 False,则此属性是必需的。 如果 serverType 属性已设置为 FEDERATED_SERVER,请提供 ArcGIS Enterprise 门户联合服务器的服务器 URL。 如果 serverType 属性已设置为 STANDALONE_SERVER,则支持以下内容:
| String |
overwriteExistingService (可读写) | 指定是否覆盖现有 Web 工具或地理处理服务。 默认值为 False。 | Boolean |
copyDataToServer (可读写) | 指定是否将结果中引用的数据复制到服务器。 如果值为 True,则将复制结果中的所有数据,包括注册到服务器的数据。 如果值为 False,则只会复制未在服务器上注册的数据。 服务将引用已在联合服务器中注册的数据。 默认值为 False。 | Boolean |
executionType (可读写) | 客户端(使用任务的应用程序)如何与服务器进行交互以及如何从任务获取结果。 ArcGIS Pro 可以本地处理两种处理类型。 默认值为 Asynchronous。
| String |
serverFolder (可读写) | 要发布到服务器的文件夹名称。 如果该文件夹当前不存在,则将创建该文件夹。 默认的文件夹为服务器根级别。 默认值为 None。 | String |
portalFolder (可读写) | 将作为 Web 工具发布的门户文件夹的名称。 默认文件夹是“我的内容”中的根文件夹。 此属性仅在 serverType 是 FEDERATED_SERVER 时才可用。 | String |
maximumRecords (可读写) | Web 工具或服务可以返回给客户端的最大结果数。 将此值设成一个较大数值意味着您的 GIS 服务器可以将该数量的个人记录或要素发送到客户端。 如果您不希望返回任何要素,请将此值设为 0(零)。 通常情况下,只有当您启用通过地图服务查看结果时才将此值设为零。 默认值为 1000。 | Integer |
maxInstances (可读写) | Web 工具或服务可以启动并可供使用的最大实例数。 对于频繁使用的 Web 工具或服务,您可能需要提高该值。 确保服务器具有的硬件足以支持此属性所允许的最大实例数。 | Integer |
minInstances (可读写) | 服务将要启动并可供使用的最少实例数。 对于频繁使用的服务,您可能需要提高该值。 默认值为 1。 | Integer |
resultMapService (可读写) | 发布时,可以选择将服务作为地图以查看服务所有任务的结果(以及任务的其他结果)。 该地图使用地图服务创建在服务器上,以将其以影像形式(如 .jpeg 文件)传输回客户端。 返回地图的符号系统、标注、透明度和所有其他属性与输出图层的设置完全相同。 如果您在 Python 脚本环境(ArcGIS Pro 之外)中创建结果图层,则将使用默认符号系统。 要保留符号系统的控制权,您必须使用符号系统预先创建图层文件,然后将其用于修改任务的输出符号系统。 选择此属性时,服务器上会自动创建一个地图服务,其名称与 Web 工具或地理处理服务相同。 默认值为 False。 | Boolean |
messageLevel (可读写) | Web 工具或地理处理服务的消息级别。 以下是服务返回到客户端的有效消息级别的列表:
默认为 Error。 | String |
maxUsageTime (可读写) | 一个服务能被使用的最长时间(以秒计)。 对于长时间运行的地理处理任务,可以将默认值 600 秒(10 分钟)延长。 或者,您可以减少这一时间,以确保客户端不会错误地应用服务。 默认值为 600。 | Integer |
maxWaitTime (可读写) | 客户端在超时之前将等待连接到实例的最长时间(以秒为单位)。 当所有实例都在忙于处理请求时,随后的请求将排队。 如果在实例变为可用状态之前超时,则任务会失败。 默认值为 60。 | Integer |
capabilities (可读写) | 服务可以支持的功能。 默认值为无。
| String |
constantValues (可读写) | 要设置为常量的参数名称列表。 如果包含多个工具,则必须使用工具名称限定参数名称,例如 ["toolX.parameterA", "toolY.parameterD"]。 默认值为无。 | List |
choicelists (可读写) | 使用服务任务名称参数和字符串值列表的字符串参数支持的选项值,例如,{"ServiceTaskName.parameterName":["string1", "string2"]}。 默认值为无。 | Dictionary |
方法概述
方法 | 说明 |
exportToSDDraft (out_sddraft) | 将 GeoprocessingSharingDraft 转换为服务定义草稿文件 (.sddraft)。 |
方法
exportToSDDraft (out_sddraft)
参数 | 说明 | 数据类型 |
out_sddraft | A string that represents the path and file name for the output service definition draft file (.sddraft). | String |
代码示例
以下脚本可以创建 Web 工具服务定义草稿文件 (.sddraft)。 然后,系统会将服务定义草稿文件过渡并作为 Web 工具发布到 ArcGIS Enterprise。 由于工具的第一个工具输入参数是要素类,web 工具参数的输入模式为用户定义。
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
"MyUsername", "MyPassword")
# Set output file names
outdir = r"C:\Project"
service_name = "GeoprocessingSharingDraftExample"
federated_server_url = "https://MyFederatedServer.esri.com/serverWebadaptor"
toolbox = os.path.join(outdir, "MyAnalysisTools.tbx")
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)
# Run the tool and set to a result object
arcpy.ImportToolbox(toolbox)
result = arcpy.reports.MyCustomAnalysis(os.path.join(outdir, "parcels.gdb”, “taxlots"), "40", "MyOutput.pdf")
# Create GeoprocessingSharingDraft and set its properties
sddraft = arcpy.sharing.CreateSharingDraft("FEDERATED_SERVER", "WEB_TOOL", service_name, result)
sddraft.targetServer = federated_server_url
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.serverFolder = "MyServerFolder"
sddraft.portalFolder = "MyPortalFolder"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
try:
# Run Stage Service tool
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Display the analyzer warning messages
print(arcpy.GetMessages(1))
# Share to portal
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
except arcpy.ExecuteError:
# Display the analyzer error or execution error messages
print(arcpy.GetMessages(2))
以下脚本可以覆盖 Web 工具服务定义草稿文件 (.sddraft)。 如果服务名称已存在,则将覆盖该 web 工具。 否则,将创建新 web 工具。 由于第一个工具输入参数是图层,而 GeoprocessingSharingDraft 类的 choicelists 参数包含两个图层,web 工具参数的输入模式为包含两个图层的选项列表。
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
"MyUsername", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "GeoprocessingSharingDraftExample"
federated_server_url = "https://MyFederatedServer.esri.com/serverWebadaptor"
toolbox = os.path.join(outdir, "MyAnalysisTools.tbx")
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)
# Run the tool and set to a result object
arcpy.management.MakeFeatureLayer(os.path.join(outdir, "parcels.gdb", "taxlots1"), "taxlotslayer1")
arcpy.management.MakeFeatureLayer(os.path.join(outdir, "parcels.gdb", "taxlots2"), "taxlotslayer2")
arcpy.ImportToolbox(toolbox)
result = arcpy.reports.MyCustomAnalysis("taxlotslayer1", "40", "MyOutput.pdf")
# Create GeoprocessingSharingDraft and set overwrite and choicelists properties
sddraft = arcpy.sharing.CreateSharingDraft("FEDERATED_SERVER", "WEB_TOOL", service_name, result)
sddraft.targetServer = federated_server_url
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.serverFolder = "MyServerFolder"
sddraft.portalFolder = "MyPortalFolder"
sddraft.overwriteExistingService = True
sddraft.choicelists = {"mywebtooltask.parameter1": ["taxlotslayer1", "taxlotslayer2"]}
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
try:
# Run Stage Service tool
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Display the analyzer warning messages
print(arcpy.GetMessages(1))
# Share to portal
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
except arcpy.ExecuteError:
# Display the analyzer error or execution error messages
print(arcpy.GetMessages(2))
以下脚本将为目标门户版本创建离线服务定义,并将其发布为 Web 工具。
import arcpy
import os
# Set output file names
outdir = r"C:\Project\Output"
service_name = "GeoprocessingSharingDraftExample"
toolbox = os.path.join(outdir, "MyAnalysisTools.tbx")
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)
# Run the tool and set to a result object
arcpy.ImportToolbox(toolbox)
result = arcpy.reports.MyCustomAnalysis(os.path.join(outdir, "parcels.gdb", "taxlots"), "50", "MyOutput.pdf")
# Create GeoprocessingSharingDraft and set offline and offlineTarget properties
server_type = "FEDERATED_SERVER"
sddraft = arcpy.sharing.CreateSharingDraft("FEDERATED_SERVER", "WEB_TOOL", service_name, result)
sddraft.offline = True
# Set offlineTarget property to "11" for ArcGIS Enterprise 11.0 or later
# The default is ArcGIS Enterprise 10.9.1 or earlier
sddraft.offlineTarget = "10x"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Run Stage Service tool
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Sign in to portal to upload and publish
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
"MyUserName", "MyPassword")
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, server_type)
print("Finish Publishing")
以下脚本将创建地理处理服务的服务定义草稿文件 (.sddraft)。 然后,系统会将脚本服务定义草稿文件过渡并作为地理处理服务发布到 ArcGIS Server。 由于工具的第一个工具输入参数是要素类,地理处理参数的输入模式为用户定义。
import arcpy
import os
# Set output file names
outdir = r"C:\Project\Output"
service_name = "GeoprocessingSharingDraftExample"
toolbox = os.path.join(outdir, "MyAnalysisTools.tbx")
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)
# Run the tool and set to a result object
arcpy.ImportToolbox(toolbox)
result = arcpy.reports.MyCustomAnalysis(os.path.join(outdir, "parcels.gdb", "taxlots"), "40", "MyOutput.pdf")
# Create GeoprocessingSharingDraft
target_server_connection = os.path.join(outdir, "gisserver.ags.esri.com (publisher).ags")
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "GP_SERVICE", service_name, result)
sddraft.targetServer = target_server_connection
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.serverFolder = "MyServerFolder"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
try:
# Run Stage Service tool
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Display the analyzer warning messages
print(arcpy.GetMessages(1))
# Publish to stand-alone server
arcpy.server.UploadServiceDefinition(sd_output_filename, target_server_connection)
except arcpy.ExecuteError:
# Display the analyzer error or execution error messages
print(arcpy.GetMessages(2))