【发布时间】:2021-12-31 23:38:03
【问题描述】:
我有一个运行正常的应用服务,我添加了 blob 存储并让它在本地运行。
当我发布应用程序时,它不再运行。 追踪日志很困难,但我在 Azure 门户的“可用性和性能”中找到了这一点。
我认为配置可能有问题,但 appsettings 文件似乎已发布正常。 由于我对 Azure 还很陌生,因此被这个问题困扰了一段时间
描述:进程因未处理的异常而终止。 异常信息:System.ArgumentNullException:值不能为空。 (参数'containerId') 在 Microsoft.Azure.Cosmos.CosmosClient.GetContainer(字符串 databaseId,字符串 containerId) 在 xxx.Services.MemberService..ctor(CosmosClient dbClient, String databaseName, String containerName) in C:xxx\source\repos*xxx *\Services\MemberService.cs:第 16 行 在 C:xxx\source\repos*xxx*\Startup.cs:line 99 中的 xxx.Startup.InitializeCosmosMemberClientInstanceAsync(IConfigurationSection configurationSection) 在 xxx.Startup.ConfigureServices(IServiceCollection services) 在 C:xxx\source\repos*xxx*\Startup.cs:line 54 在 System.RuntimeMethodHandle.InvokeMethod(对象目标,对象 [] 参数,签名 sig,布尔构造函数,布尔 wrapExceptions) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object[] 参数,CultureInfo 文化) 在 Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.InvokeCore(对象实例,IServiceCollection 服务) 在 Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.c__DisplayClass9_0.g__Startup|0(IServiceCollection serviceCollection) 在 Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.Invoke(对象实例,IServiceCollection 服务) 在 Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.c__DisplayClass8_0.b__0(IServiceCollection 服务) 在 Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.UseStartup(类型 startupType、HostBuilderContext 上下文、IServiceCollection 服务、对象实例) 在 Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.c__DisplayClass13_0.b__0(HostBuilderContext 上下文,IServiceCollection 服务) 在 Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider() 在 Microsoft.Extensions.Hosting.HostBuilder.Build() 在 C:xxx\source\repos*xxx*\Program.cs:line 中的 xxx.Program.Main(String[] args) 16
服务在启动时像这样初始化
private static async Task<FilesService> InitializeCosmosFilesClientInstanceAsync(IConfigurationSection configurationSection)
{
string databaseName = configurationSection.GetSection("DatabaseName").Value;
string memberFilesContainer = configurationSection.GetSection("MemberFilesContainer").Value;
string account = configurationSection.GetSection("Account").Value;
string key = configurationSection.GetSection("Key").Value;
Microsoft.Azure.Cosmos.CosmosClient client = new Microsoft.Azure.Cosmos.CosmosClient(account, key);
FilesService filesService = new FilesService(client, databaseName, memberFilesContainer);
Microsoft.Azure.Cosmos.DatabaseResponse database = await client.CreateDatabaseIfNotExistsAsync(databaseName);
await database.Database.CreateContainerIfNotExistsAsync(memberFilesContainer, "/id");
return filesService;
}
并像这样在 ConfigureServices 方法中调用
services.AddSingleton<IFilesService>(InitializeCosmosFilesClientInstanceAsync(Configuration.GetSection("CosmosDbProd")).GetAwaiter().GetResult());
appsetting.json 文件有如下设置
"CosmosDbProd": {
"Account": "xxx",
"Key": "xxx",
"DatabaseName": "xxx-db-prod",
"ContainerName": "Member",
"MemberFilesContainer": "MemberFiles"
},
【问题讨论】:
-
它说:
Value cannot be null. (Parameter 'containerId') at Microsoft.Azure.Cosmos.CosmosClient.GetContainer(String databaseId, String containerId)。我假设containerId是null。你在哪里配置的? -
嗨 Roman,我已经更新了问题以显示这一点,谢谢
-
请不要将您的代码显示为图片。编辑您的问题,将其替换为从 IDE 剪切和粘贴的代码。拥有后,选择它并按 Ctrl-K 将其格式化为代码块。您在应用服务中的何处配置 MemberFilesContainer?
-
更新@RomanMarusyk 感谢您继续关注
标签: c# azure asp.net-core