【问题标题】:Azure App Service 500 error: Value cannot be null. (Parameter 'containerId')Azure 应用服务 500 错误:值不能为空。 (参数'containerId')
【发布时间】: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)。我假设containerIdnull。你在哪里配置的?
  • 嗨 Roman,我已经更新了问题以显示这一点,谢谢
  • 请不要将您的代码显示为图片。编辑您的问题,将其替换为从 IDE 剪切和粘贴的代码。拥有后,选择它并按 Ctrl-K 将其格式化为代码块。您在应用服务中的何处配置 MemberFilesContainer?
  • 更新@RomanMarusyk 感谢您继续关注

标签: c# azure asp.net-core


【解决方案1】:

我发现了错误! 在 appsettings.json 中,我有一个名为“ContainerName”的部分,它应该是“MemberContainer”。我认为在这里写出来有助于我找到答案

【讨论】:

    猜你喜欢
    • 2022-10-04
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多