这有可能是一次中断,但在撰写本文时 Autodesk 运行状况页面上未报告任何内容。
我多年来一直在多个版本的 Revit 上使用 Revit API 方法
ConvertCloudGUIDsToCloudPath
。今天我遇到了无法克服的问题。我正在本地 Windows 环境、几个 Windows 虚拟机和设计自动化应用程序包中进行测试。已在 Revit 版本 2020、2022 和 2023 中对 ACC 和 BIM 360 项目进行测试。
在今天的所有测试中,返回两个异常之一,
CentralModelMissingException
或RevitServerCommunicationException
。
Autodesk.Revit.Exceptions.CentralModelMissingException:缺少中心模型。在 Autodesk.Revit.DB.ModelPathUtils.ConvertCloudGUIDsToCloudPath(Guid 项目 ID,Guid 模型 ID)
Autodesk.Revit.Exceptions.RevitServerCommunicationException:无法访问中央服务器。在 Autodesk.Revit.DB.ModelPathUtils.ConvertCloudGUIDsToCloudPath(字符串区域,Guid projectGuid,Guid modelGuid) 在 LinkCloudModels.LoadCloudLinks.OpenCloudWorksharedDocument() 在 LinkCloudModels.LoadCloudLinks.Execute() 在 LinkCloudModels.App.LinkRevitCloudModels(DesignAutomationData 数据) 在 LinkCloudModels.App .HandleDesignAutomationReadyEvent(对象发送者,DesignAutomationReadyEventArgs e)在DesignAutomationFramework.DesignAutomationBridge.RaiseDesignAutomationReadyEvent(DesignAutomationReadyEventArgs e)在RevitCoreEngineTest.RceConsoleApplication.Program.UserMain(CommandLineArgs cl)
模型 GUID 来自数据管理 API 对 GET items/:project_id/folders/:folder_id/contents 的响应,位于项目的
included.attributes.extension.data.modelGuid
中。
项目 GUID 来自请求(删除“b.”前缀)或
included.attributes.extension.data.projectGuid
,具体取决于我正在测试的 Revit 插件。
在 Revit 2021+ 中,这些测试中的区域始终为“CloudRegionUS”。
相应本地或虚拟 Windows 计算机上的用户可以访问该项目,并且可以在引发 API 失败消息后不久通过给定计算机上的 Revit UI 打开模型。设计自动化工作项被赋予有效的三足令牌。
编辑以添加宏。 我已使用一对宏在 Revit 2023 和 2024 中复制了该问题。在文档宏上,我从开放云模型获取 GUID(Autodesk 示例模型在 ACC 项目中保存了云模型,然后启用了协作)。关闭示例模型后,我运行应用程序宏以尝试通过 API 重新打开它。始终出现以下异常。
文档宏代码
public void GetCloudGuids()
{
var modelPath = this.Document.GetCloudModelPath();
var projectGuid = modelPath.GetProjectGUID();
var modelGuid = modelPath.GetModelGUID();
string message = "Project GUID: " + projectGuid + "; Model GUID: " + modelGuid + ".";
using (TextWriter tw = new StreamWriter("C:\\macro-tests\\cloud-guids.txt"))
{
tw.WriteLine(message);
tw.Close();
}
TaskDialog.Show("Model Cloud GUIDs", message);
}
应用宏代码
public void OpenCloudModel()
{
string region = "CloudRegionUS";
var projectGuid = new Guid("<GUID copied from cloud-guids.txt>");
var modelGuid = new Guid("<GUID copied from cloud-guids.txt>");
try
{
var modelPath = ModelPathUtils.ConvertCloudGUIDsToCloudPath(region, projectGuid, modelGuid);
TaskDialog.Show("Model Path", "Got model path.");
if (modelPath.CloudPath)
{
using (var openOptions = new OpenOptions())
using (var worksetConfig = new WorksetConfiguration(WorksetConfigurationOption.OpenAllWorksets))
using (var defaultCallback = new DefaultOpenFromCloudCallback())
{
openOptions.SetOpenWorksetsConfiguration(worksetConfig);
var CurrentDocument = this.Application.OpenDocumentFile(modelPath, openOptions, defaultCallback);
}
}
}
catch (Exception ex)
{
using (TextWriter tw = new StreamWriter("C:\\macro-tests\\open-exception.txt"))
{
tw.WriteLine(ex.ToString());
tw.Close();
}
TaskDialog.Show("Could not open cloud document", ex.Message);
}
}
异常文本
Autodesk.Revit.Exceptions.RevitServerCommunicationException: The central server could not be reached.
at Autodesk.Revit.DB.ModelPathUtils.ConvertCloudGUIDsToCloudPath(String region, Guid projectGuid, Guid modelGuid)
at CloudModels.ThisApplication.OpenCloudModel() in c:\ProgramData\Autodesk\Revit\Macros\2024\Revit\AppHookup\CloudModels\Source\CloudModels\ThisApplication.cs:line 48
API 有变化吗?有停电吗?
Project GUIDs are coming from either the request (removing the "b." prefix) or included.attributes.extension.data.projectGuid, depending on which of my Revit Addins I am testing.
如上所述,projectGuid 应始终来自数据管理 API 的included.attributes.extension.data.projectGuid,如下图所示,与 modelGuid 相同。不能是
request (removing the "b." prefix)
,请确保您使用正确的projectGuid 和 modelGuid。