标签: azure-webjobs

如何防止Azure WebJob在发布后启动?

我们有一个带有"暂存"部署插槽的Azure网站设置,我们使用连续的Azure WebJob来处理长时间运行的后台作业.看来,当您发布到网站(并包含WebJob二进制文件)时,如果先前已停止,WebJob将自动重新启动.

我们当前的部署过程如下所示:

  1. 部署到STAGING
  2. 立即快速停止STAGING上的WebJob(尝试阻止2个WebJobs处理消息)
  3. STAGING上的烟雾测试和验证代码有效
  4. 停止PRODUCTION WebJob(让它排出队列消息)
  5. 生产和分段之间的交换
  6. 启动PRODUCTION WebJob(这只是STAGING WebJob)

是否有一个技巧(比如一个标志文件或其他东西)告诉WebJob在发布后不要启动?

azure-webjobs

14
推荐指数
2
解决办法
3436
查看次数

Azure WebJob命令超时

我们遇到Azure Web Jobs问题.我们创建了一个C#控制台应用程序,压缩它,并创建了新的Web作业.这是一个ac#console应用程序,它将不断点击我们的一个Web服务来处理队列中的项目.

每当我们运行Web作业时,我们都会收到以下错误:

'cmd/c xxxxxxxx ....'由于没有输出和CPU活动而中止了121秒.您可以增加SCM_COMMAND_IDLE_TIMEOUT设置以解决问题

当我们将SCM_COMMAND_IDLE_TIMEOUT增加到600(10分钟)时.作业运行10分钟 - 然后我们得到相同的错误,同样的121 seconds错误.

我们做错了什么?

这是控制台应用程序代码:

