我正在迁移之前安排并通过Quartz.Net运行到Azure Webjobs的几个Jobs.
使用Quartz.Net允许我在与初始化调度程序的控制台程序入口点相同的项目中拥有所有(非常紧凑的)作业类.
现在我想保留该结构,而不必为每个Web作业创建一个独立的控制台应用程序项目.
目前是否有任何方法可以为连续Web作业配置命令行参数,以允许根据命令行参数在内部分支到正确的作业?
我可以在Application Insights上找到的所有信息似乎都针对网站/ Windows商店/手机应用.我想监视Azure webjob,第一步是能够监视命令行应用程序.为了使这项工作,我需要做什么?
在这个问题中,有一个关于如何使用webjob的示例,该webjob可以在不与azure表存储交互的情况下执行一些后台操作.
我试图在答案中复制代码,但它抛出以下错误:
无法从Azure WebJobs SDK调用"Void ScheduleNotifications()".是否缺少Azure WebJobs SDK属性?"
在这个链接中,他们有一个类似的错误,在其中一个答案中,它说这是在0.4.1-beta版本中修复的.我正在运行0.5.0-beta版本,我遇到了错误.
这是我的代码的副本:
class Program
{
static void Main()
{
var config = new JobHostConfiguration(AzureStorageAccount.ConnectionString);
var host = new JobHost(config);
host.Call(typeof(Program).GetMethod("ScheduleNotifications"));
host.RunAndBlock();
}
[NoAutomaticTrigger]
public static void ScheduleNotifications()
{
//Do work
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道我是否遗漏了某些内容,或者这仍然是Webjobs SDK中的一个错误.
更新:根据Victor的回答,计划类必须公开.
工作代码:
public class Program
{
static void Main()
{
var config = new JobHostConfiguration(AzureStorageAccount.ConnectionString);
var host = new JobHost(config);
host.Call(typeof(Program).GetMethod("ScheduleNotifications"));
host.RunAndBlock();
}
[NoAutomaticTrigger]
public static void ScheduleNotifications()
{
//Do work
}
}
Run Code Online (Sandbox Code Playgroud) 我们在我们的实时环境中运行的WebJob中有一个错误,我已经识别出错误并修复了它,我可以在我们的开发环境中进行验证.我将我的WebJob作为"Azure WebJob"发布到我们的实时环境中,但我仍然存在错误.为了增加混乱,现在有时会发生错误.所以出于某种原因,旧代码有时会在某个地方运行.
有人可以帮我理解这个吗?
我打算在Azure中构建两个系统之间的集成.该应用程序的基本体系结构将是Azure等效的内部部署控制台应用程序.例如,在预定的基础上改变两个系统之间的数据
我可以在App Services中看到两种方法.
一个Web应用程序,具有Web作业.就我而言,我现在根本不需要这个网站.
具有自定义编码API应用的逻辑应用.就我而言,整个集成可能只是一个自定义API应用程序,而不是一系列链式API应用程序.
两者看起来都支持预定的活动和我需要的连接.两者看起来都会缩放,但这并不是我正在计划的事情的关注点.两者似乎都有非常简单的部署路径.真的看起来非常相似.
我认为唯一的主要区别是,Web作业的Web应用程序将始终带有一个网站.它是否正确?如果是这样的话,我可能会选择一个网络应用程序,因为可能会在遥远的未来使用该网站.
我在这里遗漏了任何会影响我决定的事吗?差别这么简单吗?
我有一个Azure WebJob项目,我在我的开发机器上本地运行.它正在侦听Azure Service Bus消息队列.什么都没有像主题,只是最基本的消息队列.
它多次接收/处理相同的消息,在收到消息时立即启动两次,然后在处理消息时间歇性地启动.
问题:
我正在使用异步函数,简单的注入器和自定义JobActivator,因此我的函数签名是:而不是静态void方法:
public async Task ProcessQueueMessage([ServiceBusTrigger("AnyQueue")] MediaEncoderQueueItem message, TextWriter log) {...}
Run Code Online (Sandbox Code Playgroud)
在工作中,它正在移动blob服务上的一些文件,并从媒体服务调用(和等待)媒体编码器.因此,虽然Web作业本身没有进行大量处理,但是需要相当长的时间(对于某些文件,这需要15分钟).
该应用程序正在启动,当我向队列发布消息时,它会响应.但是,一旦收到消息,它就会多次收到消息:
Executing: 'Functions.ProcessQueueMessage' - Reason: 'New ServiceBus message detected on 'MyQueue'.'
Executing: 'Functions.ProcessQueueMessage' - Reason: 'New ServiceBus message detected on 'MyQueue'.'
Run Code Online (Sandbox Code Playgroud)
此外,当任务正在运行时(我看到媒体服务功能的输出),它将从队列中获得另一个"副本".
最后,在任务完成后,它仍然间歇性地处理相同的消息.
将我自己的项目从早期(几个月前)版本的Azure功能升级到当前版本后,从VS启动时出现以下错误.
GetLoginUrl:Microsoft.Azure.WebJobs.Host:错误索引方法'Login.GetLoginUrl'.Microsoft.Azure.WebJobs.Host:无法将参数'log'绑定到类型ILogger.确保绑定支持参数Type.如果您正在使用绑定扩展(例如ServiceBus,Timers等),请确保您已在启动代码中调用扩展的注册方法(例如config.UseServiceBus(),config.UseTimers()等).
之前,我曾经把TraceWriter log我的方法作为最后一个参数,但后来我发现我应该使用它ILogger.在我做出改变之前,我得到了与上面相同的错误.
本ILogger似乎被映射到组装Microsoft.Extensions.Logging.Abstractions.也许这就是为什么它不被认可?哪个ILogger应该用?这是方法签名.
[FunctionName("GetLoginUrl")]
public static HttpResponseMessage GetLoginUrl(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]HttpRequestMessage req,
ILogger log)
Run Code Online (Sandbox Code Playgroud)
我没有尝试将其部署到Azure.
不幸的是,创建一个全新的函数项目并没有帮助,因为没有.CS文件可以查找以纠正这个问题.
刚刚安装了Visual Studio 15.5 Preview,以便我可以创建一个面向.NET Core的Azure功能.没有做任何更改,我看到一个警告 - 见下文 - 其中显示:
使用.NET Framework 4.6.1版而不是项目目标框架.NET Standard 2.0版还原了Microsoft.AspNet.WebApi.Client 5.2.2软件包.此软件包可能与您的项目不完全兼容.
知道如何解决这个问题或者忽略这个警告吗?正如我所说,这是我创建的一个全新的Azure Function项目,完全没有任何变化.
azure-webjobs azure-webjobssdk .net-core asp.net-core azure-functions
我已经开始使用asp.net core 2 web应用程序,我可以使用Web部署从Visual Studio将其发布到App Service.
我已经创建了新的干净.net核心2控制台应用程序.我可以将其作为webjob上传并使用Azure Portal运行,但如何从本地命令行或Visual Studio发布它?
基本上,我不关心它是与Web应用程序一起发布还是作为独立发布.
编辑:我通过右键单击项目并选择发布(不发布为Azure WebJob)作为文档中的menioned,以某种方式设法获得发布对话框.但我仍然不知道诀窍是什么.安装Azure SDK?添加webjob-publish-settings.json?添加Setting.job?
azure azure-webjobs .net-core asp.net-core visual-studio-2017
我有一个Visual Studio 2017解决方案,同时具有ASP.NET Web应用程序项目(称为UI)和Azure WebJob项目(称为WebJobs)。我已经将两者都配置为从Visual Studio(右键单击,发布)中部署到Azure到同一App Service。该解决方案还配置为每当我推送到VSTS时就构建。
我想设置VSTS,以便在成功构建后也部署两个项目,但是我遇到了问题。
我的理解是,要实现这一点,我需要创建一个发布定义,该发布定义通过添加到管道中的“部署Azure应用服务”任务链接到我的构建定义。我尝试了此操作,但出现错误,因为在artifacts文件夹中找到多个.zip文件,建议我使过滤器更具体,因此我将“ Package or folder”选项从$(System.DefaultWorkingDirectory)/**/*.zip更改为$(System.DefaultWorkingDirectory)/**/UI.zip。这可以解决该错误,但现在显然只在部署我的应用程序(UI)。
我的下一步是尝试为WebJob项目创建一个单独的环境,并将其指定$(System.DefaultWorkingDirectory)/**/WebJobs.zip为Package。现在,两种环境都“成功”部署,但它破坏了我的应用程序,我很确定它已经在应用程序顶部部署了WebJob(我不知道如何确认这种信念...)。
我注意到,当您向发行版定义添加环境并选择模板时,在“ Azure App Service部署”下显示:“将应用程序部署到Azure App Services。从Windows,Linux,Containers,Function Apps或Web应用Web Jobs ”,但是在选择此模板时,“应用程序类型”下拉列表中未列出WebJob!
我在网上找到了一些有关从VSTS部署WebJob的资源,但是它们都已过时,并且所描述的选项不再与VSTS中的当前选项匹配。
大卫·埃博(David Ebbo)和陈星辰(starian chen)的以下回答都解决了我的问题。
首先,您必须右键单击Visual Studio中的Web App项目,然后选择“ 添加”>“现有项目”作为Azure WebJob,然后按照向导进行操作。接下来,您必须确保VSTS部署任务通过更新软件包或文件夹路径过滤器来确保仅找到一个要部署的.zip软件包,因此它仅找到Web应用程序的.zip软件包。就我而言$(System.DefaultWorkingDirectory)/**/UI.zip。
非常感谢@DavidEbbo和@starianchen的帮助!
azure azure-webjobs azure-web-app-service azure-devops azure-pipelines-release-pipeline
azure-webjobs ×10
azure ×7
.net-core ×2
asp.net-core ×2
c# ×2
.net ×1
architecture ×1
azure-devops ×1