运行 web 作业在启动时给出 ArgumentNullException

H. *_*lyn 2 c# azure azure-webjobs azure-webjobssdk

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

Microsoft.Azure.WebJobs.Host.Listeners.FunctionListenerException:函数的侦听器[Name of function]无法启动。

内部异常:

ArgumentNullException: 值不能为空。
参数名称:connectionString

这是ProgramWeb 作业类中的代码。

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
    }
}
Run Code Online (Sandbox Code Playgroud)

在里面App.config我添加了接下来的两个连接字符串:

<add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=[Name];AccountKey=[Key]" />
<add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=[Name];AccountKey=[Key]" />
Run Code Online (Sandbox Code Playgroud)

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

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

我怎么能解决这个问题?

Iva*_*ang 5

更新:

如果将 3.x 版的 Azure WebJobs SDK 与 .NET Framework 一起使用,则存在一个问题:3.x 版与 .NET Framework 和PackageReference.

所以有几种解决方法:

  1. 直接使用Visual Studio 中Azure WebJobs 模板,它基于.net framework.

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

    {
        "AzureWebJobsStorage": "{storage connection string}"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最好的解决方案是使用 .NET Core 和 3.x 版的 WebJobs SDK。


原答案:

如果您使用的是 WebJob SDK 版本 3.x,我建议您应该创建一个.NET Core 控制台项目而不是.NET Framework 控制台项目,那么您应该遵循这个官方文档

首先,创建一个.NET Core 控制台应用程序。并安装官方文档中提到的所有必要软件包。

你的程序.cs:

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

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

    using (IHost host = builder.Build())
    {
        host.Run();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后创建一个函数,请参考本节

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

{
    "AzureWebJobsStorage": "{storage connection string}"
}
Run Code Online (Sandbox Code Playgroud)

如果您对此还有更多问题,请告诉我。