如何在最新的 azure webjob 3.03 中指定 AzureWebJobsStorage
How to specify AzureWebJobsStorage in latest azure webjob 3.03
我更新了旧的 azure webjob 代码以打包到 3.03,然后它就无法正常工作。
我设法修复了所有编译时错误,但是当 运行 在本地时,它会抛出此错误:
Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException
HResult=0x80131500
Message=Error indexing method 'MvQueueProcessorV2.ProcessMVRequest'
Source=Microsoft.Azure.WebJobs.Host
StackTrace:
at Microsoft.Azure.WebJobs.Host.RecoverableException.TryRecover(ILogger logger) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Exceptions\RecoverableException.cs:line 81
at FE.Toolkit.MvPaaS.WebJob.Program.<Main>(String[] args)
Inner Exception 1:
InvalidOperationException: Storage account 'Storage' is not configured.
对我来说,这似乎表明它找不到设置 AzureWebJobsStorage?但是,它在 app.config 文件中睡得很好。所以我假设我应该将我的连接字符串放入 appsettings.json,所以这就是我在 appsettings.json:
中所做的
{
"ConnectionStrings": {
"AzureWebJobsDashboard": "xxx",
"Storage": "yyy"
}
}
但是,它给了我同样的错误。那么如何为 webjob 3.0 设置存储?
这是我在 program.cs
中的代码
var builder = new HostBuilder()
.UseEnvironment("Development")
.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices()
.AddAzureStorage()
.AddTimers()
.AddFiles()
.AddDashboardLogging();
})
.ConfigureLogging((context, b) =>
{
b.SetMinimumLevel(LogLevel.Debug);
b.AddConsole();
})
.ConfigureServices(services =>
{
services.AddSingleton<INameResolver, ConfigNameResolver>();
})
.UseConsoleLifetime();
请在您的 program.cs:
中添加这行代码
.ConfigureAppConfiguration((context, config) => {
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
我这边测试过,没问题。
Program.cs中的代码:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace WebJob1template
{
class Program
{
static void Main()
{
var builder = new HostBuilder()
.UseEnvironment("Development")
.ConfigureAppConfiguration((context, config) => {
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.ConfigureWebJobs(
b =>
{
b.AddAzureStorageCoreServices()
.AddAzureStorage()
.AddTimers()
.AddFiles();
//.AddDashboardLogging();
})
.ConfigureLogging((context, b) =>
{
b.SetMinimumLevel(LogLevel.Debug);
b.AddConsole();
})
.UseConsoleLifetime();
var host = builder.Build();
using (host)
{
host.Run();
}
}
}
}
appsettings.json(注意将其设置为 属性 "Copy to Output Directory" 始终复制):
{
"ConnectionStrings": {
"AzureWebJobsDashboard": "xxxx",
"AzureWebJobsStorage": "xxxx"
}
}
Function.cs:
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
namespace WebJob1template
{
public class Functions
{
public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger log)
{
//log.WriteLine(message);
log.LogInformation(message);
}
}
}
测试结果:
我运行遇到了和here is my solution一样的问题。
下面是我所指的 Azure 程序集
使用上述设置,如果配置文件的名称是 'appSettings.json'
,则无需调用 c.AddJsonFile("appsettings.json", ... )
默认情况下,框架将查找名为“appsettings.json
”的文件
但是,如果文件名是其他名称,我们需要告诉 HostBuilder
我们的配置文件的名称是什么。
HostBuilder builder = new HostBuilder();
//Below piece of code is not required if name of json file is 'appsettings.json'
builder.ConfigureAppConfiguration(c =>
{
c.AddJsonFile("Myappsettings.json", optional: false, reloadOnChange: true);
});
在我的本地机器上调试时导致问题的简单而重要的步骤是“Copy to Output Directory
'property of my 'appsettings.json
”文件。 @Ivan Yang 在他的回答中已经提到了这一点。
Here是源代码的git枢纽link。
注意:我已经按照this documentation实现了代码库。
我更新了旧的 azure webjob 代码以打包到 3.03,然后它就无法正常工作。
我设法修复了所有编译时错误,但是当 运行 在本地时,它会抛出此错误:
Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException
HResult=0x80131500
Message=Error indexing method 'MvQueueProcessorV2.ProcessMVRequest'
Source=Microsoft.Azure.WebJobs.Host
StackTrace:
at Microsoft.Azure.WebJobs.Host.RecoverableException.TryRecover(ILogger logger) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Exceptions\RecoverableException.cs:line 81
at FE.Toolkit.MvPaaS.WebJob.Program.<Main>(String[] args)
Inner Exception 1:
InvalidOperationException: Storage account 'Storage' is not configured.
对我来说,这似乎表明它找不到设置 AzureWebJobsStorage?但是,它在 app.config 文件中睡得很好。所以我假设我应该将我的连接字符串放入 appsettings.json,所以这就是我在 appsettings.json:
中所做的{
"ConnectionStrings": {
"AzureWebJobsDashboard": "xxx",
"Storage": "yyy"
}
}
但是,它给了我同样的错误。那么如何为 webjob 3.0 设置存储?
这是我在 program.cs
中的代码var builder = new HostBuilder()
.UseEnvironment("Development")
.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices()
.AddAzureStorage()
.AddTimers()
.AddFiles()
.AddDashboardLogging();
})
.ConfigureLogging((context, b) =>
{
b.SetMinimumLevel(LogLevel.Debug);
b.AddConsole();
})
.ConfigureServices(services =>
{
services.AddSingleton<INameResolver, ConfigNameResolver>();
})
.UseConsoleLifetime();
请在您的 program.cs:
中添加这行代码.ConfigureAppConfiguration((context, config) => {
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
我这边测试过,没问题。
Program.cs中的代码:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace WebJob1template
{
class Program
{
static void Main()
{
var builder = new HostBuilder()
.UseEnvironment("Development")
.ConfigureAppConfiguration((context, config) => {
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.ConfigureWebJobs(
b =>
{
b.AddAzureStorageCoreServices()
.AddAzureStorage()
.AddTimers()
.AddFiles();
//.AddDashboardLogging();
})
.ConfigureLogging((context, b) =>
{
b.SetMinimumLevel(LogLevel.Debug);
b.AddConsole();
})
.UseConsoleLifetime();
var host = builder.Build();
using (host)
{
host.Run();
}
}
}
}
appsettings.json(注意将其设置为 属性 "Copy to Output Directory" 始终复制):
{
"ConnectionStrings": {
"AzureWebJobsDashboard": "xxxx",
"AzureWebJobsStorage": "xxxx"
}
}
Function.cs:
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
namespace WebJob1template
{
public class Functions
{
public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger log)
{
//log.WriteLine(message);
log.LogInformation(message);
}
}
}
测试结果:
我运行遇到了和here is my solution一样的问题。
下面是我所指的 Azure 程序集
使用上述设置,如果配置文件的名称是 'appSettings.json'
,则无需调用c.AddJsonFile("appsettings.json", ... )
默认情况下,框架将查找名为“appsettings.json
”的文件
但是,如果文件名是其他名称,我们需要告诉 HostBuilder
我们的配置文件的名称是什么。
HostBuilder builder = new HostBuilder();
//Below piece of code is not required if name of json file is 'appsettings.json'
builder.ConfigureAppConfiguration(c =>
{
c.AddJsonFile("Myappsettings.json", optional: false, reloadOnChange: true);
});
在我的本地机器上调试时导致问题的简单而重要的步骤是“Copy to Output Directory
'property of my 'appsettings.json
”文件。 @Ivan Yang 在他的回答中已经提到了这一点。
Here是源代码的git枢纽link。
注意:我已经按照this documentation实现了代码库。