运行 网络作业在启动时出现 ArgumentNullException
Running web job gives ArgumentNullException on start
我正在使用 .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
这是网络作业 Program
class 中的代码。
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]
作为来自实时环境的密钥的帐户名。
另外,当我将连接字符串更改为 UseDevelopmentStorage=true
时,我遇到了同样的异常。
我该如何解决这个问题?
更新:
如果您将 3.x 版的 Azure WebJobs SDK 与 .NET Framework 一起使用,则会出现问题:Version 3.x is incompatible with .NET Framework and PackageReference
。
所以有几种解决方法:
直接使用Azure WebJobs template from Visual studio,它基于.net framework
。
可以添加一个appsettings.json
文件(注意:右击文件→select属性→设置"Copy to Output Directory" 到 "Copy if newer") .NET Framework 项目,它会工作(基于 1,它会抛出错误,但是它可以工作)。 JSON 文件如下所示:
{
"AzureWebJobsStorage": "{storage connection string}"
}
最佳解决方案是将 .NET Core 与 3.x.
版本的 WebJobs SDK 一起使用
原回答:
如果您使用的是 WebJob SDK 版本 3.x,我建议您应该创建一个 .NET Core 控制台项目 而不是 .NET Framework console project,那么你应该遵循这个official doc。
首先,创建一个.NET Core console app。并安装官方文档中提到的所有必要软件包。
你的program.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
文件(注意:右击文件→select属性→然后设置"Copy to Output Directory"到"Copy if newer"),在里面加上AzureWebJobsStorage
:
{
"AzureWebJobsStorage": "{storage connection string}"
}
如果您对此还有其他问题,请告诉我。
我正在使用 .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
这是网络作业 Program
class 中的代码。
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]
作为来自实时环境的密钥的帐户名。
另外,当我将连接字符串更改为 UseDevelopmentStorage=true
时,我遇到了同样的异常。
我该如何解决这个问题?
更新:
如果您将 3.x 版的 Azure WebJobs SDK 与 .NET Framework 一起使用,则会出现问题:Version 3.x is incompatible with .NET Framework and PackageReference
。
所以有几种解决方法:
直接使用Azure WebJobs template from Visual studio,它基于
.net framework
。可以添加一个
appsettings.json
文件(注意:右击文件→select属性→设置"Copy to Output Directory" 到 "Copy if newer") .NET Framework 项目,它会工作(基于 1,它会抛出错误,但是它可以工作)。 JSON 文件如下所示:{ "AzureWebJobsStorage": "{storage connection string}" }
最佳解决方案是将 .NET Core 与 3.x.
版本的 WebJobs SDK 一起使用
原回答:
如果您使用的是 WebJob SDK 版本 3.x,我建议您应该创建一个 .NET Core 控制台项目 而不是 .NET Framework console project,那么你应该遵循这个official doc。
首先,创建一个.NET Core console app。并安装官方文档中提到的所有必要软件包。
你的program.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
文件(注意:右击文件→select属性→然后设置"Copy to Output Directory"到"Copy if newer"),在里面加上AzureWebJobsStorage
:
{
"AzureWebJobsStorage": "{storage connection string}"
}
如果您对此还有其他问题,请告诉我。