我正在使用带有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?
我有以下场景:
问题是,如何将webjob的进度传达给客户?最初我的想法是从webjob推送消息,因此Hub可以从队列中读取它.然后,我会通过集线器通知客户.但是,我无法找到传达webjob和集线器的方法,当消息被推入队列或服务总线时,我不知道如何在集线器中触发操作.也就是说,我不知道如何将集线器订阅到队列的某个消息.
有人可以帮我吗?
signalr azure-servicebus-queues asp.net-mvc-5 azure-webjobs azure-webjobssdk
毒性消息处理如何为Azure WebJobs SDK工作ServiceBusTrigger?我希望将已经出队超过'x'次的服务总线队列消息推送到不同的ServiceBus(或)存储队列
在线文档这里和这里和SDK样本,这里不会对带毒邮件如何处理作品ServiceBusTrigger例子.这项工作正在进行中吗?
我尝试使用dequeueCount参数实现自定义病毒消息处理,但它看起来不支持ServiceBusTriggers,因为我得到了一个运行时异常{"Cannot bind parameter 'dequeueCount' when using this trigger."}
public static void ProcessMessage([ServiceBusTrigger(topicName: "abc", subscriptionName: "abc.gdp")] NotificationMessage message,
[Blob("rox/{PayloadId}", FileAccess.Read)] Stream blobInput, Int32 dequeueCount)
{
throw new ArgumentNullException();
}
Run Code Online (Sandbox Code Playgroud) 我有一个Azure WebJob,它在本地运行时工作正常,但在Azure中运行时会引发异常.WebJob正在通过HTTPS进行外部调用,在Azure中会产生此异常:
System.Net.WebException:请求已中止:无法创建SSL/TLS安全通道.在System.Net.HttpWebRequest.GetResponse()
我也尝试将安全协议设置为TLS,ServicePointManager但这对异常没有影响.这是我的代码片段.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
Run Code Online (Sandbox Code Playgroud)
Azure是否阻止WebJobs上网或我做错了什么?
我刚刚使用WebJob SDK将WebJob添加到我的Web应用程序中.
现在,在发布Web应用程序时,VS在发布时卡住(不挂起,但也没有进展).
我知道它是由WebJob引起的,因为当我删除webjobs-list.json它时,它会完美地发布.
奇怪的是,单独发布WebJob(使用Publish as Azure WebJob)并不会出现这个问题.
如果重要,请使用.NET Framework 4.5.1. 更新: 4.5没有任何区别.
这是问题的图像:

我正在使用Azure Webjobs处理队列中的消息.
我看到Webjobs SDK在10分钟后再次处理任何失败的消息,如果失败5次,它会将其移动到毒性队列(1).
此外,我可以看到队列中消息的nextVisibleTime,即插入时间(2)后10分钟.
我想使用AzureSDK错误处理消息,但我不能等待10分钟再次处理消息.
有什么方法可以将nextVisibleTime设置为几秒钟吗?
如果方法在完成之前失败,则不删除队列消息; 在10分钟的租约到期后,该消息将被释放以便再次接收并处理.
public static void WriteLog([QueueTrigger("logqueue")] string logMessage,
DateTimeOffset expirationTime,
DateTimeOffset insertionTime,
DateTimeOffset nextVisibleTime,
Run Code Online (Sandbox Code Playgroud)
注意:StackOverflow中有类似的问题,但没有答案:
我知道webjob与webapp一起扩展,即如果我的webapp在5个实例上运行,那么webjobs也将在5个实例上运行.我只是想知道是否有一种方法可以在网站的每个实例中拥有多个webjob实例.
注意:我已经有最大值JobHostConfiguration.QueuesConfiguration.BatchSize = 32.
现在,我的webapp正在运行1个实例.Webjobs同时处理32个.我的目标是同时处理3*32 = 96.
实现此目标的一种可能方法是部署相同的webjobs 3次(为webJobName属性设置不同的名称),但我不确定这是否是一个好的做法.请指出相应的文件.
什么config.Queues.NewBatchThreshold说明什么?
config.Queues.NewBatchThreshold的默认值是什么?
对于队列处理,应该是config.Queues.NewBatchThreshold的推荐值?
我创建了一个简单的天蓝色网络作业,它从传入的网站中获取一些数据,解析它并将其添加到数据库中。
它只是一个接受参数的简单控制台应用程序(.exe 文件)。并将其上传到 Azure 上的 Web 应用程序。
然而,我的印象是,这个网络作业会根据需要多次启动和完成。因此,如果我依次向 webjob 发出 3 个命令,最终会得到 3 个 webjob 实例同时运行。
但是,这不起作用。我只能让它运行一次。其他两个命令失败。是否可以在单个 Web 应用程序中拥有单个 Web 作业并让它同时运行,同时处理不同内容的同一个 Web 作业也在运行?
我正在创建一个新的Azure WebJob项目 - 它似乎是一个可以作为Web作业运行的控制台应用程序的精美版本.
我希望这个工作能够根据时间表运行,但是在Main()方法中 - 见下文 - 微软为您host.RunAndBlock()提供了连续运行的工作.
如果我希望工作定期运行,我是否需要更改?
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) 缺少升级到 Webjob V3 的参考
安装参考
“IWebJobsBuilder”不包含“AddTimers”的定义,并且找不到接受“IWebJobsBuilder”类型的第一个参数的可访问扩展方法“AddTimers”(您是否缺少 using 指令或程序集引用?)