问题

问题:未应用服务器对象扩展模块 (SOE) 默认属性

Last Published: January 4, 2021

描述

启用 SOE 时,未将服务器对象扩展模块 (SOE) 默认属性应用于服务。

注: 本文适用于 ArcGIS Server 10.0 及更低版本。 更高版本的 ArcGIS 可能包含不同的功能,对于菜单、命令和地理处理工具,可能具有不同的名称和位置。

原因

服务器对象扩展模块 (SOE) 可以选择公开由服务器管理员在服务上启用 SOE 时所设置的属性。 借助 SOE 属性,在同一类型的不同服务之间部署 SOE 的方式将具有一定的灵活性。 例如,SOE 将公开一个属性,用于确定地图中 SOE 用于其分析的图层。 这可能因服务而有所不同,因此将作为属性公开。

SOE 属性旨在通过 SOE 开发人员为 ArcCatalog 或 Manager 编写的自定义属性页面进行设置。 如果未开发任何属性页面,或者服务器管理员使用“发布 GIS 资源”向导(将不显示属性页面)来发布服务,则不会在 SOE 上设置默认属性。 由此会导致 SOE 无法正常运行。

SOE 开发人员将处理未找到属性值的情况。 可通过直接在 catch 块内的 SOE 代码中设置默认值来执行此操作。

解决方案或解决方法

如果 SOE 开发人员为 SOE 创建了 ArcCatalog 或 Manager 属性页面,则服务器管理员将使用“添加新服务”向导在服务上启用 SOE。 “添加新服务”向导将显示属性页面,并允许服务器管理员应用有效的属性值。 或者,服务器管理员也可以在创建该服务后打开服务属性对话框,并通过功能选项卡访问 SOE 属性页面。

如果不需要任何属性页面,则必须在 SOE 内包含代码以处理未设置属性的情况。 将在 SOE Construct 方法中完成此操作,如以下示例所示: 在此示例中,如果在服务配置文件(示例为 C# 中)中未找到任何属性,则 MarkerLimit 属性的值将默认设置为 500:

代码: public void Construct(IPropertySet props) { configProps = props; try { string markerLimitString = props.GetProperty("MarkerLimit") as string; m_markerLimit = Convert.ToInt32(markerLimitString); } catch { logger.LogMessage(ServerLogger.msgType.warning, "Construct", 8000, "SOE custom error: No value or invalid value provided for MarkerLimit. Defaulting to a limit of 500."); m_markerLimit = 500; // Default if property can't be read } }

文章 ID:000011304

从 ArcGIS 专家处获得帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项

相关信息

发现关于本主题的更多内容