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

.NET Core SDK创建Cosmos DB遇异常:容器成功数据库创建无限循环

解决Cosmos DB模拟器容器创建后调用CreateDatabaseIfNotExistsAsync无限循环的问题

核心原因

容器启动成功≠Cosmos服务完全就绪,你注释掉了等待日志中服务就绪的代码,导致容器刚启动就立刻发起数据库创建请求,此时服务还没准备好接收请求,客户端会持续重试,陷入无限循环。

具体解决方案

1. 恢复日志等待逻辑

取消注释.WaitForMessageInLog("Cosmos service is successfully listening")代码,确保容器内的Cosmos服务完全启动后,再执行客户端操作:

var containerService = new Builder()
    .UseContainer()
    .WithName(name)
    .UseImage($"mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator")
    .ReuseIfExists()
    .ExposePort(exposedPort, ContainerCosmosServicePort)
    .WaitForMessageInLog("Cosmos service is successfully listening")
    .Build();

该语句会阻塞执行,直到服务日志出现指定内容,确保服务处于就绪状态。

2. 检查异步调用上下文

如果程序入口Main方法未标记为async Task,直接使用await可能引发死锁,需确保入口方法为异步:

static async Task Main(string[] args)
{
    // 你的业务代码逻辑
}

3. 添加请求超时保护

在CosmosClientOptions中设置请求超时,避免无限等待:

CosmosClientOptions options = new()
{
    HttpClientFactory = () => new HttpClient(new HttpClientHandler()
    {
        ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
    }),
    RequestTimeout = TimeSpan.FromSeconds(30) // 设置30秒超时阈值
};

4. 验证端口映射有效性

确认本地8083端口未被其他程序占用,可通过命令行执行netstat -ano | findstr :8083检查端口占用情况,若被占用,更换暴露端口即可。

内容的提问来源于stack exchange,提问作者Shashikant Nalavade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:07:30