Storage queue trigger not firing in .NET isolated Azure Functions app, works locally

H Hubik 0 Reputation points
2025-12-15T02:03:19.0833333+00:00

I’m deploying a new .NET isolated Azure Functions app and I’m stuck on a problem where my storage queue triggers never fire in Azure, even though the same project works locally in VS Code.

I’d appreciate help understanding what I might be missing.


Environment

Azure Functions runtime: v4

Worker model: .NET isolated

Target framework: .NET 9 (net9.0)

OS: Linux

Hosting plan: Flex Consumption (Linux)

Key packages:

  • Microsoft.Azure.Functions.Worker 2.51.0
  • Microsoft.Azure.Functions.Worker.Sdk 2.0.7
  • Microsoft.Azure.Functions.Worker.Extensions.Storage 6.8.0
  • Microsoft.Azure.Functions.Worker.Extensions.DurableTask 1.11.0

Storage:

  • One storage account (call it appdataaccount) that holds business queues, e.g. orders-queue, email-messages, etc.
  • A separate storage account is used for AzureWebJobsStorage / Durable state.
  • The appdataaccount storage account is in a different subscription/resource group than the Function App, but in the same AAD tenant.

Code (queue trigger)

A simplified version of my queue-triggered function:

public static class OrderProcessorFunction

{

    [Function("OrderProcessorFunction")]

    public static async Task RunAsync(

        [QueueTrigger("orders-queue", Connection = "QueueStorageAccount")]

        string orderMessage,

        FunctionContext context)

    {

        var log = context.GetLogger<OrderProcessorFunction>();

        log.LogInformation("Processing order: {OrderMessage}", orderMessage);

        // ... business logic ...

    }

}

There are similar triggers for other queues (e.g. email-messages), all using Connection = "QueueStorageAccount".

Configuration (Azure App Settings)

For QueueStorageAccount I’ve tried two approaches.

Using a connection string

  • QueueStorageAccount = connection string for the appdataaccount storage account (standard storage account; connection string verified: I can list/add messages via Storage Explorer).
  • QueueStorageAccount__accountName and QueueStorageAccount__credential are not set. In the Function’s Integration blade for OrderProcessorFunction:
  • Binding type: Azure Queue Storage
  • Storage account connection: QueueStorageAccount (shows as configured, no warning)
  • Queue name: orders-queue

**
Using managed identity (earlier attempt)**

  • QueueStorageAccount__accountName = appdataaccount
  • QueueStorageAccount__credential = managedidentity
  • QueueStorageAccount (no suffix) not set.
  • The Function App’s system-assigned managed identity has the Storage Queue Data Contributor role on the appdataaccount storage account. In both setups:The target queue orders-queue exists in appdataaccount.
  • Manually enqueued messages show up in the queue.
  • DequeueCount stays at 0 for all messages.

What works

  • The project runs fine locally in VS Code (.NET isolated worker, func start), targeting:
    • Azurite, or
    • A real Azure Storage account via connection string.
  • An HTTP-triggered function in the same app runs in Azure and successfully enqueues messages into orders-queue using a helper like:
public static async Task<Response<SendReceipt>> EnqueueOrderAsync(string message)
{
    return await _ordersQueueClient.SendMessageAsync(message);
}

After calling the HTTP function, I can see new messages in orders-queue in the appdataaccount storage account.

So enqueueing from this Function App to the queue works in Azure.


What doesn’t work

  • In Azure, the OrderProcessorFunction:
    • Is listed in the Functions blade.
    • Status is Enabled.
    • Shows no invocations in the Monitor tab (past 30 days).
    • Messages remain in orders-queue indefinitely; DequeueCount is 0, even after:
    • Restarting the Function App.
    • Redeploying the app (fresh publish).
    • Manually adding test messages like "hello world" to the queue.

There is no corresponding poison queue (e.g. orders-queue-poison), which suggests the trigger never runs at all.

Diagnostics and logs

  • Application Insights traces show:
    • At startup: a list of discovered functions, including something like Host.Functions.OrderProcessorFunction.
    • Occasionally: Stopped the listener 'Microsoft.Azure.WebJobs.Script.Description.FunctionGroupListenerDecorator+NoOpListener' for function 'OrderProcessorFunction'.
  • I do not see:
    • “Error indexing method 'OrderProcessorFunction' …”
    • “The listener for function 'OrderProcessorFunction' was unable to start …”
    • “Storage account connection string 'QueueStorageAccount' is missing or invalid …”
    • Any exceptions where operation_Name is OrderProcessorFunction.

When I enqueue “bogus” messages like "hello world" to orders-queue, I would expect at least a deserialization error and an invocation, but there are no invocations recorded at all.

Question

Given:

  • The code and triggers work locally.
  • The app in Azure can write to the queue (using the same connection name/config), but never reads from it.
  • The function is enabled, there are visible messages, but no invocations and no obvious indexing errors.

Is there anything specific to:

  • .NET isolated + Microsoft.Azure.Functions.Worker.Extensions.Storage 6.8.0,
  • My hosting plan (Flex Consumption, Linux), or
  • Using a storage account in a different subscription,

that would cause the queue trigger to end up with a NoOpListener and never actually poll/process messages, even though the binding appears valid in the Integration blade?

What additional diagnostics or configuration would you recommend to help me understand why this queue-triggered function is never being invoked in Azure?

Azure Functions
Azure Functions
An Azure service that provides an event-driven serverless compute platform.
{count} votes

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.