You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重新连接Azure会话后无法找到Azure Spatial Anchors问题咨询

问题分析与解决方案

首先明确:Azure Spatial Anchors(ASA)的服务端会话不会随应用停止自动删除,但客户端会话实例在应用关闭后会销毁。重新连接时如果没有复用**原有会话标识符(SessionId)**或正确恢复会话上下文,就会出现找不到锚点的情况。

核心问题排查点

  • 会话ID复用错误:如果每次重启应用都创建新会话(生成新的SessionId),自然无法找到之前会话中创建/关联的锚点。必须在应用重启后,使用之前保存的SessionId重新连接到同一个服务端会话。
  • 锚点未持久化到服务端:如果锚点仅保存在本地会话缓存(未调用CloudSpatialAnchorSession.CreateAnchorAsync完成云端上传),应用重启后本地缓存清空,自然无法找到。
  • 空间感知未完成:HoloLens重启应用后,空间映射需要重新构建,若在空间感知未就绪时发起锚点查询,设备无法匹配空间特征,导致查询无响应。

具体解决步骤

  1. 持久化并复用SessionId
    在应用首次创建会话时,将SessionId保存到本地存储(比如Unity的PlayerPrefs),重启后读取该ID重新连接:

    // 首次创建会话后保存ID
    if (!PlayerPrefs.HasKey("ASA_SessionId"))
    {
        await session.StartAsync();
        PlayerPrefs.SetString("ASA_SessionId", session.SessionId);
        PlayerPrefs.Save();
    }
    // 重启后复用ID连接
    else
    {
        string savedSessionId = PlayerPrefs.GetString("ASA_SessionId");
        await session.StartAsync(savedSessionId);
    }
    
  2. 确保锚点完成云端上传
    创建锚点时,必须等待CreateAnchorAsync执行完成,确认锚点已同步到Azure服务:

    var cloudAnchor = new CloudSpatialAnchor();
    cloudAnchor.LocalAnchor = localAnchorTransform.GetComponent<UnityEngine.XR.WSA.Anchor>();
    await session.CreateAnchorAsync(cloudAnchor);
    // 确认锚点ID非空,说明上传成功
    if (!string.IsNullOrEmpty(cloudAnchor.Identifier))
    {
        // 可额外保存锚点ID用于后续查询
        PlayerPrefs.SetString("Saved_AnchorId", cloudAnchor.Identifier);
    }
    
  3. 等待空间感知就绪后查询锚点
    重启应用后,监听SessionUpdated事件,等待空间数据收集足够后再发起查询:

    session.SessionUpdated += (object sender, SessionUpdatedEventArgs args) =>
    {
        if (args.Status == SessionStatus.Ready)
        {
            // 此时发起锚点查询
            StartCoroutine(FindSavedAnchor());
        }
    };
    
    IEnumerator FindSavedAnchor()
    {
        string anchorId = PlayerPrefs.GetString("Saved_AnchorId");
        var locateAnchorTask = session.CreateWatcher(new AnchorLocateCriteria { Identifiers = new[] { anchorId } });
        yield return new WaitUntil(() => locateAnchorTask.IsCompleted);
    }
    
  4. 检查会话配置一致性
    重新连接会话时,必须保证AccountId、AccountKey(或Azure AD令牌)等配置与首次创建会话时完全一致,否则会连接到错误的服务实例。

内容的提问来源于stack exchange,提问作者Dickson Hee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:13:13