18

我正在尝试使用 Azure Webjobs,我了解它的工作方式,但我不明白为什么我需要使用两个连接字符串,一个用于保存消息的队列,但是

  1. 为什么还有另一个叫“AzureWebJobsDashboard”?

  2. 它的目的是什么?

  3. 我从哪里得到这个连接字符串?

目前我在同一个解决方案中有一个 Web App 和一个 Webjob,我只在本地进行实验(没有发布任何内容),我在云中起床的一件事是保存队列的存储帐户。

我什至尝试在两个地方(AzureWebJobsDashboard,AzureWebJobsStorage)都放置相同的连接字符串,但它抛出异常:“使用此触发器时无法绑定参数'log'。”

谢谢你。

4

3 回答 3

18

有两个连接字符串,因为 WebJobs SDK 在存储帐户中写入了一些日志。它使您可以拥有一个仅用于数据 ( AzureWebJobsStorage) 的存储帐户和另一个用于日志 ( AzureWebJobsDashboard) 的存储帐户。它们可以相同。此外,您需要其中两个,因为您可以拥有多个使用不同数据帐户但将日志发送到同一个仪表板的作业主机。

您收到的错误与连接字符串无关,而是与代码中的某个函数有关。其中一个具有log不正确类型的参数。可以分享一下代码吗?

于 2015-02-03T19:48:05.213 回答
16

好的,任何来这里寻找“我从哪里得到 ConnectionString”的实际答案的人......你去。

在新的 Azure 门户上,您应该有一个存储帐户资源;我的以“portalvhds”开头,后跟一堆字母数字。单击该按钮以查看右侧的资源仪表板,然后立即显示“设置”窗口。在 General 下寻找 Keys 子菜单——点击它。整个连接字符串都在那里(实际上有两个,Primary 和 Secondary;我目前不明白其中的区别,但让我们使用 Primary 吧?)。

将其复制并粘贴到 AzureWebJobsDashboard 和 AzureWebJobsStorage 项的 connectionString 属性上的 App.config 文件中。这假定您的环境只有一个存储帐户,因此您希望将相同的存储用于数据和日志。

我试过了,至少 WebJob 运行时没有抛出错误。

于 2016-06-24T17:39:11.030 回答
1

@RayHAz - 扩展您的上述答案(谢谢)...

我试过这个https://docs.microsoft.com/en-us/azure/app-service/webjobs-sdk-get-started

但是在 .Net Core 2.1 中,出现了关于如何找不到连接字符串的异常。

长话短说,我最终得到了以下内容,这对我有用:

appsettings.json,在 .Net Core 2.1 控制台应用程序中:

{
  "ConnectionStrings": {
  "AzureWebJobsStorage": "---your Azure storage connection string here---",
  "AzureWebJobsDashboard":"---the same connectionstring---"
  }
}

...和我的 Program.cs 文件...

using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace YourWebJobConsoleAppProjectNamespaceHere
{
    public class Program
    {
        public static IConfiguration Configuration;
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Path.Combine(AppContext.BaseDirectory))
                .AddJsonFile("appsettings.json", true);
            Configuration = builder.Build();

            var azureWebJobsStorageConnectionString = Configuration.GetConnectionString("AzureWebJobsStorage");
            var azureWebJobsDashboardConnectionString = Configuration.GetConnectionString("AzureWebJobsDashboard");

            var config = new JobHostConfiguration
            {
                DashboardConnectionString = azureWebJobsDashboardConnectionString,
                StorageConnectionString = azureWebJobsStorageConnectionString
            };

            var loggerFactory = new LoggerFactory();
            config.LoggerFactory = loggerFactory.AddConsole();

            var host = new JobHost(config);
            host.RunAndBlock();
        }
    }
}
于 2018-06-28T10:30:55.170 回答