Azure WebJob FileTrigger路径'D:\ home \ data \ ...'不存在

时间:2016-08-17 00:29:47

标签: azure-webjobs azure-webjobssdk

我创建了一个WebJob,用于在创建Azure文件时读取文件。 当我在本地运行它时,它可以工作,但是当我发布WebJob时它不会。

我的Main()函数是:

static void Main()
    {
        string connection = "DefaultEndpointsProtocol=https;AccountName=MYACCOUNTNAME;AccountKey=MYACCOUNTKEY";

        JobHostConfiguration config = new JobHostConfiguration(connection);

        var filesConfig = new FilesConfiguration();
        if (config.IsDevelopment)
        {
            config.UseDevelopmentSettings();
            filesConfig.RootPath = @"c:\temp\files";
        }

        config.UseFiles(filesConfig);

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

创建文件时要触发的功能是:

public void TriggerTest([FileTrigger(@"clients\{name}", "*.txt", WatcherChangeTypes.Created)] Stream file, string name, TextWriter log)
{
    log.WriteLine(name + " received!"); 
    // ...
}

发布WebJob时出现的错误是:

[08/17/2016 00:15:31 > 4df213: ERR ] Unhandled Exception: System.InvalidOperationException: Path 'D:\home\data\clients' does not exist.

ideia是在Azure文件的“clients”文件夹中创建新文件时触发WebJob。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

根据您的要求,我在我身边进行了测试,然后我再现了您的问题。

  

未处理的异常:System.InvalidOperationException:路径'D:\ home \ data \ clients'不存在

发布WebJob时,在Azure Web App中运行时,FilesConfiguration.RootPath将设置为“D:\ HOME \ DATA”目录。你可以参考源代码: https://github.com/Azure/azure-webjobs-sdk-extensions/blob/master/src/WebJobs.Extensions/Extensions/Files/Config/FilesConfiguration.cs

如下面的教程所述,FilesConfiguration.RootPath应设置为有效目录。 https://azure.microsoft.com/en-us/blog/extensible-triggers-and-binders-with-azure-webjobs-sdk-1-1-0-alpha1 请检查并确保指定的目录存在于WebJob中托管的Web APP中。

  

通过WebJob

在Azure文件的“clients”文件夹中创建新文件时触发

据我所知,Azure存储有两个触发器:

  • QueueTrigger - Azure队列消息入队时。
  • BlobTrigger - 上传Azure Blob时。

新的WebJobs SDK提供了一个File触发器,可以根据File事件触发函数。 但是,文件触发器可以监视对特定目录的文件添加/更改,但似乎没有触发Azure文件存储上的监视文件添加/更改。

答案 1 :(得分:0)

在Azure环境中,“Web作业”存储在其本地文件夹中,其中称为“ D:\ home ”,“ D:\ local ”是Web钩子使用的本地文件夹。我需要使用一个文件夹临时使用从SFTP服务器下载文件,然后从该本地临时位置文件中读取该文件并在我的应用程序中使用它。

我使用了“ D:\ local \ Temp ”作为临时文件夹,该文件夹是在检查文件夹存在后由代码创建的,然后在创建文件夹后代码将从中下载文件服务器并存储到此位置,然后从同一位置读取并从该临时文件夹中删除该文件。