Динамическое присвоение имени большому двоичному объекту для веб-задания по расписанию

У меня есть веб-задание, которое создает большой двоичный объект на основе возвращаемого значения вызова WebClient. Это работает нормально. Но, как видно из атрибута Blob (см. код ниже), имя файла является статическим. Таким образом, он каждый раз перезаписывается в хранилище BLOB-объектов.

Класс функции:

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}

Еще одно замечание:

Это задание запускается по расписанию, поэтому хост не запускается и не блокируется. Это задание не вызывается триггером, оно просто просыпается и запускается; Поскольку источник исходит не из объекта очереди сообщений или загруженного файла, я не могу понять, как я должен назвать этот большой двоичный объект.

Возможно, каким-то образом напрямую использовать API хранилища BLOB-объектов?


person onefootswill    schedule 27.01.2015    source источник


Ответы (1)


  1. Чтобы динамически назвать выходной большой двоичный объект, используйте IBinder, как показано в этот образец
  2. Чтобы динамически назвать входной большой двоичный объект, как при вызове from from Host.Call, просто передайте имя большого двоичного объекта в качестве аргумента:

    static void Main()
    {
        var host = new JobHost();
    
        host.Call(typeof(Functions).GetMethod("LightUpSite"), new {blobArgumentName= "container/blob"});
    }
    
person Victor Hurdugaci    schedule 27.01.2015
comment
Благодаря использованию IBinder работает. Однако, пытаясь это сделать с blobArgumentName, я все равно получаю ошибку No value for named parameter 'name' с [Blog("ghost/{name}.ext")] или [Blog("ghost/{BlobName}.ext")]. - person Michael; 13.10.2015