处理 Autodesk Forge 查看器的错误
Posted
技术标签:
【中文标题】处理 Autodesk Forge 查看器的错误【英文标题】:Handle errors of the Autodesk Forge Viewer 【发布时间】:2017-01-11 18:54:06 【问题描述】:我正在使用以下 javascript 代码在 Autodesk Forge Viewer 中显示模型:
var options =
'document': 'urn:' + urn,
'env': 'AutodeskProduction',
'getAccessToken': getToken,
'refreshToken': getToken
;
Autodesk.Viewing.Initializer(options, function ()
Autodesk.Viewing.Document.load(options.document,
function (doc) // onSuccessCallback
// load the viewer
,
function (errorCode) // onErrorCallback
interval = setInterval(function ()
$.ajax(
url: 'https://developer.api.autodesk.com' + '/viewingservice/v1/' + urn,
type: 'GET',
headers: Authorization: 'Bearer ' + getToken() ,
success: function (i)
switch (i.status)
case 'success':
// load the viewer
break;
case 'failed':
case 'timeout':
// report error
break;
case 'inprogress':
break;
default:
break;
,
error: function (b, d, e)
// report error
);
, 3000); // Repeatedly request the viewing service for each 3 seconds
);
);
onSuccessCallback:它将在查看器中显示模型。
onErrorCallback:它会一直发布查看服务,直到它获得“成功”状态。如果状态为“失败”或“超时”,它将向用户报告他们无法查看此模型。
在 Autodesk.Viewing.Document.load(options.document) 之后,它会跳转到 errorCode==9('在获取的文档中没有可查看的内容')。然后我不断请求查看服务从中获取结果。这是错误代码列表:
var errorCodes =
1: 'An unknown failure has occurred.',
2: 'Bad data (corrupted or malformed) was encountered.',
3: 'A network failure was encountered.',
4: 'Access was denied to a network resource (HTTP 403)',
5: 'A network resource could not be found (HTTP 404)',
6: 'A server error was returned when accessing a network resource (HTTP 5xx)',
7: 'An unhandled response code was returned when accessing a network resource (HTTP "everything else")',
8: 'Browser error: webGL is not supported by the current browser',
9: 'There is nothing viewable in the fetched document',
10: 'Browser error: webGL is supported, but not enabled',
11: 'There is no geomtry in loaded model',
12: 'Collaboration server error'
;
问题是有时它会返回 status=='failed'(在 Revit 中)或 status=='timeout'(在 Inventor 中)而没有更多详细信息。某些 Revit/Inventor 文件会发生这种情况,而不是所有情况。
我如何要求 Forge 查看服务重新翻译这些文件以显示回 Web 浏览器。他们总是从对查看服务的请求中失败。所以这些文件没有机会在 Forge 查看器中显示。
【问题讨论】:
【参考方案1】:首先,非常重要的是,您不应该从客户端调用翻译。这意味着您的 getToken 方法返回一个具有 write 功能的令牌,因此恶意用户可以使用它来访问和修改您的文件。您的客户应该只看到只读令牌。考虑在服务器上使用写入令牌,在客户端使用读取令牌(对于autodesk-viewer)。
其次,您应该使用带有JOB endpoint 的autodesk-model-derivative API v2,其中MANIFEST endpoint 将为您提供翻译的完整描述(正在进行或完成/失败)。之前的 v1 view&data API 分为 Viewer(客户端)和 Model Derivative API(服务器),这让我们可以更好地控制服务器端的翻译,包括几个新的能力。
【讨论】:
我开始使用 v2 的 autodesk-model-derivative。我的代码使用了 View & Data API v1。谢谢。 太好了,如果这有帮助,请标记为已回答,或者如果您有任何其他问题,请告诉我【参考方案2】:使用 v2 API:如果初始翻译失败,要重新提交翻译,您需要 delete 现有清单并重新提交 svf job。
使用 v1 API:您可以使用 'x-ads-force' = true 标志重新提交注册请求。示例见there。
【讨论】:
v1 API with 'x-ads-force' = true 不能帮助我修复错误。我正在迁移到 v2 API。以上是关于处理 Autodesk Forge 查看器的错误的主要内容,如果未能解决你的问题,请参考以下文章
无法获取 Forge 清单 - Autodesk Forge 查看器