加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 如何将HostBuilder用于WebJob?

发布时间:2020-12-16 06:55:41 所属栏目:asp.Net 来源:网络整理
导读:随着.Net 2.0引入了真正有用的ConsoleBuilder HostBuilder,就像我们使用WebHostBuilder for Web Application一样. 我现在关注的是如何使用带有QueueTrigger的WebJob实现HostBuilder? 到现在为止,我正在使用JobActivator: var startup = new Startup(); var
随着.Net 2.0引入了真正有用的ConsoleBuilder HostBuilder,就像我们使用WebHostBuilder for Web Application一样.

我现在关注的是如何使用带有QueueTrigger的WebJob实现HostBuilder?

到现在为止,我正在使用JobActivator:

var startup = new Startup();
        var serviceProvider = startup.ConfigureServices(new ServiceCollection());
        startup.Configure(serviceProvider);

        var jobHostConfiguration = new JobHostConfiguration()
        {
            JobActivator = new JobActivator(serviceProvider),};

        var host = new JobHost(jobHostConfiguration);
        host.RunAndBlock();

有关完整示例,请参阅以下代码:
https://github.com/ranouf/DotNetCore-CosmosDbTrigger-WebJob/tree/master/CosmosDbTriggerWebJob.App

是否有人已经将HostBuilder用于带有QueueTrigger的WebJob?可能吗?

谢谢

解决方法

就在那时,我已经想到了这一点.首先确保已升级软件包以使用相应WebJob软件包的最新v3版本.

我发现我需要以下内容:

> Microsoft.Azure.WebJobs
> Microsoft.Azure.WebJobs.Core
> Microsoft.Azure.WebJobs.Extensions.ServiceBus

然后,您可以在Main方法中使用构建器作为Console项目,如下所示:

static async Task Main()
    {
        var builder = new HostBuilder();
        builder.ConfigureAppConfiguration(cb =>
        {
            cb.AddJsonFile("appsettings.json");
        });
        builder.ConfigureWebJobs(b =>
        {
            b.AddServiceBus();
        });
        await builder.RunConsoleAsync();
    }

请注意,我已启用语言功能7.1以支持异步主方法.如果您愿意,可以使用“等待()”.然后我将appsettings.json文件添加到我的项目中,如下所示:

{
   "ConnectionStrings": {
      "AzureWebJobsServiceBus": "Endpoint=sb://..."
    }
}

(编辑:并确保文件始终复制到输出文件夹)
最后,最重要的是我修改了触发器功能,包括Connection的名称,如下所示:

public static void ProcessQueueMessage([ServiceBusTrigger("[Your Queue Name]",Connection = "AzureWebJobsServiceBus")] string message,TextWriter log)
    {
        log.WriteLine(message);
    }

即使Connection的名称是默认名称,我仍然似乎必须在我的函数属性中定义它.我也尝试了“价值观”方法,但我无法做到这一点.然后我开始从服务总线接收消息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读