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

H Hubik 20 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 xxxxxxxxxxxxxx) that holds business queues, e.g. xxxxxx-queue, [email-messages], etc.
  • A separate storage account is used for AzureWebJobsStorage / Durable state.
  • The xxxxxxxxxxxx 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 functionName

{

    [Function("FunctionName")]

    public static async Task RunAsync(

        [QueueTrigger("<queueName>", 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 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: xxxxxxxxx

**
Using managed identity (earlier attempt)**

  • QueueStorageAccount__accountName = xxxxxxxxxxxxx
  • 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 xxxxxxxxxxxstorage account. In both setups:The target queue xxxxxxxxxxxx exists in xxxxxxxxxxxxxx.
  • 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 xxxxxxxxxxxxxxx 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 xxxxxxxxxxxxxx in the xxxxxxxxxxxxxxxxxxxx storage account.

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


What doesn’t work

  • In Azure, the xxxxxxxxxxxxxxxxxxxxxxxx:
    • Is listed in the Functions blade.
    • Status is Enabled.
    • Shows no invocations in the Monitor tab (past 30 days).
    • Messages remain in xxxxxxxxxxxxxxxxxx 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. xxxxxxxxxxxxxxxx-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 'xxxxxxxxxxxxxxxxxx'.
  • 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 xxxxxxxxxxxxxxxxxxxxxxxxxx.

When I enqueue “bogus” messages like "hello world" to xxxxxxxxxxxxxx, 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

1 answer

Sort by: Most helpful
  1. Siddhesh Desai 815 Reputation points Microsoft External Staff Moderator
    2025-12-23T09:08:28.0033333+00:00

    Hi @H Hubik

    Thank you for reaching out to Microsoft Q&A

    I tried reproducing your set up on my end and it worked successfully:

    I created a queue trigger in Visual Studio with .Net 9.0 Isolated

    My Function1.cs:

    using System;
    using Azure.Storage.Queues.Models;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Extensions.Logging;
    namespace FunctionAppQueue9;
    public class Function1
    {
        private readonly ILogger<Function1> _logger;
        public Function1(ILogger<Function1> logger)
        {
            _logger = logger;
        }
        [Function(nameof(Function1))]
        public void Run([QueueTrigger("myqueue", Connection = "QueueStorageConnection")] QueueMessage message)
        {
            _logger.LogInformation("C# Queue trigger function processed: {messageText}", message.MessageText);
        }
    }
    
    
    

    My Storage account is in another subscription with the Queue name as myqueue:User's image

    My Function App: Dotnet-isolated - 9.0

    User's image

    Function App Settings:

    My Function app storage account and Queue Storage account is different and added the Connection string of both in the settings like below:

    User's image

    {
        "name": "AzureWebJobsStorage",
        "value": "DefaultEndpointsProtocol=https;AccountName=silxxxxxxxe;AccountKey=xxxxxxxx==;EndpointSuffix=core.windows.net",
        "slotSetting": false
      },
      {
        "name": "DEPLOYMENT_STORAGE_CONNECTION_STRING",
        "value": "DefaultEndpointsProtocol=https;AccountName=silxxxxx;AccountKey=xxxxxx;EndpointSuffix=core.windows.net",
        "slotSetting": false
      },
      {
        "name": "QueueStorageConnection",
        "value": "DefaultEndpointsProtocol=https;AccountName=funxxxxxxxxe;AccountKey=xxxxxxxxx;EndpointSuffix=core.windows.net",
        "slotSetting": false
      }
    
    

    Now, When I manually send one test message from my queue and check the Function App Invocation the Invocation is visible:

    User's image

    User's image

    Try sending the queue message manually and see if the Function triggers,

    Also if you want to perform the same steps with managed Identity add the below settings with Storage Queue Data Contributor role and change the binding in Function.cs file like below:-

    User's image

    Function app setting:

    User's image

    
    {
        "name": "QueueStorage__queueServiceUri",
        "value": "https://storageaccountnamexxx.queue.core.windows.net",
        "slotSetting": false
      }
    

    The key-value of managed identity setting should be

    QueueStorage__queueServiceUri: "https://storageaccountnamexxx.queue.core.windows.net"
    

    Function1.cs:

    I changed QueueStorageConnection to QueueStorage

     public void Run([QueueTrigger("myqueue", Connection = "QueueStorage")] QueueMessage message)
    

    The Function got triggered successfully when I sent queue with managed identity setting:

    User's image


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.