Source profileQuality 97/100

Postpartum-genushyacinthus29/dotnet-skills/skills/dotnet-azure-functions/SKILL.md

dotnet-azure-functions

Build, review, or migrate Azure Functions in .NET with correct execution model, isolated worker setup, bindings, DI, and Durable Functions patterns.

Source repository stars
9
Declared platforms
0
Static risk flags
0
Last source update
2026-08-23
Source checked
2026-08-25

Decision brief

What it does: where it fits

Build, review, or migrate Azure Functions in . NET with correct execution model, isolated worker setup, bindings, DI, and Durable Functions patterns.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/Postpartum-genushyacinthus29/dotnet-skills --skill "skills/dotnet-azure-functions"
    Safe inspection promptEditorial

    Inspect the Agent Skill "dotnet-azure-functions" from https://github.com/Postpartum-genushyacinthus29/dotnet-skills/blob/f9c1a213bc25d95641adc3a59f8048cb5656741c/skills/dotnet-azure-functions/SKILL.md at commit f9c1a213bc25d95641adc3a59f8048cb5656741c. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Workflow

      1. Use isolated worker model for all new work: - In-process model reaches end of support on November 10, 2026 - Runtime v1.x ends support on September 14, 2026 - Target .NET 8+ for longest support window

      Use isolated worker model for all new work:In-process model reaches end of support on November 10, 2026Runtime v1.x ends support on September 14, 2026
    2. 02

      Isolated Worker Model Setup

      Review the “Isolated Worker Model Setup” section in the pinned source before continuing.

      Review and apply the “Isolated Worker Model Setup” source section.
    3. 03

      Trigger On

      working on Azure Functions in .NET

      working on Azure Functions in .NETmigrating from the in-process model to the isolated worker modeladding Durable Functions, bindings, or host configuration
    4. 04

      Documentation

      Guide for running C Azure Functions in an isolated worker process

      Guide for running C Azure Functions in an isolated worker processDifferences between in-process and isolated worker processMigrate C app from in-process to isolated worker model
    5. 05

      Basic Function with DI

      Review the “Basic Function with DI” section in the pinned source before continuing.

      Review and apply the “Basic Function with DI” source section.

    Permission review

    Static risk signals and limitations

    No configured static risk pattern was detected

    This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score97/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars9SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    Postpartum-genushyacinthus29/dotnet-skills
    Skill path
    skills/dotnet-azure-functions/SKILL.md
    Commit
    f9c1a213bc25d95641adc3a59f8048cb5656741c
    License
    MIT
    Collected
    2026-08-25
    Default branch
    main
    View the original SKILL.md

    Azure Functions for .NET

    Trigger On

    • working on Azure Functions in .NET
    • migrating from the in-process model to the isolated worker model
    • adding Durable Functions, bindings, or host configuration

    Documentation

    References

    • Patterns - Isolated worker patterns, Durable Functions patterns, advanced binding patterns
    • Anti-Patterns - Common Azure Functions mistakes and how to avoid them

    Workflow

    1. Use isolated worker model for all new work:

      • In-process model reaches end of support on November 10, 2026
      • Runtime v1.x ends support on September 14, 2026
      • Target .NET 8+ for longest support window
    2. Detect current project shape:

      • Target framework and runtime version
      • Worker model (isolated vs in-process)
      • Binding packages and host configuration
    3. Use standard .NET patterns in isolated model:

      • Normal dependency injection
      • Middleware pipeline
      • IOptions<T> for configuration
      • ILogger<T> for logging
    4. For Durable Functions:

      • Validate orchestration determinism constraints
      • Handle replay behavior correctly
      • Use typed activity patterns
    5. Verify both local and deployment behavior.

    Isolated Worker Model Setup

    Basic Function with DI

    // Program.cs
    var host = new HostBuilder()
        .ConfigureFunctionsWebApplication()
        .ConfigureServices(services =>
        {
            services.AddApplicationInsightsTelemetryWorkerService();
            services.ConfigureFunctionsApplicationInsights();
            services.AddSingleton<IMyService, MyService>();
        })
        .Build();
    
    host.Run();
    

    HTTP Trigger Function

    public class HttpFunctions(ILogger<HttpFunctions> logger, IMyService myService)
    {
        [Function("GetItems")]
        public async Task<IActionResult> GetItems(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = "items")] HttpRequest req)
        {
            logger.LogInformation("Processing GetItems request");
            var items = await myService.GetItemsAsync();
            return new OkObjectResult(items);
        }
    }
    

    Queue Trigger with Options

    public class QueueFunctions(ILogger<QueueFunctions> logger, IOptions<ProcessingOptions> options)
    {
        [Function("ProcessMessage")]
        public async Task ProcessMessage(
            [QueueTrigger("myqueue", Connection = "AzureWebJobsStorage")] string message)
        {
            logger.LogInformation("Processing message: {Message}", message);
            // Process with retry policy from options
        }
    }
    

    Middleware Pattern

    Custom Middleware

    // Program.cs
    var host = new HostBuilder()
        .ConfigureFunctionsWebApplication(builder =>
        {
            builder.UseMiddleware<ExceptionHandlingMiddleware>();
            builder.UseMiddleware<CorrelationIdMiddleware>();
        })
        .Build();
    
    // CorrelationIdMiddleware.cs
    public class CorrelationIdMiddleware : IFunctionsWorkerMiddleware
    {
        public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
        {
            var correlationId = context.Features.Get<IHttpRequestFeature>()?.Headers["X-Correlation-Id"]
                ?? Guid.NewGuid().ToString();
    
            context.Items["CorrelationId"] = correlationId;
    
            await next(context);
        }
    }
    

    Durable Functions Patterns

    Function Chaining

    [Function(nameof(ChainOrchestrator))]
    public static async Task<string> ChainOrchestrator(
        [OrchestrationTrigger] TaskOrchestrationContext context)
    {
        var result1 = await context.CallActivityAsync<string>(nameof(Step1), "input");
        var result2 = await context.CallActivityAsync<string>(nameof(Step2), result1);
        var result3 = await context.CallActivityAsync<string>(nameof(Step3), result2);
        return result3;
    }
    
    [Function(nameof(Step1))]
    public static string Step1([ActivityTrigger] string input) => $"Step1({input})";
    
    [Function(nameof(Step2))]
    public static string Step2([ActivityTrigger] string input) => $"Step2({input})";
    
    [Function(nameof(Step3))]
    public static string Step3([ActivityTrigger] string input) => $"Step3({input})";
    

    Fan-Out/Fan-In

    [Function(nameof(FanOutFanInOrchestrator))]
    public static async Task<int[]> FanOutFanInOrchestrator(
        [OrchestrationTrigger] TaskOrchestrationContext context)
    {
        var workItems = await context.CallActivityAsync<string[]>(nameof(GetWorkItems), null);
    
        // Fan out - process all items in parallel
        var tasks = workItems.Select(item =>
            context.CallActivityAsync<int>(nameof(ProcessWorkItem), item));
    
        // Fan in - wait for all to complete
        var results = await Task.WhenAll(tasks);
    
        return results;
    }
    
    [Function(nameof(ProcessWorkItem))]
    public static int ProcessWorkItem([ActivityTrigger] string item)
    {
        // Process item and return result
        return item.Length;
    }
    

    Human Interaction Pattern

    [Function(nameof(ApprovalOrchestrator))]
    public static async Task<string> ApprovalOrchestrator(
        [OrchestrationTrigger] TaskOrchestrationContext context)
    {
        var request = context.GetInput<ApprovalRequest>();
    
        // Send notification
        await context.CallActivityAsync(nameof(SendApprovalRequest), request);
    
        // Wait for external event with timeout
        using var cts = new CancellationTokenSource();
        var approvalTask = context.WaitForExternalEvent<bool>("ApprovalEvent");
        var timeoutTask = context.CreateTimer(context.CurrentUtcDateTime.AddDays(7), cts.Token);
    
        var winner = await Task.WhenAny(approvalTask, timeoutTask);
    
        if (winner == approvalTask)
        {
            cts.Cancel();
            return approvalTask.Result ? "Approved" : "Rejected";
        }
    
        return "Timed out";
    }
    

    Best Practices

    1. Use isolated worker model for new development - Full .NET ecosystem access, middleware support, and longer support lifecycle
    2. Inject dependencies via constructor - Use ILogger<T> and service interfaces for testability
    3. Keep orchestrator code deterministic - No I/O, random, DateTime.Now, or Guid.NewGuid() in orchestrators
    4. Handle sensitive data in activities - Fetch secrets from Key Vault in activity functions, never in orchestrators
    5. Use unique task hub names - Prevent accidental sharing when multiple apps use the same storage
    6. Avoid large inputs/outputs - Serialize to blob storage for large payloads to prevent history bloat
    7. Configure concurrency limits - Set appropriate limits in host.json for resource-intensive functions
    8. Keep SDK and extensions updated - Latest versions include performance improvements and bug fixes

    Anti-Patterns to Avoid

    Anti-PatternWhy It's BadBetter Approach
    Mixing in-process and isolated guidanceIncompatible APIs and patternsChoose one model consistently
    Non-deterministic orchestrator codeReplay failures, stuck orchestrationsUse context.CurrentUtcDateTime, no I/O
    Large orchestrator inputs/outputsHistory bloat, memory issuesStore large data in blob storage
    Shared task hub namesMessage conflicts, stuck orchestrationsUse unique names per app
    Secrets in orchestrator historySecurity risk, exposed in logsFetch secrets in activity functions
    Blocking calls in async functionsThread pool exhaustionUse await throughout
    Missing retry policiesTransient failures cause job lossConfigure retry in bindings or code
    Ignoring execution model migrationEOL November 2026 for in-processMigrate to isolated worker model

    Deployment Considerations

    Linux Consumption Plan Limitations

    .NET 10+ apps cannot run on Linux Consumption plan.
    Use Flex Consumption plan or App Service for .NET 10+.
    .NET 9 is the last version supported on Linux Consumption.
    

    host.json Configuration

    {
      "version": "2.0",
      "extensions": {
        "durableTask": {
          "hubName": "MyUniqueTaskHub",
          "maxConcurrentActivityFunctions": 10,
          "maxConcurrentOrchestratorFunctions": 5
        }
      },
      "logging": {
        "applicationInsights": {
          "samplingSettings": {
            "isEnabled": true,
            "excludedTypes": "Request"
          }
        }
      }
    }
    

    Deliver

    • correct Functions project setup for the isolated worker model
    • clear binding and host configuration
    • middleware for cross-cutting concerns
    • Durable Functions with proper orchestration patterns
    • migration-safe guidance when upgrading execution models

    Validate

    • execution model guidance is consistent (isolated only for new work)
    • orchestrator code is deterministic
    • bindings and host settings match the target runtime
    • large payloads are externalized to blob storage
    • retry policies are configured for transient failures
    • local and deployment behavior are both verified

    Frequently asked questions

    What to verify before installation and use

    What does the dotnet-azure-functions source document cover?

    Build, review, or migrate Azure Functions in . NET with correct execution model, isolated worker setup, bindings, DI, and Durable Functions patterns.

    How do I install dotnet-azure-functions?

    The source record exposes this install command: npx skills add https://github.com/Postpartum-genushyacinthus29/dotnet-skills --skill "skills/dotnet-azure-functions". Inspect the command and pinned source before running it.

    Alternatives

    Compare before choosing

    Computed 1009

    Postpartum-genushyacinthus29/dotnet-skills

    dotnet-worker-services

    Build long-running .NET background services with `BackgroundService`, Generic Host, graceful shutdown, configuration, logging, and deployment patterns suited to workers and daemons.

    Computed 9880

    vasilyu1983/AI-Agents-public

    research-git

    Scans public GitHub repos for agent skills, dev practices, and code patterns. Use when enriching skills, setting team policy, or researching a build domain.

    Computed 9610,956

    huggingface/skills

    huggingface-lora-space-builder

    Build and publish a Gradio demo on Hugging Face Spaces for a user-provided LoRA. Use when someone asks to create, generate, ship, or publish a Space, demo, Gradio app, or playground for a LoRA — including LoRAs for Qwen-Image, Qwen-Image-Edit, LTX-Video, Wan, FLUX, SDXL, or other diffusion base models. Also triggers when someone describes a LoRA they trained or hosts on the Hub and wants to share it. Covers picking the right base pipeline and `diffusers` inference recipe, designing a UI tailored

    Computed 96156

    open-edge-platform/edge-ai-libraries

    chatqna-helm-deploy

    Deploy Chat Question-and-Answer Core to Kubernetes using Helm (OpenVINO CPU, OpenVINO GPU, or Ollama), including values.yaml configuration, helm install/upgrade, deployment verification, uninstall, and translation from Docker Compose setup_env.sh variables into Helm override values. Use this skill when the user says "deploy chatqna core to kubernetes", "helm install chatqna-core", "configure values.yaml", "convert compose config to helm", or "translate setup_env.sh to chart values".