我部署了一个使用timerTrigger预编译的Azure函数。激活所有日志时,我有以下异常
2017-04-13T12:53:03.836 {" ID":" b91045c2-ff21-4c9d-bd14-88e90723adbe""的requestId":" 37212a13-73ae-4e1e-9f1e-130f3865e258&# 34;,"的StatusCode" 500"的errorCode":0,"消息话题":"序列 不包含匹配元素"} 2017-04-13T12:53:03.836 System.InvalidOperationException:Sequence不包含任何匹配项 System.Linq.Enumerable.First元素[TSource](IEnumerable
1 source, Func
2谓词)at Microsoft.Azure.WebJobs.Script.WebHost.Controllers.AdminController.Invoke(字符串 lambda_method上的name,FunctionInvocation调用(Closure, 对象,对象[])at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor<> c__DisplayClass10.b__9(对象 instance,Object [] methodParameters)at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(对象 instance,Object [] arguments)at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary`2参数,CancellationToken 的CancellationToken) ---从抛出异常的先前位置开始的堆栈跟踪结束---
我的function.json
{
"scriptFile": "..\\bin\\Plop.Statistics.dll",
"entryPoint": "Plop.Statistics.S4BStatisticsCommand.Function.Run",
"bindings": [
{
"name": "myTimer",
"type": "timerTrigger",
"direction": "in",
"schedule": "0 */1 * * * *"
},
{
"name": "outputQueueItem",
"queueName": "command-queue",
"type": "queue",
"direction": "out",
"connection": "AzureWebJobsStorage"
}
],
"disabled": false
}
和我的功能
namespace Plop.Statistics.S4BStatisticsCommand{
public class Function
{
public static async Task Run(TimerInfo myTimer, ICollector<S4BStatisticCommand> outputQueueItem, TraceWriter log)
{
log.Info("hello");
}
感谢您的帮助!
修改
未触发timerTrigger,因为找不到该功能。这里的日志:
2017-04-14T08:54:11.773文件更改类型&#39;已创建&#39;检测 为:\家庭\站点\ wwwroot的\ S4BStatisticsCommand&#39;
2017-04-14T08:54:11.773主机配置已更改。信令 重新启动
2017-04-14T08:54:12.167文件更改类型&#39;已创建&#39;检测到 &#39; d:\家\站点\ wwwroot的\ S4BStatisticsCommand \ function.json&#39;
2017-04-14T08:54:12.167主机配置已更改。信令 重新启动
2017-04-14T08:54:12.281文件更改类型&#39;已更改&#39;检测到 &#39; d:\家\站点\ wwwroot的\ S4BStatisticsCommand \ function.json&#39;
2017-04-14T08:54:12.281主机配置已更改。信令 重新启动
2017-04-14T08:54:12.785停止主持人
2017-04-14T08:54:12.832作业主持人已停止
2017-04-14T08:54:12.894主机实例 &#39; f3bf62b4fcd9d52410e4b055937d68db&#39;释放锁租约。
2017-04-14T08:54:12.957读取主机配置文件 &#39; d:\家\站点\ wwwroot的\ host.json&#39;
2017-04-14T08:54:13.317通过实例ID获取的主机锁租约 &#39; f3bf62b4fcd9d52410e4b055937d68db&#39;
2017-04-14T08:54:14.070生成1个工作职能
2017-04-14T08:54:14.097启动主持人 (HostId = 4ab0f60d5dc84308a2fd847b978c468b,Version = 1.0.10841.0, ProcessId = 8628,Debug = True,Attempt = 0)
2017-04-14T08:54:14.113应用了开发设置
2017-04-14T08:54:14.113找不到工作职能。尝试做你的工作 类和方法公开。如果您正在使用绑定扩展程序(例如 ServiceBus,计时器等)确保您已注册 启动代码中的扩展方法(例如 config.UseServiceBus(),config.UseTimers()等。)。
2017-04-14T08:54:14.113工作主持人开始
答案 0 :(得分:1)
定时器触发器需要Microsoft.Azure.WebJobs.Extensions nuget,作业主机应注册您的功能。
请参阅此precompiled function article,特别是“转换为类文件”部分。
- 如果您正在使用计时器触发器,请添加NuGet包Microsoft.Azure.WebJobs.Extensions。
醇>
答案 1 :(得分:1)
我有一个定时器触发器,使用稍微不同的Run函数定义来处理预编译函数。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
namespace PrecompiledDLL
{
public partial class PrecompiledFunction
{
public static async Task Run(TimerInfo myTimer, TraceWriter log)
{
log.Info("Hello World");
}
}
}