c# - 部署多个函数时 Azure 函数依赖项注入失败
问题描述
我遇到了一个问题,我在单个应用程序服务上部署了多个天蓝色函数,并且出现依赖注入错误。
- Azure Function V2 运行时
- 仅启用一项功能时不会出错
- 重新启动应用程序无济于事,但如果我重新部署相同的二进制文件,错误将在第一次运行时消失,然后在后续运行时返回
- 其他功能将出现相同的错误,但针对不同的服务
- 我尝试了远程调试,但我无法让它命中任何断点或触发异常视图
- 在本地运行良好
这是 Azure Function 门户视图中的例外情况:
2020-02-19T06:34:33.432 [Error] Executed 'Logger' (Failed, Id=edfbcc63-09b6-4f9e-8ee3-81fe50fd9412)
System.InvalidOperationException : Unable to resolve service for type 'Cloud.Services.Storage.Azure.IAzureTableStorageService' while attempting to activate 'Cloud.Web.AzureFunctions.Functions.Logger.Logger'.
at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp,Type type,Type requiredBy,Boolean isDefaultParameterRequired)
at lambda_method(Closure ,IServiceProvider ,Object[] )
at Microsoft.Azure.WebJobs.Host.Executors.DefaultJobActivator.CreateInstance[T](IServiceProvider serviceProvider) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\DefaultJobActivator.cs : 37
at Microsoft.Azure.WebJobs.Host.Executors.DefaultJobActivator.CreateInstance[T](IFunctionInstanceEx functionInstance) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\DefaultJobActivator.cs : 32
at Microsoft.Azure.WebJobs.Host.Executors.ActivatorInstanceFactory`1.<>c__DisplayClass1_1.<.ctor>b__0(IFunctionInstanceEx i) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\ActivatorInstanceFactory.cs : 20
at Microsoft.Azure.WebJobs.Host.Executors.ActivatorInstanceFactory`1.Create(IFunctionInstanceEx functionInstance) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\ActivatorInstanceFactory.cs : 26
at Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`2.CreateInstance(IFunctionInstanceEx functionInstance) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionInvoker.cs : 44
at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ParameterHelper.Initialize() at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs : 846
at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.TryExecuteAsyncCore(IFunctionInstanceEx functionInstance,CancellationToken cancellationToken) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs : 116
代码:
功能定义:
[assembly: WebJobsStartup(typeof(FunctionStartUp))]
namespace Cloud.Web.AzureFunctions.Functions.Logger
{
public class Logger
{
private readonly IAzureTableStorageService _azureTableStorageService;
public Logger(IAzureTableStorageService azureTableStorageService)
{
_azureTableStorageService = azureTableStorageService;
}
[FunctionName("Logger")]
public async Task Run(
[ServiceBusTrigger("logger", Connection = @"ServiceBusConnectionString")]
EntityLogEntry myQueueItem,
ILogger log,
ExecutionContext context)
{...}
启动:
public class FunctionStartUp : IWebJobsStartup
{
public static ServiceProvider Container { get; private set; }
public void Configure(IWebJobsBuilder builder)
{
Container = CoreAppModule.ConfigureServices(builder.Services).BuildServiceProvider();
}
}
public class CoreAppModule
{
public static IServiceCollection ConfigureServices(IServiceCollection services)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("local.settings.json", true) //when deployed, all application settings must be stored in azure app configuration
.AddEnvironmentVariables()
.Build();
services.SetupConnectionStrings(config);
services.AddOptions();
services.SetupAutoMapper();
services.SetupMongoRepositories(config);
services.SetupDbContextsEFCore();
services.SetupDataServices(config);
services.SetupServices(config);
services.SetupInMemoryCache();
services.SetupIntegrationServices(config);
services.SetupStorageServices(config);
services.SetupCrypto(config);
services.SetupIntegrationLibraryServices(config);
services.SetupFtpConnectionDetails(config);
services.SetupServiceBus(config);
services.SetupStartupInitialization(config);
return services;
}
}
依赖项:
门户设置:
解决方案
推荐阅读
- ubuntu - Ubuntu Server 21.10 如何将特定接口用于 Internet,将另一个接口用于本地网络
- c++ - c++ winsock tcp 服务器和客户端与互联网的连接
- windows - 如何在 Windows 系统上安装 Minizinc 的 OR 工具?
- scala - Scala 3 隐式转换:比较值和文字
- node.js - 尝试发布扩展时,收到错误消息:Part URI is not valid per rules defined in the Open Packaging Conventions specification
- python - aws - 是否可以在 Typescript 中为 Python CDK 进行单元测试?
- momentjs - Moment JS diff() 在 10 月 31 日到 11 月 1 日之间返回 0 天
- python - 如何测试同一列中两个变量之间潜在的线性和/或分类或二元关系?
- angular - 刷新时找不到 Angular 页面
- gdb - GDB 步骤在 clang 上花费了很多时间