我们有一个带有"暂存"部署插槽的Azure网站设置,我们使用连续的Azure WebJob来处理长时间运行的后台作业.看来,当您发布到网站(并包含WebJob二进制文件)时,如果先前已停止,WebJob将自动重新启动.
我们当前的部署过程如下所示:
是否有一个技巧(比如一个标志文件或其他东西)告诉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) 我有一个启用了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)
在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)
正如您所看到的,"runMode"设置为"Scheduled",当我通过Visual Studio部署它时一切正常.
但是没有Visual Studio我得到了这个"按需"的WebJob:

这是目前不支持或可能是什么问题?
使用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) WebJob正在处理来自队列的多条消息,我不想要它.我的队列有依赖消息,我想依次按顺序处理.我已经尝试将"BatchSize"配置为1,但没有运气.它仍然是一次处理多个消息.
azure azure-servicebus-queues azure-webjobs azure-webjobssdk
我希望在Azure中构建一个应用程序,它将充当TCP侦听器,在指定端口上接收TCP消息流,然后将信息添加到数据库.传入的TCP通信将使用证书进行保护.
我正在考虑以下选项:
云服务工作者角色
这看起来肯定会起作用.但是,这意味着我必须使用Cloud Service,而我错过了App Service提供的功能和简单性.Cloud Service 文档还专门描述了如何打开所需的TCP端口.
应用服务
在逻辑应用程序(首选)中,但这似乎本身不支持TCP侦听器,因此我希望构建一个自定义API应用程序.或者,我可以创建一个Web作业.
但是我不确定这种方法是否有效,我有以下问题:
我可以在Azure应用服务中托管TCP侦听器吗?
tcp azure azure-cloud-services azure-webjobs azure-logic-apps
我有一个与网站相关联的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) 我需要一个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钩子.有什么建议?
当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,...).
我使用crontab.guru创建了一个非常简单的CRON表达式,其中包含在3:15(AM)每天执行的所需行为,结果如下:15 3 * * *
对我来说不幸的是,在Azure门户中这不起作用,但如果我这样添加一个导致0我的表达式0 15 3 * * *,Azure将接受它,同时crontab.guru会告诉我它是错误的.根据规格crontab.guru是:工作日的分钟日期月份.
问题......