ManagedIdentityCredential 身份验证失败:无法建立连接,因为目标机器主动拒绝

问题描述 投票:0回答:1

我收到此错误:

ManagedIdentityCredential 身份验证失败:尝试 6 次后重试失败。可以在 ClientOptions.Retry 中调整重试设置,也可以通过在 ClientOptions.RetryPolicy 中配置自定义重试策略来调整。 (无法连接,因为目标机主动拒绝。)(无法连接,因为目标机主动拒绝。

DurableTask.Core.Exceptions.TaskFailedException:引发了“DurableTask.Core.Exceptions.TaskFailedException”类型的异常。

位于 //src/DurableTask.Core/TaskOrchestrationContext.cs 中的 DurableTask.Core.TaskOrchestrationContext.ScheduleTaskInternal(字符串名称、字符串版本、字符串任务列表、类型 resultType、Object[] 参数):第 121 行
在 /
/src/DurableTask.Core/TaskOrchestrationContext.cs 中的 DurableTask.Core.TaskOrchestrationContext.ScheduleTaskToWorker[TResult](字符串名称、字符串版本、字符串任务列表、对象 [] 参数):第 92 行
在 /_/src/DurableTask.Core/TaskOrchestrationContext.cs 中的 DurableTask.Core.TaskOrchestrationContext.ScheduleTask[TResult](字符串名称、字符串版本、Object[] 参数):第 84 行
在 Microsoft.DurableTask.Worker.Shims.TaskOrchestrationContextWrapper.CallActivityAsync[T](TaskName 名称、对象输入、TaskOptions 选项)
--- 内部异常堆栈跟踪结束 ---
在 Microsoft.DurableTask.Worker.Shims.TaskOrchestrationContextWrapper.CallActivityAsync[T](TaskName 名称、对象输入、TaskOptions 选项)

这是我的代码:

services.AddSingleton(services =>
{
                var serviceBus = GetValueOrDefaultBase("serviceBus__fullyQualifiedNamespace");               
                return new ServiceBusClient(serviceBus, new DefaultAzureCredential());
});


await context.CallActivityAsync(nameof(SenderFunction), content);

await serviceBusRepository.SendMessageAsync(message);

public async Task SendMessageAsync(ServiceBusMessage message)
{
            var serviceBusmessage = new ServiceBusMessage
            {
                Body = new BinaryData(message.Body),
                MessageId = message.MessageId
            };

            if (message.ApplicationProperties != null)
            {
                foreach (var property in message.ApplicationProperties)
                {
                    serviceBusmessage.ApplicationProperties.Add(property.Key, property.Value);
                }
            }

            await _serviceBusSender.SendMessageAsync(serviceBusmessage);
}
azure-functions
1个回答
0
投票

我可以使用以下方法向服务总线发送消息:

首先,创建函数应用程序,然后启用托管身份:

enter image description here

然后在服务总线中--->访问控制IAM--->添加角色--->数据发送者:

enter image description here

然后:

enter image description here

单击“下一步”后,现在选择“Function app 托管身份”,然后选择然后查看并创建。

enter image description here

以下功能代码对我有用:

程序.cs:

using Azure.Identity;
using Azure.Messaging.ServiceBus;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var rith = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices(cho =>
    {
        cho.AddApplicationInsightsTelemetryWorkerService();
        cho.ConfigureFunctionsApplicationInsights();
        cho.AddSingleton<ServiceBusClient>(provider =>
        {
            return new ServiceBusClient("rith02.servicebus.windows.net", new DefaultAzureCredential());
        });
    })
    .Build();

rith.Run();

函数.cs:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Azure.Messaging.ServiceBus;
using Microsoft.Azure.Functions.Worker.Http;

namespace FunctionApp10
{
    public class Function1
    {
        private readonly ILogger<Function1> ri_lg;
        private readonly ServiceBusClient ri_sc;

        public Function1(ILogger<Function1> logger, ServiceBusClient sbc)
        {
            ri_lg = logger;
            ri_sc = sbc;
        }

        [Function("Function1")]
        public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
        {
            ri_lg.LogInformation("Hello Rithwik Bojja");

            await TestRith("rith", "Secret!!");
            var rout = req.CreateResponse(System.Net.HttpStatusCode.OK);
            await rout.WriteStringAsync("Welcome to Azure Functions!");
            return rout;
        }

        private async Task TestRith(string qn, string msg)
        {
            var ri_sen = ri_sc.CreateSender(qn);
            var sbc1 = new ServiceBusMessage(msg);
            await ri_sen.SendMessageAsync(sbc1);
            ri_lg.LogInformation($"Message sent to queue {qn}: {msg}");
        }
    }
}

输出:

enter image description here

enter image description here

这就是我从 Azure Function App 向服务总线队列发送消息的方式。

© www.soinside.com 2019 - 2024. All rights reserved.