带有存储文件共享的Azure WebJobs

本文关键字:Azure WebJobs 文件共享 存储 | 更新日期: 2023-09-27 18:05:07

如何使用FileTrigger来获取我上传的文件?

配置代码:

public class Program
{
    // Please set the following connection strings in app.config for this WebJob to run:
    // AzureWebJobsDashboard and AzureWebJobsStorage
    public static void Main()
    {
        JobHostConfiguration jobConfiguration = new JobHostConfiguration();
        FilesConfiguration fileConfiguration = new FilesConfiguration();
        jobConfiguration.UseFiles(fileConfiguration);
        jobConfiguration.UseTimers();
        var host = new JobHost(jobConfiguration);
        // The following code ensures that the WebJob will be running continuously
        host.RunAndBlock();
    }
}

下面的代码在运行WebJob

时给出错误
    public static void ProcessXml([FileTrigger(@"XML'{name}", "*.xml", autoDelete: true)] Stream file, string name, TextWriter log)
    {
        try
        {
            TextReader reader = new StreamReader(file);
            ProcessFile(reader);
        }
        catch (Exception ex)
        {
            log.WriteLine(string.Format("Ao processar o arquivo '{0}', o seguinte erro ocorreu: {1}", name, ex.Message));
        }
        log.WriteLine(string.Format("Arquivo '{0}' processado!", name));
    }
错误:

[08/31/2016 21:59:39 > 0d02fe: INFO] Found the following functions:
[08/31/2016 21:59:39 > 0d02fe: INFO] XXXX.jobs.Functions.ProcessXml
[08/31/2016 21:59:39 > 0d02fe: ERR ] 
[08/31/2016 21:59:39 > 0d02fe: ERR ] Unhandled Exception: System.InvalidOperationException: Path 'D:'home'data'XML' does not exist.
[08/31/2016 21:59:39 > 0d02fe: ERR ]    at Microsoft.Azure.WebJobs.Files.Listeners.FileListener.CreateFileWatcher()
[08/31/2016 21:59:39 > 0d02fe: ERR ]    at Microsoft.Azure.WebJobs.Files.Listeners.FileListener.<StartAsync>d__6.MoveNext()

如何映射文件路径?我尝试使用网络路径作为RootPath,但是,出现一个错误,指出文件路径无效。

非常感谢您的帮助

带有存储文件共享的Azure WebJobs

您可以在这里看到异常抛出代码:

if (!Directory.Exists(_watchPath))
{
    throw new InvalidOperationException(string.Format("Path '{0}' does not exist.", _watchPath));
}

要求该文件夹在作业主机启动前已经存在。

一个快速的解决方法是在开始作业之前创建目录:

public class Program
{
    // Please set the following connection strings in app.config for this WebJob to run:
    // AzureWebJobsDashboard and AzureWebJobsStorage
    public static void Main()
    {
         if(!System.IO.Directory.Exists(@"D:'home'data'XML")) 
         {
              System.IO.Directory.Create(@"D:'home'data'XML");
         }
         JobHostConfiguration jobConfiguration = new JobHostConfiguration();
         FilesConfiguration fileConfiguration = new FilesConfiguration();
         jobConfiguration.UseFiles(fileConfiguration);
         jobConfiguration.UseTimers();
         var host = new JobHost(jobConfiguration);
         host.RunAndBlock();
    }