我在使用 KeyVault 检索连接字符串的 Azure Function App 中配置 SQL Server 连接字符串时遇到错误。我收到的错误消息是:
留言 在外部启动类中配置服务时出错。 细节 Microsoft.Azure.WebJobs.Script.ExternalStartupException:在外部启动类中配置服务时出错。 ---> System.ArgumentException :不支持关键字:'@microsoft.keyvault(secreturi'。在 Microsoft.Data.SqlClient.SqlConnectionStringBuilder.GetIndex(String 关键字) 在 Microsoft.Data.SqlClient.SqlConnectionStringBuilder.set_Item(String 关键字,对象)值)位于 System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(字符串值)处Microsoft.Data.SqlClient.SqlConnectionStringBuilder..ctor(字符串连接字符串)在 Serilog.Sinks.MSSqlServer.Platform.SqlClient.SqlConnectionStringBuilderWrapper..ctor(字符串连接字符串,布尔登记)在 Serilog.Sinks.MSSqlServer.Dependency.SinkDependencyFactory.Create(字符串)连接字符串,MSSqlServerSinkOptions sinkOptions,IFormatProvider formatProvider,ColumnOptions columnOptions,ITextFormatter logEventFormatter)在 Serilog.Sinks.MSSqlServer.Configuration.Factories.MSSqlServerSinkFactory.Create(字符串connectionString,MSSqlServerSinkOptions sinkOptions,IFormatProvider formatProvider,ColumnOptions columnOptions,ITextFormatter logEventFormatter)在Serilog.LoggerConfigurationMSSqlServerExtensions.MSSqlServerInternal(LoggerSinkConfiguration loggerConfiguration,字符串connectionString,MSSqlServerSinkOptions sinkOptions,IConfigurationSection sinkOptionsSection,IConfiguration appConfiguration,LogEventLevel strictToMinimumLevel,IFormatProvider formatProvider,ColumnOptions columnOptions,IConfigurationSection columnOptionsSection,ITextFormatter logEventFormatter、IApplySystemConfiguration applySystemConfiguration、IApplyMicrosoftExtensionsConfiguration applyMicrosoftExtensionsConfiguration、IMSSqlServerSinkFactory sinkFactory、IPeridicBatchingSinkFactorybatchingSinkFactory)位于 MG.TRUNK.FunctionApp.Startup.ConfigureLogging(IFunctionsHostBuilder 构建器、IConfiguration 配置) D:\ s \ src \ MG.TRUNK.FunctionApp \ Startup.cs:46位于MG.TRUNK.FunctionApp.Startup.Configure(IFunctionsHostBuilder构建器)位于D:\ s \ src \ MG.TRUNK.FunctionApp \ Startup.cs:25 于Microsoft.Azure.Functions.Extensions.DependencyInjection.FunctionsStartup.Configure(WebJobsBuilderContext 上下文,IWebJobsBuilder 构建器)位于 Microsoft.Azure.WebJobs.WebJobsBuilderExtensions.ConfigureStartup(IWebJobsStartup 启动,WebJobsBuilderContext 上下文,IWebJobsBuilder 构建器)位于D: _work \s\src\Microsoft.Azure.WebJobs.Host\Hosting\WebJobsBuilderExtensions.cs : 162 位于 Microsoft.Azure.WebJobs.WebJobsBuilderExtensions.ConfigureAndLogUserConfiguredServices(IWebJobsStartup 启动、WebJobsBuilderContext 上下文、IWebJobsBuilder 构建器、ILoggerFactory loggerFactory) D: _work \s\src\Microsoft.Azure.WebJobs.Host\Hosting\WebJobsBuilderExtensions.cs : 130 at Microsoft.Azure.WebJobs.WebJobsBuilderExtensions.UseWebJobsStartup(IWebJobsBuilder builder,类型startupType,WebJobsBuilderContext context,ILoggerFactory loggerFactory) D: _work \s\src\Microsoft.Azure.WebJobs.Host\Hosting\WebJobsBuilderExtensions.cs : 115 在 Microsoft.Azure.WebJobs.WebJobsBuilderExtensions.UseExternalStartup(IWebJobsBuilder 构建器,IWebJobsStartupTypeLocator 启动类型定位器,WebJobsBuilderContext 上下文,ILoggerFactory loggerFactory) D: _work \s\src\Microsoft.Azure.WebJobs.Host\Hosting\WebJobsBuilderExtensions.cs : 213 位于 Microsoft.Azure.WebJobs.Script.ScriptHostBuilderExtensions.<>c__DisplayClass7_0.b__1(HostBuilderContext context,IWebJobsBuilder webJobsBuilder) 位于 / _/src/WebJobs.Script/ScriptHostBuilderExtensions.cs : 235 内部结束例外
奇怪的是,天蓝色函数正确获取连接字符串,并且我在数据库中看到日志
关于以下错误消息:
System.ArgumentException:不支持关键字:'@microsoft.keyvault(secreturi'。
仔细检查您的 Azure Keyvault 参考是否具有正确的格式 - 示例:
@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret)
包括版本:
@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931)
或者:
@Microsoft.KeyVault(VaultName=myvault;SecretName=mysecret)
另外,我不确定 keyvault 引用是否区分大小写,因此改为:
@microsoft.keyvault(secreturi=...)
尝试:
@Microsoft.KeyVault(SecretUri=...)
最后,请记住您需要 授予您的 Azure 函数对密钥保管库的访问权限。