У меня есть устойчивые функции Azure с триггером HTTP на C#, и я использую Азурите в качестве локального хранилища для этой функции. Поэтому, когда я запускаю или отлаживаю проект локально, функции активности запускаются автоматически без какого-либо HTTP-запроса. Я прекращаю отладку, затем запускаю ее снова, проблема исчезает. Второй раз этого не происходит. Однако это стало раздражать. Каждый раз, когда мне приходится начинать, останавливаться и снова начинать, если я хочу отладить. Может быть, где-то есть какое-то кэширование, которое автоматически запускает функции активности, я не знаю. Вот моя структура:
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[DurableClient] IDurableClient starter,
string functionName,
ILogger log)
{
[FunctionName(nameof(SynchronizeAllCoursesOrchestrator))]
public static async Task<HttpResponseMessage> SynchronizeAllCoursesOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
{
var input = context.GetInput<FunctionInput>();
return await context.CallActivityAsync<HttpResponseMessage>(nameof(SynchronizeAllCourses), input);
}
[FunctionName(nameof(SynchronizeAllCourses))]
public async Task<HttpResponseMessage> RunAsync([ActivityTrigger] IDurableActivityContext context, ILogger log)
{
Поэтому всякий раз, когда я нажимаю «Пуск/отладка», функция активности запускается немедленно. Затем мне приходится останавливаться и все время перезапускаться, чтобы он прослушивал запросы, а не запускался немедленно. Как сделать так, чтобы он не запускался сразу?
Я уже проверил это. Но в Азурите нет команды для аннулирования локальных кешей или очистки хранилища/очереди/BLOB-объектов.
Вы также можете использовать Azure Storage Explorer для проверки содержимого и удаления данных: azure.microsoft.com/en-us/products/storage/storage-explorer
Установил Azure Storage Explorer и понял, что Азурите создает много ненужного и не удаляет его после использования. Так что каким-то образом все эти вещи подбирались (вспоминались). Спасибо @juunas за ответ.
Благодаря ответу @juunas выше я смог решить проблему. Я установил Azure Storage Explorer после локального запуска Azurite и понял, что Azurite создает/сохраняет много данных и не удаляет их при остановке. Поэтому я вручную прошел и очистил все таблицы, и он начал вести себя соответственно.
Короче говоря, достаточно просто очистить очередь testhubname-workitems
перед запуском. Тогда у вас больше не будет проблем.
Редактировать дополнительную информацию:
После дальнейших предложений от @juunas. Я установил для своего hubName значение «SerhatsDurableFunctionsHub», и я смог переименовать имена хранилищ на:
Вот как выглядит мой файл host.json:
Таким образом, эти вещи «TestHub...» созданы для «концентратора задач» устойчивых функций, в котором хранится текущее состояние оркестровки, а также обрабатывается связь между оркестраторами и действиями. «TestHubName» используется по умолчанию, если ничего не указано. Я рекомендую вам установить extensions -> durableTask -> hubName на что-то другое в host.json, если вы работаете над разными проектами устойчивых функций на одном компьютере.
Возможно, что-то застряло в таблицах/очередях, используемых устойчивыми функциями, и оно продолжает повторять попытки. Проверьте свой эмулятор хранилища; вы можете удалить таблицы/очереди/контейнеры больших двоичных объектов, и устойчивые функции создадут их заново при запуске.