我有一个与网站相关联的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) 我正在创建一个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
我有一个简单的 .NET V3 WebJob,在 .NET 网站中启动并运行了一个计时器触发器,如本答案所述:Scheduled .NET WebJob V3 example
但是,在输出中,我收到此警告:
warn: Host.Startup[0]
Warning: Only got partial types from assembly: Microsoft.Azure.WebJobs.Extensions.Storage, Version=3.0.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
The following loader failures occured when trying to load the assembly:
- Could not load file or assembly 'System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
- Method 'Commit' in type 'Microsoft.Azure.WebJobs.Host.Blobs.Bindings.DelegatingCloudBlobStream' from assembly 'Microsoft.Azure.WebJobs.Extensions.Storage, Version=3.0.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' does not have an implementation.
- Method 'Commit' in …
使用Azure WebJobs SDK,我想创建一个异步函数,它将接收ServiceBus队列输入并写入ServiceBus队列输出.异步方法不能有参数,对于BlobStorage上的示例,似乎可以通过使用Streams和TextWrite来解决这些参数.但是,当我尝试使用ServiceBus参数执行相同操作时,我收到异常.
public static async void Transform(
[ServiceBusTrigger("%InputQueue%")] String input,
[ServiceBus("%OutputQueue%")] TextWriter output,
TextWriter log)
Run Code Online (Sandbox Code Playgroud)
错误索引方法'FilterCurrentCpesToNewCpes'
无法绑定ServiceBus以键入"System.IO.TextWriter".
我收到Stream的类似消息.
如何在创建多个具有1个功能的WebJobs并将多个功能捆绑到一个或仅仅几个WebJobs之间做出决定?谢谢
我有一个与网站相关联的连续webjob,我在共享模式下运行该网站.我不想转到Always On选项,因为我的应用程序并不需要.我只想在给我的网站打电话时处理这条消息.
我的问题是,几分钟后工作仍然停止,即使我每隔5分钟在我的网站上不断调用一个虚拟保持方法,该方法将消息发布到由该webjob监视的队列中.
我的webjob是一个使用WebJob SDK构建的简单控制台应用程序,它具有这样的代码
JobHost host = new JobHost(new JobHostConfiguration(storageConnictionSttring));
host.RunAndBlock();
Run Code Online (Sandbox Code Playgroud)
消息处理函数如下所示:
public static void ProcessKeepAliveMessages([QueueTrigger("keepalive")] KeepAliveTrigger message)
{
Console.WriteLine("Keep Alive message called on :{0}", message.MessageTime);
}
Run Code Online (Sandbox Code Playgroud)
该作业的消息日志基本上说
[03/05/2015 18:51:02 > 4660f6: SYS INFO] WebJob is stopping due to website shutting down
Run Code Online (Sandbox Code Playgroud)
我不介意这种情况是否会发生,但是当网站开始下一次保持活动时,webjob就不会启动.所有消息都排队,直到我进入管理仪表板或SCM门户,如下所示
https://mysite.scm.azurewebsites.net/api/continuouswebjobs
Run Code Online (Sandbox Code Playgroud)
我可以看到这样的状态:
[{"status":"Starting","detailed_status":"4660f6 - Starting\r\n","log_url":"https://mysite.scm.azurewebsites.net/vfs/data/jobs/continuous/WebJobs/job_log.txt","name":"WebJobs","run_command":"mysite.WebJobs.exe","url":"https://mysite.scm.azurewebsites.net/api/continuouswebjobs/WebJobs","extra_info_url":"https://mysite.scm.azurewebsites.net/azurejobs/#/jobs/continuous/WebJobs","type":"continuous","error":null,"using_sdk":true,"settings":{}}]
Run Code Online (Sandbox Code Playgroud)
如果有人能帮我理解这里出了什么问题,我真的很感激.
我希望能够在实际将Azure WebJobs SDK项目发布到Azure之前在本地测试它.
如果我创建一个全新的Azure Web Jobs项目,我会得到一些如下所示的代码:
Program.cs中:
// To learn more about Microsoft Azure WebJobs SDK, please see http://go.microsoft.com/fwlink/?LinkID=320976
class Program
{
// Please set the following connection strings in app.config for this WebJob to run:
// AzureWebJobsDashboard and AzureWebJobsStorage
static void Main()
{
var host = new JobHost();
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
}
Run Code Online (Sandbox Code Playgroud)
Functions.cs:
public class Functions
{
// This function will get triggered/executed when a new message is …Run Code Online (Sandbox Code Playgroud) 我们有一个 Azure WebJob (3.x) 在 Azure 中的 API 应用程序下运行,全部为 Core 2.1。它可以正常发布并运行,但不显示任何函数或在仪表板上列出函数调用。这很奇怪,因为作业的控制台输出确实显示它检测到一个函数:
[10/17/2018 09:26:19 > fa7c81: SYS INFO] Run script 'run.cmd' with script host - 'WindowsScriptHost'
[10/17/2018 09:26:19 > fa7c81: SYS INFO] Status changed to Running
[10/17/2018 09:26:19 > fa7c81: INFO]
[10/17/2018 09:26:19 > fa7c81: INFO] D:\local\Temp\jobs\continuous\SubmissionJob\43ucb4rv.ipc>dotnet SubmissionJob.dll
[10/17/2018 09:26:21 > fa7c81: INFO] dbug: Microsoft.Extensions.Hosting.Internal.Host[1]
[10/17/2018 09:26:21 > fa7c81: INFO] Hosting starting
[10/17/2018 09:26:21 > fa7c81: INFO] info: Microsoft.Azure.WebJobs.Hosting.JobHostService[0]
[10/17/2018 09:26:21 > fa7c81: INFO] Starting JobHost
[10/17/2018 09:26:21 > fa7c81: INFO] …Run Code Online (Sandbox Code Playgroud) 我正在使用带有Windows Azure Storage SDK的Webjob.当一个新项目出现在队列中时,我的类中会调用一个方法.根据SDK文档,如果我将TextWriter作为参数添加到我的方法中,SDK将为我提供一个我可以写入的TextWriter,它将显示在Webjob的日志记录基础结构中.这使得诊断问题和解决问题非常容易.
public async static void ProcessQueueMessage([QueueTrigger("queueName")]MyModelType model, TextWriter logger)
{
await logger.WriteLineAsync(string.Format("Processing Item {0}", model.SasUrl));
// Some work here
await logger.WriteLineAsync(string.Format("Done Processing Item {0}", model.SasUrl));
}
Run Code Online (Sandbox Code Playgroud)
但是,很常见的是,在我的方法体内,TextWriter正在被处理掉.我在第二个logger.WriteLineAsync上遇到以下异常:
System.ObjectDisposedException was unhandled by user code
HResult=-2146232798
Message=Cannot write to a closed TextWriter.
Source=mscorlib
ObjectName=""
StackTrace:
at System.IO.__Error.WriterClosed()
at System.IO.StringWriter.Write(Char[] buffer, Int32 index, Int32 count)
at System.IO.TextWriter.WriteLine(String value)
at System.IO.TextWriter.SyncTextWriter.WriteLine(String value)
at System.IO.TextWriter.SyncTextWriter.WriteLineAsync(String value)
at NameOfProject.Program.<ProcessQueueMessage>d__8.MoveNext() in c:\Dev\Path\To\Program.cs:line 173
InnerException:
Run Code Online (Sandbox Code Playgroud)
我找不到其他人遇到这个问题,所以我无法想象SDK或webjobs基础设施中存在错误.
有没有办法告诉记录器是否在通话前被处理掉了?
有没有办法在我的方法中创建一个新的记录器,它将参与WebJobs记录子系统和UI?