HoloLens 2应用开发中如何连接Azure SQL Database
Hololens 2 对接 Azure SQL Database 可行方案
核心限制说明
Hololens 2 运行UWP沙箱环境,直接通过传统SQL客户端连接Azure SQL Database存在两个硬限制:
- 主流SQL客户端库在.NET Native编译下存在大量兼容性问题,运行时会抛出权限、类型加载异常
- 直连架构必须把数据库连接字符串存放在客户端,极易被反编译泄露,存在严重安全风险,云服务厂商本身就不推荐这类客户端直连架构
通过中间层REST API做转发是生产环境的标准实现路径,具体可落地的方案如下:
可选实现方案
方案1:基于Azure Functions搭建无服务器REST接口(推荐)
这是开发成本、运维成本最低的方案,适合绝大多数业务场景:
- 创建支持HTTP触发器的Azure Functions实例,运行时选择.NET 6及以上LTS版本
- 在函数代码中引入
Microsoft.Data.SqlClient库编写数据库增删改查逻辑,数据库连接字符串直接存储在Functions的应用配置中,完全不对外暴露 - 在Functions的CORS配置项中,添加Hololens应用调试、正式发布对应的源地址,避免跨域拦截
- Hololens端无需引入任何数据库相关依赖,直接通过
HttpClient或者Unity环境下的UnityWebRequest向Functions接口发送HTTP请求,传递JSON格式的业务参数,解析接口返回的JSON结果即可完成数据交互 - 安全层面可以直接给Functions配置API密钥校验或者Azure AD身份认证,避免接口被未授权调用
方案2:自建ASP.NET Core Web API中间层
如果业务逻辑复杂,需要自定义缓存、日志、限流等中间件能力,可以自行开发ASP.NET Core Web API服务部署到Azure App Service:
- 所有数据库操作逻辑全部在服务端完成,和客户端完全隔离
- 同样需要提前配置好CORS规则、身份认证策略
- Hololens端的调用逻辑和调用Azure Functions完全一致,不需要做特殊适配
方案3:基于Azure API Management生成零代码REST接口
如果不想编写服务端代码,可以直接使用Azure API Management服务对接Azure SQL数据源:
- 在APIM中配置对应API操作时,直接关联Azure SQL数据源,编写需要执行的SQL语句即可自动生成标准REST接口
- APIM原生支持CORS配置、限流、身份认证、请求/响应格式转换能力,配置完成后Hololens端直接调用生成的接口即可,适合业务逻辑简单的轻量场景
Hololens 端对接注意事项
- 如果是基于Unity开发应用,需要在Player Settings的能力列表中勾选
Internet (Client)权限,否则所有网络请求会被UWP沙箱直接拦截 - 不要在客户端代码中硬编码API密钥、数据库连接字符串这类敏感信息,敏感凭证可以在用户完成身份校验后从服务端动态拉取,存储到Windows自带的Credential Locker中
- 调试时如果遇到HTTPS连接异常,先检查Hololens设备的系统时间是否准确,UWP环境下HTTPS证书校验对时间偏差非常敏感,时间误差超过5分钟就会直接拒绝连接
- 尽量选择UWP/Unity原生支持的HTTP客户端库发请求,不要引入对UWP兼容性差的第三方网络库,避免IL2CPP编译时抛出异常
内容的提问来源于stack exchange,提问作者Fanel
相关产品推荐
相关产品推荐

