嗨
我们有一个客户,我们已经发布了一些数据作为ArcGIS在线托管功能服务。我们有一个过程,可以根据托管层数据库的变化对其应用更改,包括添加、更新和删除。该过程是用python编写的,代码将http请求发送到层的REST端点(即addFeatures, updateFeatures, deleteFeatures)。
代码正常工作了几个月了,但是我们越来越多地在进程日志中看到与http请求相关的间歇性错误,特别是错误504(网关超时)。我已经调查了错误504,这表明在ArcGIS在线内部服务器之间发生了超时。当更新一个特定的层(使用updateFeatures)时,这个错误似乎最常发生,它有大约。4500个特征,但偶尔会发生更新请求的其他层较少的特征(大约。500)。它完全是间歇性的,因此在一次运行期间,一个请求可能失败,但随后下一个请求将成功。
我们已经采取了一些变通措施,例如在请求失败时对请求进行多次尝试,并限制每个请求更新的特性数量。但是,我们仍然看到一些错误504的实例。
我只是想知道是否有人在应用AGOL托管功能服务的定期更新时有类似的经验?
问候
约翰
嗨凯莉:
是的,我可以确认我们正在读写AGOL中的(2)托管功能服务,它们是托管功能层的一部分。它们是1:多关系的一部分。
这基本上是一个消防栓检查项目。
我们正在使用一个Python脚本。
我的解决方案是循环脚本7次。
对于每个循环,读取一个检查表,确定自上一个循环以来的新检查的检查状态,将状态写入检查表(许多)和该资产的Feature Class承载层记录(1 of 1:许多)。这可以一次写入多个记录。
然后再睡两分钟,等待更多的检查。
7个循环后,它就消失了。
Task Scheduler是用来每隔15分钟启动一次,所以如果它崩溃了,我们的准实时地图最多只能运行15分钟。
这个过程很有效,但当然感觉像一个hack,但它有效,所以我很喜欢它。
在我看来,我们正在使用edit_features而不是append:
下面是我们更新这两个表的地方
如果len(inspectionedit) > 0:
EditInspectionResult = featurettable .edit_features(updates= inspectioneditits)
EditHydrantResult = FeatureLayer.edit_features(updates=HydrantEdits)
我将仔细研读如何使用append。
对编辑进行追加并不直观,但如果是BP,我们会这样做。
我发现我们有时会因为阅读Feature Layer信息而崩溃,这是非常随机的。
我倾向于把它看成是网络。
谢谢你的追加指针。我找个机会解决一下再回来报告。
可能是一段时间,因为我们在一起(它没有坏…)
我们的问题不是由于使用了追加。我们通过python直接向REST端点发送请求(因为代码是在ArcGIS python API之前开发的),并得到504网关超时错误。通过ArcGIS Python API使用的任何方法最终都会导致使用applyEdits, updateFeatures, addFeatures或deleteFeatures操作向服务的REST端点发出http请求,这些操作与我们直接通过Python使用的操作完全相同。
此外,在客户端请求上设置任何超时选项都没有什么区别,因为这些选项只涉及客户端超时,而错误(504网关超时)来自服务器端的内部超时。
在我们的代码中,我们捕获http错误并多次重新发送相同的请求。在大多数情况下,这是有效的,但偶尔我们仍然会在多次尝试后失败。这些不会导致崩溃,因为我们只是记录错误并继续。
我也经历过这种行为。在4个月的完美性能之后,由于超时,覆盖函数开始间歇性地失败。我使用python API(1.4.1),如下所示。这些是我正在更新的托管特征数据集:
http://spokanecounty.maps.arcgis.com/home/item.html?id=5805ca391e5f4c1ca6f0e58aee0d46a6
http://spokanecounty.maps.arcgis.com/home/item.html?id=b6b1e7f8e12c4a9ba78af72076aee7af
http://spokanecounty.maps.arcgis.com/home/item.html?id=848144f660a741f4b274360d494f15a1
我相信错误- 000115253可能是相关联的。这在1.4.2中已经确定。
虫简介:当使用arcgis.features.managers中的overwrite方法时。FeatureLayerCollectionManager, ArcGIS API for Python returns the error "Exception: Job Failed.''
例子:
进口arcgis gis=arcgis.地理信息系统.地理信息系统(”https://spokanecounty.maps.arcgis.com”,<usr>,<pw>)项=地理信息系统.内容.得到(itemID)dataPath公司=“\ \ \ \ <路径> \ \ Parcels.zip”状态=arcgis.特性.FeatureLayerCollection.fromitem(项).经理.覆盖(dataPath公司)
错误日志:
回溯(最近一次调用):文件"C:\Automation\Python\Jobs-ISD\AGOLUpdate\Code\AGOLUpdate.py",第117行,在 overwriteStatus = overwriteAGOLfeature(dataName,data.get('itemID'),data.get('zipData'))文件"C:\Automation\Python\Jobs-ISD\AGOLUpdate\Code\AGOLUpdate.py",第87行,在overwriteAGOLfeature status = ArcGIS . featurelayercollection .fromitem(item).manager.overwrite(dataPath)文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\ ArcGIS -1.3.0-py3.5.egg\ ArcGIS\ features\managers.py",第771行,in overwrite if related_data_item.update(data=data_file):文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\ ArcGIS -1.3.0-py3.5 egg\ ArcGIS\ gis\__init__.py",第4994行,在update_item resp = self.con中。(路径、postdata文件)文件“C: \ Program files \ ArcGIS \ Pro \ bin \ Python \ env \ arcgispro-py3 \ lib \网站\ arcgis-1.3.0-py3.5.egg \ ArcGIS \ _impl \ connection.py”,1076行,在岗位职责= opener.open(点播)文件“C: \ Program files \ ArcGIS \ Pro \ bin \ Python \ env \ arcgispro-py3 \ lib \ urllib \ request.py”,472行,在公开回应=冰毒(请求、响应)文件“C: \ Program files \ ArcGIS \ Pro \ bin \ Python \ env \ arcgispro-py3 \ lib \ urllib \ request.py”,582行,在http_response“http”,请求,响应代码,味精,文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\urllib\request.py",第510行,在错误中返回self._call_chain(*args)文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\urllib\request.py",第444行,在_call_chain result = func(*args)文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\urllib\request.py",第590行,在http_error_default中引发HTTPError(req. py)。full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP错误504:网关超时
这实际上与bug有关。严重程度记录为低。
BUG-000115253:当使用arcgis.features.managers中的overwrite方法时。FeatureLayerCollectionManager, ArcGIS API for Python returns the error "Exception: Job Failed.''
负责我案例的分析师建议使用arcpy。在arcgis python api中使用Sharing代替overwrite函数。
如上所述,我们通过Python使用http请求。因此,2月份的TLS 1.2更新是否需要进行任何更改取决于ArcGIS的版本,因此也取决于所安装的Python。在本例中,我们的客户使用的是ArcGIS 10.4。它安装Python 2.7.10,默认使用TLS 1.2,因此不应该需要任何更改。
python版本是否使用TLS 1.2可以按照这里提到的步骤来确定如何检查你的Python应用是否支持TLS 1.2 | Calazan.com。
但是,如果您使用ArcGIS Desktop连接到ArcGIS Online或其他连接方法,那么您可能需要采取一些操作。这里有更多的信息Esri支持ArcGIS平台和传输层安全(TLS)协议S的重要更新….
这是一个持续存在的错误,esri的解决方案基本上是不断尝试,直到它工作……我们已经得到了500、502、503和504个错误。我被告知,500和504错误被合并到502错误中。我们的过程尝试了3次,但仍然失败。希望esri能意识到多次重试不是一个有效的“变通方法”。甚至在查看地图上的数据和查看数据表时,我也遇到过这些错误。在去年与UC的一些人交谈后,听起来这可能是他们的后端扩展和缓存错误响应的症状。凯利Gerrow
”重新提交请求以解决间歇性错误。脚本或工具可以设置失败后重试逻辑。”
BUG-000124290向ArcGIS在线托管功能服务发出“query”和“applyEdits”请求
BUG-000123780向ArcGIS Online hosting feature service发出query和applyEdits请求…