c# - 运行 Web 作业在启动时出现 ArgumentNullException

标签 c# azure azure-webjobs azure-webjobssdk

我正在使用 .NET Framework 开发一个 Azure Webjob,但是当我在本地运行此任务时,启动后出现此异常。

Microsoft.Azure.WebJobs.Host.Listeners.FunctionListenerException: The listener for function [Name of function] was unable to start.

Inner exception:

ArgumentNullException: Value cannot be null.
Parameter name: connectionString

这是 Web 作业的 Program 类中的代码。

static void Main()
{
    HostBuilder builder = new HostBuilder();

    builder.ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddTimers();
    });

    using (IHost host = builder.Build())
    {
        host.Run(); // <-- error happens on this line
    }
}

App.config 中,我添加了接下来的两个连接字符串:

<add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=[Name];AccountKey=[Key]" />
<add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=[Name];AccountKey=[Key]" />

使用 [Name][Key] 作为来自实时环境的帐户名称 en key。

此外,当我将连接字符串更改为 UseDevelopmentStorage=true 时,我遇到了相同的异常。

我该如何解决这个问题?

最佳答案

更新:

如果您将 Azure WebJobs SDK 版本 3.x 与 .NET Framework 结合使用,则会出现问题:Version 3.x is incompatible with .NET Framework and PackageReference .

因此有几种解决方法:

  1. 直接使用Azure WebJobs template from Visual studio ,它基于 .net 框架

  2. 您可以添加一个 appsettings.json 文件(注意:右键单击该文件 → 选择“属性”→ 然后设置“复制到输出目录” 到“如果较新则复制”)到.NET Framework项目,它会工作(基于1,它会抛出错误,但它可以工作)。 JSON 文件如下所示:

    {
        "AzureWebJobsStorage": "{storage connection string}"
    }
    
  3. 最好的解决方案是使用 .NET Core 和 3.x 版本的 WebJobs SDK。


原始答案:

如果您使用的是 WebJob SDK 版本 3.x,我建议您应该创建一个 .NET Core 控制台项目,而不是 .NET Framework 控制台项目,然后您应该遵循这个official doc .

首先,创建一个.NET Core console app 。并安装官方文档中提到的所有必需的软件包。

您的程序.cs:

static void Main()
{
    HostBuilder builder = new HostBuilder();

    builder.ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddAzureStorage();
        b.AddTimers();
    });

    using (IHost host = builder.Build())
    {
        host.Run();
    }
}

然后创建函数,请引用this section .

然后添加一个 appsettings.json 文件(注意:右键单击该文件 → 选择“属性”→ 然后设置“复制到输出目录” “如果较新则复制”),在其中添加 AzureWebJobsStorage:

{
    "AzureWebJobsStorage": "{storage connection string}"
}

如果您还有其他问题,请告诉我。

关于c# - 运行 Web 作业在启动时出现 ArgumentNullException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61908126/

相关文章:

javascript - 在 JavaScript 中读取 JSON 值坐标并绘制到 Google map

Azure CDN 与从 blob 直接访问

dependency-injection - 静态函数范围内 DbContext 的依赖注入(inject) Ninject 与 WebJobs

azure-webjobs - 如何从 C# 控制台应用写入 Azure WebJobs 中的日志?

c# - kentico cms中自定义字段的级联下拉列表

c# - 如何从 C#.NET 代码生成 JS

azure - SSL错误: HTTPSConnectionPool when registering ML model on Azure

Azure WebJobs : difference between Console. WriteLine 和 logger.WriteLine

c# - 正则表达式 - 将电子邮件地址与异常(exception)情况相匹配

azure - 在应用程序网关后面配置 Service Fabric