static void Main(string[] args)
    {

        bool ThereAreItemsInQueue = true;
        int Counter = 1;
        DateTime StartTime = DateTime.Now;

        while(ThereAreItemsInQueue)
        {
            Task.Run(() => {
                try
                {
                    //DEQUEUE
                    byte[] response = HttpHelper.HttpPOST(@"xxxxxxxxxxxxx", new byte[0]);
                    string strResponse = System.Text.Encoding.Default.GetString(response);
                    System.Diagnostics.Trace.TraceError("Attempt #" + Counter + "DEQUEUE FINISHED. Response:" + strResponse);

                    //CHECK IF THE QUEUE IS EMPTY
                    if (strResponse.Contains("Were Done"))
                        ThereAreItemsInQueue = false;

                }
                catch(Exception ex)
                {
                    System.Diagnostics.Trace.TraceError("Error Has …
Run Code Online (Sandbox Code Playgroud)

c# azure azure-webjobs

14
推荐指数
2
解决办法
7472
查看次数

通过Git部署的计划Azure WebJob会导致按需作业

我有一个启用了Git的ASP.NET WebApp,其中包含一个关联的Azure WebJob.当我通过Visual Studio部署它时,一切都很好,但在连续交付环境中这有点难,所以我想通过Git发布Web App和WebJob.

通过Azure工具我关联了我的WebJob项目,我在WebApp项目中获得了一个"webjobs-list.json"文件:

{
"$schema": "http://schemastore.org/schemas/json/webjobs-list.json",
"WebJobs": [{
  "filePath": "../CodeInside.Hub.Job/CodeInside.Hub.Job.csproj"
  }]
}
Run Code Online (Sandbox Code Playgroud)


webjobs-list.json来源

在Console App Project中,我得到了一个带有以下内容的"webjob-publish-settings.json"文件: 

{
"$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
"webJobName": "Hub-Crawler",
"startTime": "2014-11-25T02:00:00+01:00",
"endTime": null,
"jobRecurrenceFrequency": "Day",
"interval": 1,
"runMode": "Scheduled"
}
Run Code Online (Sandbox Code Playgroud)

webjob - 发布 - settings.json

正如您所看到的,"runMode"设置为"Scheduled",当我通过Visual Studio部署它时一切正常.

但是没有Visual Studio我得到了这个"按需"的WebJob: 在此输入图像描述

这是目前不支持或可能是什么问题?

完整的.sln可以在GitHub找到

git azure continuous-deployment azure-webjobs

14
推荐指数
2
解决办法
1869
查看次数

AcquireTokenSilent始终无法以静默方式获取令牌

使用ADAL我有两个AuthenticationContext使用SQL中持久化的令牌缓存.

使用AcquireTokenByAuthorizationCode它在数据库中写入令牌,但在使用时AcquireTokenSilent我总是得到

无法以静默方式获取令牌.调用方法AcquireToken

以下是复制问题的详细信息:

我创建了一个Context

AuthenticationContext authContext = new AuthenticationContext(_authority, new AzureAdalCache(companyId, _entries, _unitOfWork));
Run Code Online (Sandbox Code Playgroud)

然后我通过授权获取授权

authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), _clientCredential);
Run Code Online (Sandbox Code Playgroud)

此时,它会在数据库中保存一个条目

然后,如果我打电话给我,我得到一个例外.

authContext.AcquireTokenSilent(_authority, _clientCredential, new UserIdentifier(companyId.ToString(), UserIdentifierType.UniqueId)).AccessToken;
Run Code Online (Sandbox Code Playgroud)

我也尝试过相同的结果:

authContext.AcquireTokenSilent(_authority, _clientId).AccessToken;
authContext.AcquireTokenSilent(_authority, _clientCredential, UserIdentifier.AnyUser).AccessToken;
Run Code Online (Sandbox Code Playgroud)

AzureAdalCache这个要点中发布我的实现.

Cache的每个条目都是这样的.

我错过了什么?

更新

根据@vibronet的评论回答,我有这个

AuthenticationContext authContext = new AuthenticationContext(_authority, new AzureAdalCache(companyId, _entries, _unitOfWork));
authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), _clientCredential, _eWSResource);
string result = authContext.AcquireTokenSilent(_eWSResource, _clientId, UserIdentifier.AnyUser).AccessToken;
Run Code Online (Sandbox Code Playgroud)

oauth azure azure-active-directory adal azure-webjobs

14
推荐指数
1
解决办法
2万
查看次数

WebJob一次从队列处理多个消息

WebJob正在处理来自队列的多条消息,我不想要它.我的队列有依赖消息,我想依次按顺序处理.我已经尝试将"BatchSize"配置为1,但没有运气.它仍然是一次处理多个消息.

azure azure-servicebus-queues azure-webjobs azure-webjobssdk

14
推荐指数
2
解决办法
3387
查看次数

如何在Azure中托管TCP侦听器?

我希望在Azure中构建一个应用程序,它将充当TCP侦听器,在指定端口上接收TCP消息流,然后将信息添加到数据库.传入的TCP通信将使用证书进行保护.

我正在考虑以下选项:

云服务工作者角色

这看起来肯定会起作用.但是,这意味着我必须使用Cloud Service,而我错过了App Service提供的功能和简单性.Cloud Service 文档还专门描述了如何打开所需的TCP端口.

应用服务

在逻辑应用程序(首选)中,但这似乎本身不支持TCP侦听器,因此我希望构建一个自定义API应用程序.或者,我可以创建一个Web作业.

但是我不确定这种方法是否有效,我有以下问题:

  • 我可以在App Service上公开任意TCP端口吗?
    • 虽然Cloud Service文档具体描述了如何执行此操作,但我找不到与App Service类似的任何内容.因此,要么不需要配置,要么在App Service中无法进行TCP通信.
  • 我可以在逻辑应用程序,API应用程序或Web作业中构建TCP侦听器,例如,Azure的体系结构是否支持TCP侦听器所需的行为?

我可以在Azure应用服务中托管TCP侦听器吗?

tcp azure azure-cloud-services azure-webjobs azure-logic-apps

14
推荐指数
2
解决办法
6956
查看次数

连续的WebJob会自动停止

我有一个与网站相关联的Webjob,它被配置为连续运行,它所做的只是查看消息队列并处理它.

我的网站处于共享模式,目前几乎没有任何流量,所以我设置了虚拟服务,每隔1分钟请求主页,以防止网站被关闭作为此测试的一部分,并且接缝工作正如预期的那样,我可以注意到网站本身没有关闭.但是,除非我转到Azure管理门户并查找webjob状态,否则此webjob将在大约一小时内保持关闭状态.那一刻我去那里再次启动然后在几分钟到一个小时内关闭.

此webjob的日志文件显示如下:

[02/13/2015 09:19:45 > 4660f6: INFO] Job host started
[02/13/2015 10:19:41 > 4660f6: SYS INFO] WebJob is still running
[02/13/2015 10:20:35 > 4660f6: SYS INFO] WebJob is stopping due to website shutting down
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Stopping
[02/13/2015 10:20:35 > 4660f6: INFO] Job host stopped
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Success
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Stopped
Run Code Online (Sandbox Code Playgroud)

我可以看到我的网站仍在运行并返回主页,但作业本身已停止.

现在,当我登录管理门户查找状态时,我可以在日志中看到:

[02/13/2015 10:20:35 > 4660f6: SYS …
Run Code Online (Sandbox Code Playgroud)

azure azure-webjobs azure-webjobssdk

13
推荐指数
2
解决办法
7814
查看次数

如何在Azure Web作业中实例化OWIN IDataProtectionProvider?

我需要一个IDataProtectionProvider使用UserManagerAzure Web Jobs工作者中的Identity Framework生成电子邮件确认令牌的实例:

var confirmToken = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
Run Code Online (Sandbox Code Playgroud)

这会崩溃,因为null IUserTokenProvider<User, int>被传递给UserManager<User, int>on constru.

在MVC应用程序中,实例创建如下:

public class OWINStartup
{
    public void Configuration(IAppBuilder app)
    {
        var dataProtectionProvider = app.GetDataProtectionProvider();
Run Code Online (Sandbox Code Playgroud)

但是,Azure Web Jobs当然没有OWINStartup钩子.有什么建议?

azure owin asp.net-identity azure-webjobs

13
推荐指数
1
解决办法
2701
查看次数

Webjobs会自动续订Azure Queue消息的租约吗?

当Webjobs通过QueueTrigger从Azure存储上的队列中获取消息时,它会租用该消息(使其不可见).如果(webjob的)触发功能需要很长时间来处理消息,这个租约是否会自动扩展?或者我应该在功能中处理?

在此链接Windows Azure队列:改进租约,进度跟踪和未来工作的调度,作者声明" 消息的租约可以由执行原始出列的工作人员扩展,以便它可以继续处理消息 "

注意:我尝试了一个等待20分钟的webjob(带有QueueTrigger).

//Write Log
Thread.Sleep(1200000);
//Write Log
Run Code Online (Sandbox Code Playgroud)

它成功完成.在此期间,没有其他webjob实例尝试尝试相同的队列项(它没有变得可见).因此,似乎存在租赁的自动更新机制.无论如何,我正在等待微软员工的回答或官方链接(msdn,azure,...).

c# azure azure-storage-queues azure-webjobs

13
推荐指数
1
解决办法
1195
查看次数

Azure WebJob不接受有效的(?)CRON表达式

我使用crontab.guru创建了一个非常简单的CRON表达式,其中包含在3:15(AM)每天执行的所需行为,结果如下:15 3 * * *

Crontab.guru

对我来说不幸的是,在Azure门户中这不起作用,但如果我这样添加一个导致0我的表达式0 15 3 * * *,Azure将接受它,同时crontab.guru会告诉我它是错误的.根据规格crontab.guru是:工作日的分钟日期月份.

Azure不接受我的CRON表达式

Azure接受带有前导零的表达式

问题......

  • 从哪里来的差异?
  • 微软是否以其传统方式拥有一个领先零的专有实现?
  • 如果标准是工作日的分钟日期月份,那么前导零描述的是什么?

cron azure cronexpression azure-webjobs

13
推荐指数
1
解决办法
4481
查看次数