我收到此错误:
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);
}
我可以使用以下方法向服务总线发送消息:
首先,创建函数应用程序,然后启用托管身份:
然后在服务总线中--->访问控制IAM--->添加角色--->数据发送者:
然后:
单击“下一步”后,现在选择“Function app 托管身份”,然后选择然后查看并创建。
以下功能代码对我有用:
程序.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}");
}
}
}
输出:
这就是我从 Azure Function App 向服务总线队列发送消息的方式。