2015-10-16 3 views
5

Я опытный разработчик Windows C#, но новичок в мире Azure, и поэтому пытаюсь выяснить «лучшую практику», когда я реализую одну или несколько приложений Azure Cloud Services.Azure File System - Могу ли я «смотреть» или только опрос?

У меня есть несколько внешних (внешних и внешних элементов), которые могут сохранять файлы в папку (или, возможно, набор папок). В текущем состоянии моей системы под Windows у меня есть FileSystemWatcher, настроенный для контроля за папкой и создания события, когда там появляется файл.

В мире Azure, каков эквивалентный способ сделать это? Или есть?

Я знаю, что могу создать таймер (или спать), чтобы пройти некоторое время (скажем, 30 секунд), и опросить папку, но я просто не уверен, что это «лучший» способ в облачной среде.

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

Хотя, в конце концов, это цель ... Поэтому я намерен услугу «Наблюдатель», которая (через события или опрос) обнаруживает наличие одного или нескольких файлов и вытаскивает сообщение в соответствующую очередь для следующего шага в моем рабочем процессе, на который нужно ответить.

Следует отметить, что я использую VS2015 и последние материалы Azure SDK, поэтому я не ограничен никаким наследием.

То, что я до сих пор в основном это (фрагмент более крупного базового кода):

storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 

// Create a CloudFileClient object for credentialed access to File storage. 
fileClient = storageAccount.CreateCloudFileClient(); 

// Obtain the file share name from the config file 
string sharenameString = CloudConfigurationManager.GetSetting("NLRB.Scanning.FileSharename"); 

// Get a reference to the file share. 
share = fileClient.GetShareReference(sharenameString); 

// Ensure that the share exists. 
if (share.Exists()) 
{ 
    Trace.WriteLine("Share exists."); 
    // Get a reference to the root directory for the share. 
    rootDir = share.GetRootDirectoryReference(); 

    //Here is where I want to start watching the folder represented by rootDir... 
} 

Спасибо заранее.

ответ

1

Если вы используете прикрепленный диск (или локальный диск с царапинами), поведение будет похоже на любую другую машину Windows, поэтому вы просто настроили наблюдателя файлов соответственно с FileSystemWatcher и будете обрабатывать обратные вызовы, как обычно бы.

Есть Azure File Service, которая является услугой SMB как услуга и будет поддерживать любые действия, которые вы могли бы выполнять на обычном томе SMB в своей локальной сети.

Там есть хранилище для хранения Azure. Они могут смотреть не. Вам нужно будет опросить изменения, скажем, контейнера blob.

+0

Это звучит неплохо, и я использую службу файлов Azure (или ... пытаюсь ...) –

+0

Я добавил фрагмент кода к моему первоначальному вопросу, поэтому, надеюсь, вы (или другие) можете предоставить более конкретные руководство о том, как делать то, что я пытаюсь сделать. Благодаря! –

-1

Я тоже довольно новичок в Azure, и на самом деле я изучаю тему типа файла наблюдения. Из-за этого я рассматриваю что-то, что связано с функциями Azure, которое выглядит как способ запуска некоторого кода при создании или обновлении блога. Также можно указать шаблон: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob

+0

Было бы полезно, если бы вы предоставили достаточно подробностей из сообщения от Microsoft, чтобы помочь другим, если связь когда-либо ухудшится. – newenglander

1

Вы можете создать цикл, который периодически обменивается корневым каталогом, используя метод CloudFileDirectory.ListFilesAndDirectories. https://msdn.microsoft.com/en-us/library/dn723299.aspx

Вы также можете написать небольшой рекурсивный метод для вызова этого в подкаталогах.

Чтобы обнаружить различия, вы можете создать карту хэша в памяти всех файлов и каталогов. Если вы хотите что-то вроде постоянного распределенного кеша, вы можете использовать ie. Redis сохранить этот список файлов/каталогов. Каждый раз, когда вы проводите опрос, если файл или каталог отсутствует в вашем списке, вы обнаружили новый файл/каталог под root.

Вы можете разделить ответственность за обнаружение и бизнес-логику, т.е. рабочая роль продолжает опрос каталога и записывает новые файлы в очередь, а потребитель заканчивает другую рабочую роль/веб-службу, которая обрабатывает эту информацию.

+0

Прохладная логика –