You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logic Apps标准工作流调用本地函数时无法解析ILoggerFactory服务

解决Logic Apps标准工作流调用本地函数时的ILoggerFactory解析异常

你遇到的异常是因为函数类构造函数中注入的ILoggerFactory未被运行时正确解析,以下是具体解决方案:

方案1:直接注入ILogger替代ILoggerFactory

Functions运行时原生支持直接注入ILogger<T>,无需通过ILoggerFactory手动创建日志实例,修改后的函数代码如下:

namespace NS.Integration.ProcessManager.Function
{
    using System;
    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Messaging.ServiceBus;
    using Microsoft.Extensions.Logging;
    using Microsoft.Azure.Functions.Extensions.Workflows;
    using Microsoft.Azure.WebJobs;

    public class SvcBusQReader(ILogger<SvcBusQReader> logger)
    {
        private readonly ILogger<SvcBusQReader> _logger = logger;

        [FunctionName("ReadQueueSessionMessage")]
        public async Task<string> Run([WorkflowActionTrigger]
            string queueName, string sessionId)
        {
            var serviceBusNamespace = Environment.GetEnvironmentVariable("serviceBus_fullyQualifiedNamespace");
            if (string.IsNullOrEmpty(serviceBusNamespace))
            {
                throw new InvalidOperationException("Service Bus namespace is not configured.");
            }

            var credential = new DefaultAzureCredential();
            var client = new ServiceBusClient(serviceBusNamespace, credential);

            var receiverOptions = new ServiceBusSessionReceiverOptions
            {
                ReceiveMode = ServiceBusReceiveMode.PeekLock
            };

            var receiver = await client.AcceptSessionAsync(queueName, sessionId, receiverOptions);

            if (receiver == null)
            {
                throw new InvalidOperationException($"No session found with ID: {sessionId}");
            }

            var message = await receiver.ReceiveMessageAsync();
            if (message == null)
            {
                throw new InvalidOperationException($"No message found in session with ID: {sessionId}");
            }

            string messageBody = message.Body.ToString();
            await receiver.CompleteMessageAsync(message);
            return messageBody;
        }
    }
}

方案2:确保依赖注入服务正确注册(若坚持使用ILoggerFactory)

如果必须保留ILoggerFactory注入,需在函数项目的Program.cs中确认日志服务已正确注册(.NET Isolated Functions默认已包含,但自定义配置时需确保):

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        // 确保日志服务注册,默认ConfigureFunctionsWorkerDefaults已包含此配置
        services.AddLogging();
    })
    .Build();

host.Run();

检查NuGet包依赖

确认项目安装了匹配版本的核心NuGet包:

  • Microsoft.Azure.Functions.Worker
  • Microsoft.Azure.Functions.Worker.Extensions.Logging
  • Microsoft.Azure.Functions.Extensions.Workflows

可通过以下命令安装或更新:

dotnet add package Microsoft.Azure.Functions.Worker
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Logging
dotnet add package Microsoft.Azure.Functions.Extensions.Workflows

内容的提问来源于stack exchange,提问作者Rob Bowman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:15:55