使用APS从ACC获取Revit模型时遇CentralModelMissingException问题
问题背景
我正在开发一款APS(Autodesk Platform Services)插件,用于访问存储在ACC上的Revit文件。已成功获取项目GUID和模型GUID,但尝试打开模型时遇到CentralModelMissingException错误。
代码片段
var cloudModelPath = ModelPathUtils.ConvertCloudGUIDsToCloudPath(inputParams.Region, inputParams.ProjectGuid, inputParams.ModelGuid); Document doc = rvtApp.OpenDocumentFile(cloudModelPath, new OpenOptions());
错误信息
Autodesk.Revit.Exceptions.CentralModelMissingException: The central model is missing.
at Autodesk.Revit.DB.ModelPathUtils.ConvertCloudGUIDsToCloudPath(String region, Guid projectGuid, Guid modelGuid)
补充详情
通过指定API端点获取项目和模型GUID,返回的project GUID为3fa3b423-3b58-48b8-bccf-c2e32babf431,与最初使用的项目ID不同。后续在Revit中测试代码时,出现新错误:
Warning DynamicCodeUtils: InvalidOperationException - This Document is not a workshared document.
但已通过Revit网页视图确认文档为工作共享模式;调用GetPublishJob API时收到403错误。
提问
- Project ID与Project GUID的区别是什么?在
ModelPathUtils.ConvertCloudGUIDsToCloudPath中应使用哪一个? - 排查
CentralModelMissingException:- 中心模型缺失的常见原因有哪些?
- 如何验证ACC上Revit模型的状态和工作共享配置?
- 是否可通过API调用预检查ACC模型的可访问性?
解答
1. Project ID与Project GUID的区别及正确使用
- Project ID:ACC项目的短标识,多为
b.xxxx格式的字母数字组合,是面向用户的外部标识,用于网页端或部分API快速定位项目。 - Project GUID:ACC项目的全局唯一标识符,为标准GUID格式字符串,是系统内部用于唯一识别项目的核心标识。
在ModelPathUtils.ConvertCloudGUIDsToCloudPath方法中必须使用Project GUID,该方法依赖全局唯一标识解析云模型路径,传入Project ID会导致路径解析失败,直接触发CentralModelMissingException。
2. CentralModelMissingException排查
常见原因
- 标识混淆:传入了Project ID而非Project GUID,或模型GUID对应已删除/迁移的模型。
- 区域参数错误:ACC区域(如
US、EMEA)与项目实际所在区域不匹配,导致无法定位模型存储节点。 - 权限不足:插件使用的凭据无目标模型访问权限,系统会以“模型缺失”作为权限限制的提示。
- 模型状态异常:模型被标记为删除、归档,或中心模型文件本身损坏。
验证ACC上Revit模型的状态和工作共享配置
- ACC网页端:进入项目文档管理模块,找到目标Revit文件,查看详情页的“工作共享”状态,确认是否为中心模型;同时检查版本历史,确认最新版本的中心模型未被删除。
- Revit桌面端:通过“打开云模型”功能定位目标模型并尝试打开,若能正常打开则说明模型状态和工作共享配置无问题。
通过API预检查模型可访问性
可以通过以下APS API完成预验证:
- 项目存在性验证:调用ACC项目API,传入Project GUID,确认项目存在且当前凭据有访问权限。
- 模型状态验证:调用ACC文档管理API,传入Project GUID和模型URN/文件ID,检查文件是否存在、是否为Revit中心模型。
- 权限验证:调用APS权限API,确认当前用户/服务账户对目标模型拥有
read及以上权限,避免403错误。
针对你遇到的“This Document is not a workshared document”错误,可尝试调整OpenOptions指定工作共享相关设置:
var openOptions = new OpenOptions(); openOptions.DetachFromCentralOption = DetachFromCentralOption.DetachAndPreserveWorksets; Document doc = rvtApp.OpenDocumentFile(cloudModelPath, openOptions);
内容的提问来源于stack exchange,提问作者Eugene Shtoka

