Azure函数预编译timerTrigger错误

时间:2017-04-13 13:03:38

标签: azure azure-functions azure-webjobssdk

我部署了一个使用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工作主持人开始

2 个答案:

答案 0 :(得分:1)

定时器触发器需要Microsoft.Azure.WebJobs.Extensions nuget,作业主机应注册您的功能。

请参阅此precompiled function article,特别是“转换为类文件”部分。

  
      
  1. 如果您正在使用计时器触发器,请添加NuGet包Microsoft.Azure.WebJobs.Extensions。
  2.   

答案 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");
        }
    }
}