我创建了一个按需webjob.在管理门户中,没有上传新zip的选项来更新它.
我可以删除现有的webjob并创建一个新的webjob,但我想保留我的日志.
有没有办法重新部署它,覆盖旧版本,维护日志?
我正在开发一个应该连续运行的天蓝色webjob.我有一个公共静态函数.我希望在没有任何队列的情况下自动触发此功能.现在我正在使用while(true)连续运行.有没有其他方法可以做到这一点?
请在下面找到我的代码
static void Main()
{
var host = new JobHost();
host.Call(typeof(Functions).GetMethod("ProcessMethod"));
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
[NoAutomaticTriggerAttribute]
public static void ProcessMethod(TextWriter log)
{
while (true)
{
try
{
log.WriteLine("There are {0} pending requests", pendings.Count);
}
catch (Exception ex)
{
log.WriteLine("Error occurred in processing pending altapay requests. Error : {0}", ex.Message);
}
Thread.Sleep(TimeSpan.FromMinutes(3));
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我想知道Azure WebJobs SDK是否可以触发异步方法?目前我有一个如下所示的方法:
class Program
{
static void Main(string[] args)
{
var host = new JobHost();
host.RunAndBlock();
}
public static void ProcessStuff([QueueInput("myqueue")] string msg)
{
var tsk = ProcessStuffAsync(msg)
.ContinueWith(x => HandleAsyncError(x),
TaskContinuationOptions.OnlyOnFaulted);
tsk.Wait();
}
public static async Task ProcessStuffAsync(string msg)
{
// do some async stuff and await it
}
// other methods ...
}
Run Code Online (Sandbox Code Playgroud)
但是,我想知道我是否可以让JobHost知道调用我的异步方法呢?尝试在WebJobs中使用async/await时,没有大量的文档,如果可以的话,它会非常好.
我正在尝试在本地运行此测试...但WebJobs SDK不支持本地存储模拟器...
更新2014年4月7日:Victor的答案是正确的,但我确实想要展示你在WebJob中使用异步方法会看到什么(他们确实有效).
对于WebJob中的方法,如下所示:
public async static Task ProcessMessageAsync([QueueInput("testq2")] string message)
{
await Task.Delay(50);
Console.WriteLine("Processing Message Async...");
Console.WriteLine(message);
}
Run Code Online (Sandbox Code Playgroud)
您将在WebJobs日志中看到以下输出:
running in pid: …Run Code Online (Sandbox Code Playgroud) 当我在Windows Azure中将控制台应用程序作为WebJob运行时,在几行日志之后会添加警告:
[05/06/2014 09:42:40 > 21026c: WARN] Reached maximum allowed output lines for this run, to see all of the job's logs you can enable website application diagnostics
Run Code Online (Sandbox Code Playgroud)
并停止记录.我正在使用BASIC托管计划浏览我的网站中的所有设置,但我无法找到任何可以解决此问题的内容.
如何启用完整的webJob日志?
我计划将一个网站部署到Azure,它将利用Web Jobs.
如果站点扩展为在多个实例上运行,我是否应该期望在所有实例上启动作业(并发运行),或者我是否可以期望一次只运行一个作业实例?可以在Azure中配置吗?
当我将带有QueueTrigger(在app.config中定义的队列连接)的连续运行的Azure WebJob部署到部署槽(例如"Staging")时会发生什么?
它会开始运行并收听队列中的消息,还是只会在生产槽中启动?
我担心的是,如果只是开始处理来自队列的消息,即使它还不在生产槽中.如果是这种情况,是否应将队列连接字符串从app.config移动到Azure网站配置中,以便我的暂存和生产插槽可以在不同的队列上运行?
我们有一个Azure网站,每天都有预定的工作.在我们的示例中,计划的作业运行大约10分钟的存储过程,因此没有本地处理.我们的网络工作在大约4分钟后因此错误而终止.
Command 'cmd /c ...' aborted due to no output and CPU activity for 121 seconds.
You may increase SCM_COMMAND_IDLE_TIMEOUT setting to solve the issue.
Run Code Online (Sandbox Code Playgroud)
我们已尝试将以下应用设置添加到Web作业的app.config文件中:
<appSettings>
<add key="SCM_COMMAND_IDLE_TIMEOUT" value="100000" />
<add key="WEBJOBS_IDLE_TIMEOUT" value="100000" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
这些文件在本文档https://github.com/projectkudu/kudu/wiki/Web-jobs中引用,但它们似乎没有任何效果.(在将设置添加到app.config文件后仍然超时)
我们是否将配置设置添加到正确的位置?
谢谢您的帮助.
朋友们,
我正在尝试使用Azure WebJobs设置持续集成.我在解决方案中有一个Web和一个WebJobs项目.我已经在Visual Studio Online(*.visualstudio.com)中为Web应用程序设置了持续集成和部署.我还使用Visual Studio ASP.Net扩展连接了WebJobs和Web应用程序 - 右键单击VS 2013中的WebSite项目>添加>现有Azure WebJob项目.它在网站项目中创建了webjobs-list.json文件.
我期待在Visual Studio Online构建之后,当Azure网站发生Web应用程序部署时,它也将部署WebJobs.但事实并非如此.
在visualstudio.com中构建Visual Studio Online之后,我们如何自动化WebJobs部署?
我有一个Azure网站,其中包含一个包含多个实例的生产和临时插槽.
我在网站上运行了几个Azure webjobs,其中一些是触发其他连续的.
据我所知,触发的webjobs只能在一个实例上运行一次.
我目前的设置是:
生产站点除了从分段交换之外没有其他部署
暂存网站设置为从bitbucket持续部署
使用"发布到Azure"将Webjobs从VS内部署到生产槽(因为AFAIK不支持基于计划的webjobs的连续部署)
该网站的VS解决方案与包含webjobs的VS解决方案不同
我注意到当我交换生产和分期时,webjobs也被交换了!当我将新的webjob部署到生产中并随后进行网站部署然后进行交换时,我意识到了这一点,新部署的webjob不再位于生产槽中!
我的问题:
是否有可能阻止webjobs在生产和分期之间交换(webjobs实际上是完全不同的代码片段而不是网站)
什么是交换webjobs?二进制文件?时间表?两个?
如何阻止所有webjobs在临时插槽上运行?我的webjobs不需要高度可用,我可以轻松地离线测试它们.
如果我VS将webjobs部署到临时插槽并进行交换,那么当前的暂存插槽将缺少已部署的webjob,当我进行下一次网站更新时,我将丢失它,那么我应该在哪里部署我的webjobs?
有一个相关的线程,但它假设webjob与一个网站同时部署,这不是我目前的.
我真的很喜欢网站和webjobs,但似乎与连续独立部署webjobs和网站有关的故事被打破了.
真的很感激建议!
谢谢
在编写C#函数时,Azure函数之间ICollector<T>和之间的区别是什么IAsyncCollector<T>(也适用于WebJobs)?
我从样本中了解到这些是我可以用来将函数参数绑定到输出绑定的接口.我也理解这两个接口相应地具有非异步和异步方法签名(即ICollector<T>.Add(item)和IAsyncCollector<T>.AddAsync(item)).但他们在封面下做了什么?它们实际上是将数据发布到输出绑定,还是在函数执行结束时进行内部缓冲和刷新(在这种情况下,为什么会有AddAsync方法)?