11

不管我们是否应该,我们可以IHostedService在 Azure Functions App 中使用吗?

这是尝试将托管服务(特别是后台服务)注册为IHostedService

internal sealed class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddHostedService<ExampleBackgroundService>();
    }
}

然后,函数应用程序会引发以下异常:

Microsoft.Azure.WebJobs.Script.InvalidHostServicesException: 'The following service registrations did not match the expected services:
  [Invalid] ServiceType: Microsoft.Extensions.Hosting.IHostedService, Lifetime: Singleton, ImplementationType: ExampleBackgroundService'
4

1 回答 1

5

不,这目前是不可能的。关于这个GitHub 问题有一些讨论:

这不适用于动态扩展基础架构。缩放控制器不知道在函数执行上下文之外运行的任何逻辑,并且如果它认为应用程序处于空闲状态,则可以进行缩放。除非客户人为地触发功能执行,否则客户将没有可靠的机制来保持其运行,这肯定会产生混乱和支持案例。

运行时和函数基础设施未设置为用于函数上下文之外的计算。允许注册自定义托管服务将公开启用该功能的功能,该功能无法与其他基础设施组件(包括可能严重影响客户应用程序的欺诈检测)配合使用

该线程的其余部分具有更多详细信息,值得查看以获取更多信息。

于 2020-05-04T14:57:51.060 回答