Azure Webjobs 3.0 для чтения из BLOB-объектов с ручным триггером - PullRequest
0 голосов
/ 01 октября 2019

У меня есть веб-работа Azure, которая обрабатывает большой двоичный объект в любое время, когда он изменяется:

        public async Task DoSomethingWithABlob(
            [BlobTrigger("myfiles/{filename}")] Stream blob,
            string filename)
        {
            //Process blob..
        }

Это работает нормально, но я также хочу вручную запустить обработку большого двоичного объекта при запуске. Есть ли способ сделать это?

Я использую Azure Webjobs SDK 3.0.

1 Ответ

0 голосов
/ 02 октября 2019

Насколько я понимаю, у вас есть непрерывный веб-джоб триггера, который используется для мониторинга блоба. И теперь вы хотите запустить веб-работу один раз, чтобы что-то сделать при запуске веб-работы. Но ваше веб-задание не будет запущено, если на блобе, который вы хотите отслеживать, не будет обновлений.

Способ реализовать это - создать еще один веб-джоб вручную, чтобы выполнить необходимые действия и запустить триггер непрерывного блоба. Затем выполните webjob. Как показано ниже: enter image description here ConsoleApp 12 - консольное приложение C #, которое используется для выполнения необходимых процессов, и после завершения процесса запустите веб-задание непрерывного запуска BLOB-объекта. Я пишу образец для вас:

using Microsoft.WindowsAzure.Storage;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp12
{
    class Program
    {
        static void Main(string[] args)
        {

             var containerName = "<your container name>";
             var blobName = "<blob name>";
             var StorageConnStr = "<storage account connection string>";


             CloudStorageAccount storageAccount = CloudStorageAccount.Parse(StorageConnStr);
             var blobClient = storageAccount.CreateCloudBlobClient();
             var container = blobClient.GetContainerReference(containerName);
             var blockBlob = container.GetBlockBlobReference(blobName);
            //after get the blob , do your custom work here..




            //With all work is done ,start blobtriggerd webjob to monitor this blob
            using (var client = new WebClient())
            {
                String userName = "<webapp user name>";
                String passWord = "<webapp password>";

                client.Credentials = new System.Net.NetworkCredential(userName, passWord);

                string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(userName + ":" +passWord));
                client.Headers[HttpRequestHeader.Authorization] = "Basic " +credentials;
                var response = client.UploadData("<webhook url which end with start>", "POST", new byte[0]) ;

                var responseString = Encoding.Default.GetString(response);
            }



        }
    }
}

Вы можете найти URL-адрес, имя пользователя и пароль веб-крючка здесь: enter image description here

Есть одна вещь, котораяВы должны знать, что вы должны изменить свой конец URL-адреса webhook на start:

https://<your app name>.scm.azurewebsites.net/api/continuouswebjobs/<your webjob name>/start

вместо исходного webhook, заканчивающегося run:

https://<your app name>.scm.azurewebsites.net/api/continuouswebjobs/<your webjob name>/run

, поскольку у непрерывных веб-заданий нет функции запуска.

Это результат, если я запускаю веб-задание вручную: как вы можете видеть работу, как выполненную (выводите содержимое BLOB-объекта здесь для демонстрации) и другую непрерывную работу. Webjob был запущен, и он отлично работает для меня. enter image description here enter image description here

Надеюсь, это поможет.

...