按计划为 WebJob 动态命名 Blob

Naming Blob Dynamically for WebJob on a Schedule

我有一个基于 WebClient 调用的 return 值创建 blob 的网络作业。这工作正常。但是从 Blob 属性可以看出(见下面的代码),文件的名称是静态的。因此,它在 blob 存储中每次都会被覆盖。

函数class:

public class Functions
{
    private static int _retryCount;
    private static readonly int _retryLimit = int.Parse(ConfigurationManager.AppSettings["retryLimit"]);
    private static readonly string _ghostRestfullUri = ConfigurationManager.AppSettings["ghostRestfullUri"];

    [NoAutomaticTrigger]
    public static void LightUpSite([Blob("ghost/response.json")] out string output, TextWriter logger)
    {
        _retryCount = 0;
        output = string.Empty;

        do
        {
            try
            {
                using (var request = new WebClient())
                {
                    var response = request.DownloadString(_ghostRestfullUri);

                    _retryCount++;

                    output = response;

                    break;
                }
            }
            catch(Exception exception)
            {
                logger.WriteLine("Job failed. Retry number:{0}", _retryCount);
            }

        } while (_retryCount < _retryLimit);
    }
}

主菜单:

public class Program
{
    static void Main()
    {
        var host = new JobHost();

        host.Call(typeof(Functions).GetMethod("LightUpSite"));
    }
}

如何使用占位符动态命名传入文件?

我已经尝试过以下方法:

  1. 幽灵/{名字}
  2. 幽灵/{BlobName}

其他注意事项:

此作业 运行 已按计划进行,因此主机不会 运行 并阻止 该作业不会被触发器调用,它只是唤醒并 运行s; 因为源不是来自消息队列对象或上传的文件,所以我不知道应该如何命名这个 blob。

也许以某种方式直接使用 blob 存储 API?

  1. 要动态命名输出 blob,请使用 IBinder,如 this 示例中所示
  2. 要像从 Host.Call 调用一样动态命名输入 blob,只需将 blob 的名称作为参数传递:

    static void Main()
    {
        var host = new JobHost();
    
        host.Call(typeof(Functions).GetMethod("LightUpSite"), new {blobArgumentName= "container/blob"});
    }