我试图找到我应该从Azure存储队列触发的Azure WebJobs QueueTrigger方法的错误.
我已经阅读了几个文档(如博客文章/ msdn文章).但我还不清楚.
主要问题/误解方面:
Azure存储控制台应用程序App.config或Windows Azure配置(门户网站)的连接字符串的名称应该是什么.到目前为止,我在两个地方都设置了以下名称.
这是我的WebJobs控制台应用程序代码.
static void Main()
{
JobHost host = new JobHost();
host.RunAndBlock();
}
public static void CreateLeague([QueueTrigger("temp")] string msg)
{
var task = JsonConvert.DeserializeObject<QueueTask>(msg);
if (task.TaskType == QueueTask.TaskTypes.Pdf)
RenderPdf(task.Id);
}
Run Code Online (Sandbox Code Playgroud)
此控制台应用程序在我的Azure网站上持续运行.
我可以访问其"调试"页面,我可以切换输出,我看到它已启动/运行.
我添加队列的代码(来自我的ASP.NET MVC应用程序):
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("temp");
queue.CreateIfNotExists();
Common.QueueTask task = new Common.QueueTask();
task.TaskType = Common.QueueTask.TaskTypes.Pdf;
task.Id = p.Id;
CloudQueueMessage msg = new CloudQueueMessage(JsonConvert.SerializeObject(task) );
queue.AddMessage(msg);
Run Code Online (Sandbox Code Playgroud)
执行此代码,并将队列添加到我的存储帐户.但是他们并没有从WebJobs中"出列"或阅读.
我已经使用Visual Studio非常有用的"Publish as a WebJob"菜单选项将Azure WebJob部署到现有Azure网站.
该软件包在本地工作正常,但是当它被推送到云时,它甚至没有到达第一行代码(这是一个日志语句),我得到以下消息:
[04/25/2015 19:35:44 > 287dbc: SYS INFO] Status changed to Initializing
[04/25/2015 19:35:45 > 287dbc: SYS INFO] Run script 'MyJob.exe' with script host - 'WindowsScriptHost'
[04/25/2015 19:35:45 > 287dbc: SYS INFO] Status changed to Running
[04/25/2015 19:35:45 > 287dbc: SYS INFO] Status changed to Failed
[04/25/2015 19:35:45 > 287dbc: SYS ERR ] Job failed due to exit code -1073741818
Run Code Online (Sandbox Code Playgroud)
我也试过通过FTP手动复制包内容,我得到同样的东西.
有没有人碰到这个?你是如何设法解决它的?
我有一个遗留的exe,它接受本地机器文件路径,处理它并再次在本地路径中生成输出文件.这可以在Azure Webjob上运行吗?
我正在考虑编写一个从blob存储下载文件的包装器exe - >将其存储在本地文件系统中 - >使用本地文件路径调用传统exe - >获取输出并再次将其上载到blob.
这种方法是否有效或存在局限性?
我想要一个基于计时器触发器的预编译Azure功能.
我需要安装什么nuget包,或者我需要引用什么dll才能访问TimerInfo类?我找不到任何地方.
我在Visual Studio 2015中创建了一个Azure功能应用程序.该应用程序具有服务总线队列的触发器.当我在本地运行时,该应用程序运行良好.它能够从Service Bus队列中读取数据(通过名为AzureSBConnection的变量配置)并将其记录在我的数据库中.
但是在Azure中部署时,它会给我以下错误:
函数($ ServiceBusQueueTriggerFunction)错误:Microsoft.Azure.WebJobs.Host:错误索引方法'Functions.ServiceBusQueueTriggerFunction'.Microsoft.Azure.WebJobs.ServiceBus:Microsoft Azure WebJobs SDK ServiceBus连接字符串'AzureWebJobsAzureSBConnection'缺失或为空.
请注意,我的连接称为AzureSBConnection而不是AzureWebJobsAzureSBConnection.此外,连接在本地工作.最后,部署的文件看起来与本地文件完全相同.
Visual Studio结构如下所示:
function.json文件有一堆设置,如下所示:
然后在Appsettings.json文件中,我有以下内容:
为了部署,我将文件FTP到我的Azure中的功能应用程序的D:\ home\site\wwwroot位置.Kudu的最终结构如下:
如果我进入我的函数文件夹:
这是部署的function.json:
这是部署的appsettings:
部署的json文件与本地文件完全相同.但由于缺少AzureWebJobsAzureSBConnection,部署的版本出错了.我究竟做错了什么?
我有这个简单的 Azure 函数:
public static class MyCounter
{
public static int _timerRound = 0;
public static bool _isFirst = true;
[FunctionName("Counter")]
//[TimeoutAttribute("00:00:05")]
public async static Task Run([TimerTrigger("*/10 * * * * *")]TimerInfo myTimer, TraceWriter log, CancellationToken token)
{
try
{
log.Info($"C# Timer trigger function executed at: {DateTime.UtcNow}");
if (_isFirst)
{
log.Info("Cancellation token registered");
token.Register(async () =>
{
log.Info("Cancellation token requested");
return;
});
_isFirst = false;
}
Interlocked.Increment(ref _timerRound);
for (int i = 0; i < 10; i++)
{
log.Info($"Round: {_timerRound}, …Run Code Online (Sandbox Code Playgroud) 我已经在App Service上启用了托管服务身份。但是,我的WebJobs似乎无法访问密钥。
他们报告:
Tried the following 3 methods to get an access token, but none of them worked.
Parameters: Connectionstring: [No connection string specified], Resource: https://vault.azure.net, Authority: . Exception Message: Tried to get token using Managed Service Identity. Unable to connect to the Managed Service Identity (MSI) endpoint. Please check that you are running on an Azure resource that has MSI setup.
Parameters: Connectionstring: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.microsoftonline.com/common. Exception Message: Tried to get token using Active …
azure azure-webjobs azure-keyvault azure-web-app-service azure-managed-identity
我打开一个全新的azure函数项目,我的包是:
我使用servicebustrigger,我的功能代码是基本的:
public static class Function1
{
[FunctionName("OrderPusherFunction")]
public static Task Run([ServiceBusTrigger("orders","orderpusher", Connection ="ServiceBus")]
string myQueueItem, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
return Task.CompletedTask;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有:Azure Functions Core Tools(2.0.1-beta.22)和Function Runtime Version:2.0.11415.0
当我运行时,我得到" 绑定类型'serviceBusTrigger'未注册 "错误,并且该函数不会被触发.有人有想法吗?这在我看来是一个基本设置..
随着.Net 2.0引入了真正有用的ConsoleBuilder HostBuilder,就像我们使用WebHostBuilder for Web Application一样.
我现在关注的是如何使用带有QueueTrigger的WebJob实现HostBuilder?
到现在为止,我正在使用JobActivator:
var startup = new Startup();
var serviceProvider = startup.ConfigureServices(new ServiceCollection());
startup.Configure(serviceProvider);
var jobHostConfiguration = new JobHostConfiguration()
{
JobActivator = new JobActivator(serviceProvider),
};
var host = new JobHost(jobHostConfiguration);
host.RunAndBlock();
Run Code Online (Sandbox Code Playgroud)
有关完整示例,请参阅以下代码:https: //github.com/ranouf/DotNetCore-CosmosDbTrigger-WebJob/tree/master/CosmosDbTriggerWebJob.App
是否有人已经将HostBuilder用于带有QueueTrigger的WebJob?可能吗?
谢谢
由于 .NET 5.0,我将我的构建切换为独立的。我知道有一个预览运行时,但我不想在我的生产环境中押注于此。我遇到过预览运行时无意中切换回来的情况(例如横向扩展)。
dotnet publish --configuration release --self-contained true --runtime win-x64
Run Code Online (Sandbox Code Playgroud)
完成独立构建后,我的网络作业不再启动。在查看日志时,我刚刚发现了这一点:
[12/22/2020 16:36:05 > 62427f: SYS INFO] Detected WebJob file/s were updated, refreshing WebJob
[12/22/2020 16:36:05 > 62427f: SYS INFO] Status changed to Starting
[12/22/2020 16:36:05 > 62427f: SYS INFO] WebJob singleton setting is False
[12/22/2020 16:36:07 > 62427f: SYS INFO] Run script 'createdump.exe' with script host - 'WindowsScriptHost'
[12/22/2020 16:36:07 > 62427f: SYS INFO] Status changed to Running
[12/22/2020 16:36:35 > 62427f: ERR ] createdump [options] pid
[12/22/2020 …Run Code Online (Sandbox Code Playgroud) azure-webjobs ×10
azure ×9
.net-core ×1
asp.net-core ×1
azure-queues ×1
c# ×1
connection ×1
kudu ×1