调整和配置服务
由于设置了很多默认服务属性,ArcGIS for Desktop 可帮助您轻松而快速地发布服务;但如果预计会有数百或上千用户访问您的服务,您就可能需要自行更改默认服务属性值以最好地适应您的部署。本主题将概述其中一些属性及可用于最好地配置服务的方法。
池化
ArcGIS 10.1 for Server 发布的所有服务都是池化服务。这就意味着,服务的实例可在多个应用程序会话之间进行共享。
使用池化服务实例的应用程序仅在完成一个请求期间内使用该实例(例如,绘制地图或对地址进行地理编码)。请求完成后,应用程序即会释放对服务的引用,将其直接返回到可用的实例池中。
回收
服务回收操作可销毁那些不可用的服务并将其替换为新服务,而且可回收被已过时的服务所占用的资源。
服务通常由多个应用程序以及这些应用程序的用户共用。在重用过程中,服务可能会发生一些问题,从而导致其无法供应用程序使用。例如,应用程序可能会错误地修改服务状态,或者,应用程序可能会错误地占用对服务的引用,使其无法用于其他应用程序或会话。在某些情况下,服务也可能会损坏而无法使用。回收操作可用于将服务池保持为最新状态并迁出所有过时或不可用的服务。
回收期间,服务器会销毁服务配置中的每个实例,之后再重新创建。回收作为服务器的后台进程执行。尽管屏幕上不会显示任何用于告知您回收正在进行的信息,但您可在日志文件中查看所有与回收相关的事件。
回收操作将销毁服务的所有运行中的实例,并重新创建,无论这些实例的个数是否高于指定的最小值。要使运行中的实例数定期返回到所指定的最小值,您必须停止服务并重新启动。执行这一过程的最好方法是创建一个可用于执行自定义 ArcGIS Server 管理 API 命令行可执行文件的 Python、shell 或 Windows 批处理脚本文件。此文件将包含服务器名称、服务名称、服务类型,以及确定服务是否应按命令行参数启动或停止等信息。
回收事件之间的间隔时间被称为回收间隔。默认的回收间隔为 24 小时,可在服务编辑器 对话框中对其进行更改。您还可以选择初次回收配置的时间。从该时刻开始,每当达到回收间隔时间时,即会自动执行回收操作。
回收服务时,每次回收一个实例,这样可确保实例始终保持可用状态,而且可分摊为每个服务创建新实例时导致的性能损失。回收按照随机顺序进行;但客户端当前正在使用的服务实例在被释放之前将不会被回收。这样,执行回收操作就不会对使用服务的用户造成任何干扰。
如果回收期间可用服务不足,请求将排队等候,直到实例变为可用为止。如果在此期间达到了服务的最长等待时间,日志将记录通常所记录的消息。
如果更改了服务的基础数据,此更改将会在回收后自动体现。例如,如果当前正在运行一个地图服务,而后更改了该服务所关联的地图文档,那么您就会在回收操作执行完毕后看到这些更改。(要立即查看这些更改,可手动停止和启动该服务。)
隔离
创建服务时,请指定要设置为可用的实例的最小数量和最大数量。这些实例运行于容器计算机的进程中。隔离级别决定了这些实例是运行于独立进程中还是共享进程中。
使用高隔离级别时,每个实例都运行在其各自的进程中。如果某些问题导致进程失败,将只会影响进程中所运行的单个实例。
相反,低隔离级别允许同一服务配置的多个实例共用一个进程,因此,允许一次处理多个并发的独立请求。这通常被称为多线程处理。
使用低隔离级别时,同一服务配置默认 8 个实例最多 24 个实例可共用一个进程。可在服务编辑器 对话框的进程选项卡中设置每个进程的实例数的值。创建特定服务的实例数之后,服务器将为下一组实例启动一个附加进程,依此类推。创建实例时,这些实例将填充正在运行的进程中的空间;销毁实例时,这些实例将腾空正在运行的进程中的空间。
低隔离级别的优势在于增加了单个进程所支持的并发实例数。使用低隔离级别可以明显改善服务器的内存占用情况。但是,此改善存在一些风险。关闭进程或进程崩溃时,将会销毁共用该进程的所有实例。
检查无效的数据连接
服务实例处于空闲状态时,服务器管理员很难确定与源数据的连接是否得到成功维护。ArcGIS Server 具有内置机制,可用于检查与 ArcSDE 地理数据库的无效连接。这些检查可避免您的服务在与 ArcSDE 的连接被删除或中断之后出现无响应的情况。
通过在 ArcCatalog 或管理器中打开服务编辑器 对话框的进程选项卡,然后选中复选框定期检查并修复空闲实例的数据连接,可启用数据连接有效性检查。还需要指定以分钟为单位的时间间隔,将以该时间间隔自动验证服务连接的有效性(并在需要时进行修复)。默认值 30 分钟通常比较合适。
此外,如果您的服务处于一段时间的空闲状态后,防火墙关闭了与 ArcSDE 连接的端口,启用这些检查同样可能有所帮助。在这种情况下,防火墙超时设置可能会对您所选择的时间间隔造成影响。
超时
了解各种可用的服务超时值有助于您保持服务正常工作和可用。这些值在服务编辑器 对话框的池化选项卡中提供。
客户端在获取对服务的引用之后,会在释放服务之前使用该服务。使用时间是从客户端获取对服务的引用开始到释放此服务所经历的时间。为避免客户端过长时间地占用对服务的引用(即客户端未正确释放服务),每个服务都具有一个客户端可使用一个服务的最长时间的属性。如果客户端占用某一服务的时间超过最长使用时间,此服务将被自动释放,而客户端将失去对此服务的引用。
创建新服务时,最长使用时间的默认值是 600 秒(10 分钟)。但是,在各 ArcGIS Server 站点提供的预生成“发布工具 (PublishingTools) 服务中,最长使用时间设置为 3600 秒(60 分钟)。这是为了应对要将大量数据复制到服务器的发布作业。
通过配置最长使用时间还可防止服务被用于执行过量的工作(超出管理员计划的工作量)。例如,由一个应用程序使用的执行地理数据库检出的服务可能具有 10 分钟的最长使用时间。与之相比,由多个应用程序使用的仅执行地图绘制的服务的最长使用时间可能只有 1 分钟。
当服务正在使用的实例达到最大实例数时,请求服务的客户端将排队等待,直至另一个客户端释放了其中的某一服务。从客户端请求服务开始到获得服务的时间为等待时间。每个服务都具有一个客户端获取一个服务将等待的最长时间属性。如果客户端的等待时间超过服务的最长等待时间,请求将超时。
另一个超时指明了空闲实例可保持运行的最长时间。客户端停止使用服务期间,这些实例将仍然运行在服务器上,直到其他客户端需要实例为止。正在运行但未被使用的实例仍会占用服务器上的一些内存。您可以将运行中的服务数降至最低,以通过缩短此空闲超时来节省内存,默认的空闲超时为 1800 秒(30 分钟)。空闲超时过短的缺点在于,如果运行中的所有服务都出现了超时,那么后续的客户端便需要等待创建新实例。
当客户端由于服务器启动或为响应针对服务器的请求而在 GIS 服务器中创建服务时,客户端对服务进行初始化所用的时间被称为服务的创建时间。GIS 服务器具有一个启动超时值,用于指定启动尝试可经历的时间,超过该时间后,GIS 服务器将假定服务的启动处于挂起状态并取消创建服务。
GIS 服务器同时在内存和服务器的日志中记录有关等待时间、使用时间以及在服务器内部发生的其他事件的统计数据。服务器管理员可使用这些统计数据确定诸如某一服务的等待时间是否很长的问题,如果过长则可能表示需要增加该服务的最大实例数。
限制用户可对服务执行的操作
为了便于控制 web 服务的使用方式,每种类型的服务都具有一组允许的操作。每个操作都包含一系列以组为单位进行启用或禁用的方法。web 服务的客户端只能调用允许的操作方法。
假设您要允许 web 制图服务的客户绘制地图但不查询地图图层的数据源。则需要禁用“查询”操作并确保允许进行“地图”操作。
此讨论中特别关注要素服务,因为它们用于对 GIS 数据执行基于 Web 的编辑。要素服务具有一组可用于限制编辑功能的附加操作:查询、创建、更新和删除。您可以访问 ArcGIS for Desktop 中服务编辑器 对话框的要素访问选项卡以启用或禁用这些操作。也可以通过强制执行基于所有权的访问控制来防止用户编辑不是由其最初创建的要素。
下表列出了当您允许对各种服务类型进行这些操作时对应启用的方法:
地图服务操作
地图服务默认情况下允许的操作为“地图”、“查询”和“数据”。
地图 |
查询 |
数据 |
---|---|---|
GetDocumentInfo |
识别 |
查找 |
GetLegendInfo | QueryFeatureCount | QueryData |
GetMapCount | QueryFeatureCount2 | QueryFeatureData |
GetMapName | QueryFeatureIDs | QueryFeatureData2 |
GetDefaultMapName | QueryFeatureIDs2 | QueryAttachmentInfos |
GetServerInfo | QueryHyperlinks | QueryAttachmentInfos2 |
GetSupportedImageReturnType | QueryHTMLPopups | QueryAttachmentData |
ExportMapImage | QueryHTMLPopups2 | QueryAttachmentInfos2 |
IsFixedScaleMap | GetSQLSyntaxInfo | QueryRelatedRecords |
ToMapPoints | QueryRelatedRecords2 | |
FromMapPoints | QueryRasterValue | |
HasSingleFusedMapCache | QueryRasterValue2 | |
GetTileCacheInfo | ||
GetMapTile | ||
HasLayerCache | ||
GetLayerTile | ||
GetVirtualCacheDirectory | ||
GetCacheName | ||
ComputeScale | ||
ComputeDistance | ||
ExportScaleBar | ||
GetCacheDescriptionInfo | ||
GetCacheControlInfo | ||
GetCacheStorageInfo | ||
GetDefaultLayerDrawingDescriptions | ||
GetMapTableSubtypeInfos | ||
GetMapTableSubtypeInfos2 | ||
GetServiceConfigurationInfo |
地理编码服务操作
地理编码服务默认情况下允许的操作为“地理编码”和“反向地理编码”。
地理编码 |
反向地理编码 |
---|---|
GeocodeAddress |
ReverseGeocode |
GeocodeAddresses | |
StandardizeAddress | |
FindAddressCandidates | |
GetAddressFields | |
GetCandidateFields | |
GetIntersectionCandidateFields | |
GetStandardizedFields | |
GetStandardizedIntersectionFields | |
GetResultFields | |
GetDefaultInputFieldMapping | |
GetLocatorProperties |
地理数据服务操作
地理数据服务默认情况下允许的操作为“查询”和“提取”,这些操作启用了所有受支持的用于查询和提取数据的方法。“复制”选项启用了所有受支持的用于实现同步、数据变更、消息确认和方案的方法。
查询 |
提取 |
复制 |
---|---|---|
Get_Versions |
ExpandReplicaDatasets |
CreateReplica |
Get_DefaultWorkingVersion |
ExtractData |
ExportAcknowledgement |
Get_DataElements |
ExportReplicaDataChanges | |
Get_MaxRecordCount |
ImportAcknowledgement | |
TableSearch |
ImportReplicaDataChanges | |
GetNextResultPortion |
ReExportReplicaDataChanges | |
Get_Replicas |
UnregisterReplica | |
Get_WrappedWorkspaceType |
ImportData |
Globe 服务操作
globe 服务默认情况下允许的操作为“Globe”、“动画”和“查询”。与地图服务不同,“查询”操作同时包括“识别”和“查找”。
Globe |
动画 |
查询 |
---|---|---|
Get_Version |
Get_Animation |
识别 |
Get_LayerCount |
查找 | |
Get_LayerInfos | ||
Get_LegendInfos | ||
Get_Config | ||
Get_MQT | ||
Get_Configuration | ||
Get_Tile | ||
Get_Symbols | ||
Get_Textures | ||
Get_VirtualCacheDirectory |
影像服务操作
如果根据镶嵌数据集发布了影像服务,默认情况下将启用所有功能。如果根据某些其他源(如栅格数据集、已编译的影像服务定义或图层文件)发布了影像服务,则只有“影像”和“元数据”功能可用,而且这些功能将被启用。
图像 | 目录 | 下载 | 元数据 | 像素 |
---|---|---|---|---|
ExportImage | 字段 | 下载 | 元数据 | GetNativePixelBlock |
ExportMapImage | GetCatalogItemCount | GetFile | GetRasterMetadata | GetPixelBlock |
GenerateServiceInfo | GetCatalogItemIDs | |||
GetImage | GetCatalogItems | |||
识别 | GetNativeRasterInfo | |||
ServiceInfo | GetRasterInfo | |||
版本 | GetThumbnail |