我正在尝试创建一个Azure WebJob来发送BrokeredMessage到Azure ServiceBus主题,创建和发送消息的实际行为是微不足道的,但是我一直无法找到自动创建Scheduled WebJob的方法.
自动化工作流程应如下工作:
Azure管理门户为此功能提供了一个很好的UI,它在所选的WebSite,Azure Scheduler作业集合和Azure Scheduler作业中创建Azure WebJob:

似乎没有使用Azure Service Management PowerShell模块创建计划的Azure WebJob的类似机制.当然可以创建新的WebJobs,Azure Scheduler集合和作业 - 但是我不知道Azure Scheduler发布到哪个URL或存储队列来安排Azure WebJobs.
powershell azure azure-web-sites azure-scheduler azure-webjobs
我在Azure网站中有一个正在中止的Web作业.它的运行时间相当长,大约需要30分钟.它从Azure SQL数据库中提取大量数据,并基本上编译用于报告的数据.
查看输出日志,似乎Azure中止作业,在执行过程中没有任何警告.没有迹象表明原因.
有没有办法阻止Azure中止Web作业?
该网站托管在标准的天蓝色网站内.
谢谢
我正在创建一个dot net控制台应用程序,它将作为Azure webjob运行.它计划每小时运行一次.
我想知道如何在调用时将参数传递给作业?
我知道可以从服务总线队列接收消息,如:
public static void ProcessQueueMessage([ServiceBusTrigger("inputqueue")] string message, TextWriter logger)
Run Code Online (Sandbox Code Playgroud)
但是还有一种通过触发属性接收会话的方法吗?像ServiceBusSessionTrigger这样的东西?
通常人们会接受这样的会话:
var session = queueClient.AcceptMessageSession();
Run Code Online (Sandbox Code Playgroud)
但我更喜欢WebJob SDK来处理一次可以处理多个会话的方式.
编辑: 似乎目前不支持此功能:请参阅github了解功能请求
c# azureservicebus azure-servicebus-queues azure-webjobs azure-webjobssdk
我想创建一个连续运行的webjob但首先我想尝试在本地运行它以进行调试.我正在使用Visual Studio 2015,我运行了azure存储模拟器(我可以在visual studio中运行azure webjobs的示例).当我运行它时,它在新的JobHost()行上失败.
例外:值不能为空.参数名称:方法
static void Main()
{
var host = new JobHost();
host.CallAsync(typeof(Functions).GetMethod("GetNextJob"));
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
[NoAutomaticTriggerAttribute]
public static async Task GetNextJob()
{
while(true)
{
try
{
var log = new Logger();
log.WriteInfo("Getting next job to be run", 0, 0, "Brain");
//Console.WriteLine("Getting new Job and putting to que");
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
await Task.Delay(TimeSpan.FromSeconds(5));
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在本地运行连续运行的工作吗?
我有一个网站和一个webjob项目在同一个sln:
在Sritttheres 属性中webjobs-list.json具有以下设置:
"WebJobs": [
{
"filePath": "../Sritt.WebJob/Sritt.WebJob.csproj"
}
Run Code Online (Sandbox Code Playgroud)
我已经像这样配置了VSTS构建(使用新的构建系统):
Solution: **\*.sln
MSBuild Args: /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.stagingDirectory)"
Run Code Online (Sandbox Code Playgroud)
在VSTS中构建给我以下警告:
C:\a\1\s\packages\Microsoft.Web.WebJobs.Publish.1.0.9\tools\webjobs.console.targets(149,5): warning : WebJob schedule for SrittWebJob will not be created. WebJob schedules can only be created when the publish destination is an Azure Website [C:\a\1\s\Sritt.WebJob\Sritt.WebJob.csproj]
Run Code Online (Sandbox Code Playgroud)
并出现以下错误:
packageFile= Find-Files -SearchPattern C:\a\1\a\**\*.zip
packageFile= C:\a\1\a\Sritt.WebJob.zip C:\a\1\a\Sritt.zip
Found more than one file to deploy with search pattern 'C:\a\1\a\**\*.zip'. There can be only one.
Run Code Online (Sandbox Code Playgroud)
如何部署网站和webjob?我需要将它们分成不同的解决方案吗?
我在连续的Web作业中编写了以下函数:
public static void fun1([TimerTrigger("24:00:00", RunOnStartup = true, UseMonitor = true)] TimerInfo timerInfo, TextWriter log)
{//Code}
public static void fun2([TimerTrigger("00:01:00", RunOnStartup = true, UseMonitor = true)] TimerInfo timerInfo, TextWriter log)
{//code}
Run Code Online (Sandbox Code Playgroud)
其中,fun1没有被再次调用(在启动web作业后只调用一次),并且每个进程完成后,fun2将被调用1分钟触发器.
任何人都可以解释为什么?我做错了吗?
我已按照本教程将.NET Core控制台应用程序部署到Azure Web Service WebJob.
我的应用程序在本地运行没有任何问题(使用dotnet 1.0.0-preview2-003131)但是当我尝试从Azure控制台运行它时出现以下错误:
无法从[D:\ local\VirtualDirectory0\site\wwwroot\app_data\jobs\triggered\PopcornExportWebJob\hostpolicy.dll]加载dll,HRESULT:0x800700C1
从[D:\ local\VirtualDirectory0\site\wwwroot\app_data\jobs\triggered\PopcornExportWebJob]加载所需的库hostpolicy.dll时发生错误
Azure dotnet的版本是1.0.0-rc4-004771 ,hostpolicy.dll文件与我在本地使用的文件相同.事实上,当我从Azure下载部署的zip时,当我在本地运行它时,它工作正常.但它在Azure环境中失败了.
另外,这是我的project.json:
{
"publishOptions": {
"include": [
"run.cmd"
]
},
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": "appsettings.json"
},
"copyright": "bbougot",
"dependencies": {
"FubarCoder.RestSharp.Portable.Core": "4.0.7",
"FubarCoder.RestSharp.Portable.HttpClient": "4.0.7",
"Microsoft.ApplicationInsights.AspNetCore": "2.0.0",
"Microsoft.Extensions.Configuration": "1.1.0",
"Microsoft.Extensions.Configuration.Json": "1.1.0",
"Microsoft.Extensions.DependencyInjection": "1.1.0",
"Microsoft.Extensions.Logging": "1.1.0",
"Microsoft.Extensions.Logging.Console": "1.1.0",
"Microsoft.NETCore.App": "1.1.0",
"MongoDB.Driver": "2.4.2",
"StructureMap.Microsoft.DependencyInjection": "1.3.0"
},
"description": "Popcorn Api Exporter",
"frameworks": {
"netcoreapp1.1": {
"imports": [
"portable-net45+win8"
]
}
},
"runtimes": {
"win10-x64": {}
}, …Run Code Online (Sandbox Code Playgroud) 我正在Azure中创建一个功能应用程序,并希望使用队列触发器.我知道如何在设计时配置队列名称,例如:
[FunctionName("MyTestFunction")]
public static void Run([QueueTrigger("myqueue-items", Connection = "testdelete")]string myQueueItem, TraceWriter log)Run Code Online (Sandbox Code Playgroud)
但是,我希望能够在配置文件中定义和引用它.我知道function.json(可能是这个),host.json和local.settings.json的存在,但我不知道如何在那里设置队列名称并在函数中引用它.
如果我部署在visual studio中创建的新创建的函数(使用新的15.3更新),我可以在部署后的function.json文件中看到以下内容(即使我在本地开发时该文件不存在):
"bindings": [
{
"type": "queueTrigger",
"queueName": "myqueue-items",
"connection": "testdelete",
"name": "myQueueItem"
}Run Code Online (Sandbox Code Playgroud)
我发现,如果我创建该文件,并将"queueName"更改为与实际函数中的值不匹配的内容,则遗憾的是它不会覆盖它(我猜这太容易了).
如何在函数QueueTrigger属性中引用function.json中的绑定?
据推测,无论解决方案是什么,我都可以使用毒物队列处理来做同样的事情吗?
我想这样做的原因是因为我需要部署完全相同函数的多个实例,但是将每个实例指向不同的队列(为了绕过最大内存限制).
谢谢.
我打算使用WebJobs作为NServiceBus的轻量级替代品,但是想要首先验证可以从触发的WebJob处理程序中进行例行SQL Azure数据库查询吗?我的数据库访问将通过EntityFrameworks.
这个SO线程表明WebJobs不支持SQL数据库,但我希望这只是意味着SQL数据库不能用作WebJob处理程序的触发机制?
Azure Web作业 - 如何连接到Azure MS SQL数据库?
我没有找到发布SQL数据库查询的WebJob示例,但由于WebJob可以访问与主WebSite相同的应用程序配置,我假设可以使用数据库连接详细信息?