NET SDK TranslateAsync GetMetadata 失败
NET SDK TranslateAsync GetMetadata failures
我正在构建数据树(很像查看器模型树),但是我需要一次上传多个文件(零件和装配体的混合)。我创建这棵树有 2 次。第一个是当我的应用程序加载时,我遍历存储桶中的所有对象并调用 GetMetadataAsync 来获取模型 guid,然后调用 GetModelviewMetadataAsync 来获取层次结构,然后传递给客户端
代码是
var oa = new OAuthController(_configuration);
dynamic oauth = await oa.GetInternalAsync();
DerivativesApi derivative = new DerivativesApi();
derivative.Configuration.AccessToken = oauth.access_token;
dynamic mDyn = await derivative.GetMetadataAsync(urn);
string guid = "";
foreach (KeyValuePair<string, dynamic> metadataItem in new DynamicDictionaryItems(mDyn.data.metadata))
{
guid = metadataItem.Value.guid;
}
dynamic hierarchy = await derivative.GetModelviewMetadataAsync(urn, guid);
当为存储桶中存在的项目调用此方法时,一切都按预期工作:
urn = dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dW1rcnozZzV4bm15ZmNyNTY3Z3FtcXFoa3ltczRpMnMtZGVidWczLTEyMzQ1LzNtbSUyMGZvbGRlZC5pcHQ=
guid = 0162f7fd-df63-4dc2-bb9b-dd7cb8b493c2
hierarchy = {"data":{"type":"objects","objects":[{"objectid":1,"objects":[{"objectid":2,"objects":[{"objectid":3,"name":"Solid1"}],"name":"3mm folded"}],"name":"3mm folded"}]}}
当我将新文件添加到存储桶并需要附加到我的数据树时,我的问题就出现了。加载后,我调用“TranslateAsync”并配置一个 webhook 以在翻译完成时通知我。在回调中,我获取作业的 urn,删除 webhook,然后尝试获取元数据(全部在服务器端)。这是我使用与上面相同的代码和相同部分得到的结果
urn = dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dW1rcnozZzV4bm15ZmNyNTY3Z3FtcXFoa3ltczRpMnMtZGVidWczLTEyMzQ1LzNtbSUyMGZvbGRlZC5pcHQ=
guid = f7156859-17f8-4a63-9c1c-4db53e4e97fa
hierarchy = {"result":"success"}
注意 urn 相同,但 guid 与结果(层次结构)不同
有人可以帮我理解这里发生了什么吗。
非常感谢
首先,您没有做错任何事情:) 202 响应是您可以调用此端点的预期响应之一,如此处所述。
由于属性数据库可能非常大,此端点通常 returns 一个 202 HTTP 代码,告诉您服务器正在加载内存中的 sqlLite 数据库。当您收到202响应时,意味着您需要稍后再回来询问。
带有响应 202 的正文示例
{
"result": "success"
}
加载数据库后,它会在内存中保留一段时间,具体取决于您在这些端点上进行的调用次数,然后服务器会从内存中丢弃数据库(它将至少保留几分钟) ).
重要的是要知道您可以在第一次调用时使用 forceget 参数来确保告诉服务器您想要加载数据库,即使它非常大。但是只使用该参数一次 - 它的速率限制为 60rpm,而在不存在时 (14000rpm) 为数千。这样,您就可以为其他模型保存您的 forceget=true 配额。
我正在构建数据树(很像查看器模型树),但是我需要一次上传多个文件(零件和装配体的混合)。我创建这棵树有 2 次。第一个是当我的应用程序加载时,我遍历存储桶中的所有对象并调用 GetMetadataAsync 来获取模型 guid,然后调用 GetModelviewMetadataAsync 来获取层次结构,然后传递给客户端
代码是
var oa = new OAuthController(_configuration);
dynamic oauth = await oa.GetInternalAsync();
DerivativesApi derivative = new DerivativesApi();
derivative.Configuration.AccessToken = oauth.access_token;
dynamic mDyn = await derivative.GetMetadataAsync(urn);
string guid = "";
foreach (KeyValuePair<string, dynamic> metadataItem in new DynamicDictionaryItems(mDyn.data.metadata))
{
guid = metadataItem.Value.guid;
}
dynamic hierarchy = await derivative.GetModelviewMetadataAsync(urn, guid);
当为存储桶中存在的项目调用此方法时,一切都按预期工作:
urn = dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dW1rcnozZzV4bm15ZmNyNTY3Z3FtcXFoa3ltczRpMnMtZGVidWczLTEyMzQ1LzNtbSUyMGZvbGRlZC5pcHQ=
guid = 0162f7fd-df63-4dc2-bb9b-dd7cb8b493c2
hierarchy = {"data":{"type":"objects","objects":[{"objectid":1,"objects":[{"objectid":2,"objects":[{"objectid":3,"name":"Solid1"}],"name":"3mm folded"}],"name":"3mm folded"}]}}
当我将新文件添加到存储桶并需要附加到我的数据树时,我的问题就出现了。加载后,我调用“TranslateAsync”并配置一个 webhook 以在翻译完成时通知我。在回调中,我获取作业的 urn,删除 webhook,然后尝试获取元数据(全部在服务器端)。这是我使用与上面相同的代码和相同部分得到的结果
urn = dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dW1rcnozZzV4bm15ZmNyNTY3Z3FtcXFoa3ltczRpMnMtZGVidWczLTEyMzQ1LzNtbSUyMGZvbGRlZC5pcHQ=
guid = f7156859-17f8-4a63-9c1c-4db53e4e97fa
hierarchy = {"result":"success"}
注意 urn 相同,但 guid 与结果(层次结构)不同
有人可以帮我理解这里发生了什么吗。
非常感谢
首先,您没有做错任何事情:) 202 响应是您可以调用此端点的预期响应之一,如此处所述。
由于属性数据库可能非常大,此端点通常 returns 一个 202 HTTP 代码,告诉您服务器正在加载内存中的 sqlLite 数据库。当您收到202响应时,意味着您需要稍后再回来询问。
带有响应 202 的正文示例
{
"result": "success"
}
加载数据库后,它会在内存中保留一段时间,具体取决于您在这些端点上进行的调用次数,然后服务器会从内存中丢弃数据库(它将至少保留几分钟) ).
重要的是要知道您可以在第一次调用时使用 forceget 参数来确保告诉服务器您想要加载数据库,即使它非常大。但是只使用该参数一次 - 它的速率限制为 60rpm,而在不存在时 (14000rpm) 为数千。这样,您就可以为其他模型保存您的 forceget=true 配额。