调用Azure Communication Service录制文件下载API偶发错误咨询
问题描述
我开发了一款以Angular为前端、ASP.NET Core为后端的会议应用,整体运行正常,但有时通过servercallid下载录制文件时会出现“Service Unavailable”错误。多数情况下文件可正常生成并存储至Blob存储,但偶发错误的原因不明,且未收到包含具体异常信息的响应。

请问录制文件的生成是否有特定的大小或时间限制?
分析与解答
一、录制文件的大小/时间限制
默认情况下,ASP.NET Core和Blob存储本身没有针对录制文件的强制大小/时间限制,但以下环节可能引入隐性限制:
- ASP.NET Core 请求限制:
- 如果后端通过
IFormFile接收录制文件,默认请求体大小限制为30MB,可通过Program.cs调整:builder.Services.Configure<FormOptions>(options => { options.MultipartBodyLengthLimit = 1073741824; // 设为1GB示例 }); - Kestrel服务器的请求大小限制,可通过配置文件修改:
"Kestrel": { "Limits": { "MaxRequestBodySize": 1073741824 } }
- 如果后端通过
- Blob存储层面:
主流Blob存储(如Azure Blob)单个块Blob最大支持4.75TB,页Blob最大8TB,存储本身不会成为常规录制文件的瓶颈,但流式上传时需确保分块逻辑无异常。 - 第三方会议SDK限制:
如果你的应用依赖第三方会议录制SDK(如Zoom、Teams相关组件),这类SDK通常会自带录制时长/大小限制,需查阅对应官方文档确认。
二、偶发“Service Unavailable”(503)错误排查方向
- 补全后端日志:
开启ASP.NET Core详细异常日志,在appsettings.json中配置:
同时检查Blob存储的操作日志,排查是否存在上传超时、权限失效等记录。"Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore.Server.Kestrel": "Debug", "Azure.Storage.Blobs": "Debug" } } - 服务器资源监控:
偶发503常和服务器资源耗尽有关,错误发生时检查:- CPU使用率是否飙升
- 内存是否不足导致进程被回收
- 网络带宽是否被大文件传输占满
- 调整请求超时配置:
若录制文件生成/下载耗时过长,可能触发超时:- 后端调整Kestrel超时:
builder.Services.Configure<KestrelServerOptions>(options => { options.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(10); }); - 前端Angular同步调整HTTP请求超时:
this.http.get(downloadUrl, { timeout: 600000 }) // 10分钟超时示例
- 后端调整Kestrel超时:
- 优化Blob存储连接:
偶发的存储连接超时可能导致未捕获异常,需添加重试机制:var blobClient = new BlobClient(connectionString, containerName, blobName); var uploadOptions = new BlobUploadOptions { Retry = new BlobRetryOptions { MaxRetries = 3, Mode = RetryMode.Exponential } }; await blobClient.UploadAsync(stream, uploadOptions);
内容的提问来源于stack exchange,提问作者Syam Kumar
相关产品推荐
相关产品推荐

