Azure Webjobs - 使用带有TimerTrigger函数的INameResolver

时间:2016-02-01 01:26:04

标签: azure-webjobs azure-webjobssdk

我尝试使用TimerTrigger配置一个具有简单功能的作业。

public class Processor
{
    /// <summary>
    /// Initializes a new instance of the <see cref="Processor"/> class.
    /// </summary>
    public Processor()
    {

    }

    /// <summary>
    /// Process the Leads to Marketo.
    /// </summary>
    [Disable("Processor.Disable")]
    public async Task ProcessMessages([TimerTrigger("%Processor.TimerTrigger%")] TimerInfo timerInfo, TextWriter log)
    {


        // TODO : remove
        await Task.FromResult(0);
    }
}

我的设置在app.config文件中定义:

<add key="Processor.TimerTrigger" value="00:01:00" />
<add key="Processor.Disable" value="false" />

启动我的webjob时,我已将作业配置为使用INameResolver和timertrigger:

static void Main()
{
    // Configure the job host
    var config = new JobHostConfiguration
    {
        NameResolver = new ConfigNameResolver() // Resolve name from the config file.
    };

    config.UseTimers();
    var host = new JobHost(config);
    // The following code ensures that the WebJob will be running continuously

    host.RunAndBlock();
}

执行第host.RunAndBlock()行时,我遇到了这个例外:

  

Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException:错误索引方法&#39; ProcessMessages&#39; ---&GT; System.FormatException:String未被识别为有效的TimeSpan。

我在实现INameResolver界面的类中设置了一个断点但从未命中过。

有没有办法用TimerTrigger配置NameResolver?

感谢。

2 个答案:

答案 0 :(得分:2)

TimerTrigger目前不支持INameResolver。请在公开回购here中打开一个问题,我们会添加该支持。其他扩展绑定支持INameResolver。如果这对您很重要,我们可以在实际的下一个版本之前使用pre-release build让您使用/验证。

答案 1 :(得分:0)

确认现在使用原始问题中的技术和一个如下所示的解析器在Timer Triggers中支持INameResolver:

public class ConfigNameResolver : INameResolver
{
    public string Resolve(string name)
    {
        return ConfigurationManager.AppSettings.Get(name);
    }
}