未命中 Azure Orchestration Trigger 断点

Azure Orchestration Trigger breakpoints not hit

我有一个由消息触发的 Azure 持久函数,然后使用客户端启动一个 Orchestration 触发器,该触发器启动多个 activity 函数。我在 Orchestration client 、 trigger 和每个 activity 函数中设置了断点。 但是,它只会命中 Orchestration 客户端函数中的断点,其他的会被忽略。但在它下面似乎执行了 activity 函数,尽管没有命中断点。

调查资料

在下面,我包含了一个代码片段。 (没有添加每个 activity 功能)

[FunctionName(nameof(InitiateExport))]
        public static async Task InitiateExport(
            [ServiceBusTrigger("%ExportQueueName%", Connection = "AzureSBConnection")]Message message,
            [DurableClient(TaskHub = "%FunctionHubName%")] IDurableOrchestrationClient orchestrationClient,
            [Inject]IServiceProvider rootServiceProvider, ILogger log)
        {
            var DataQueuedDetails = JsonConvert.DeserializeObject<DataQueuedDetails>(Encoding.UTF8.GetString(message.Body));

            using (var scope = rootServiceProvider.CreateScope())
            {
                log.LogInformation($"{nameof(ExportData)} function execution started at: {DateTime.Now}");
                
                var services = scope.ServiceProvider;
                services.ResolveRequestContext(message);
                var requestContext = services.GetRequiredService<RequestContext>();

                await orchestrationClient.StartNewAsync(nameof(TriggerDataExport), null, (DataQueuedDetails, requestContext));

                log.LogInformation($"{nameof(ExportData)} timer triggered function execution finished at: {DateTime.Now}");
            }
        }    

[FunctionName(nameof(TriggerDataExport))]
        public static async Task TriggerDataExport(
            [OrchestrationTrigger] IDurableOrchestrationContext orchestrationContext,
            [Inject] IServiceProvider rootServiceProvider, ILogger log)
        {

     using (var scope = rootServiceProvider.CreateScope())
            {               

                var services = scope.ServiceProvider;
                var (DataOperationInfo, requestContext) = orchestrationContext.GetInput<(DataQueuedDetails, RequestContext)>();
                
                if (!orchestrationContext.IsReplaying)
                    log.LogInformation($"Starting Export data Id {DataOperationInfo.Id}");
                
                var blobServiceFactory = services.GetRequiredService<IBlobServiceFactory>();
                requestContext.CustomerId = DataOperationInfo.RelatedCustomerId;
                
                try
                 {                       
                        await orchestrationContext.CallActivityAsync(
                             nameof(UpdateJobStatus),
                             (DataOperationInfo.Id, DataOperationStatus.Running, string.Empty, string.Empty, requestContext));
                    
                     // some other activity functions
                  ---
                  ---
                } catch (Exception e)
                {                   
                    await orchestrationContext.CallActivityAsync(
                        nameof(UpdateJobStatus),
                        (DataOperationInfo.Id, DataOperationStatus.Failed, string.Empty, string.Empty, requestContext));
                    
                }
          }
}

[FunctionName(nameof(UpdateJobStatus))]
        public static async Task RunAsync(
            [ActivityTrigger] IDurableActivityContext activityContext,
            [Inject]IServiceProvider rootServiceProvider)
        {
            using (var scope = rootServiceProvider.CreateScope())
            {
                try
                {
                    var (DataOperationId, status, blobReference, logFileBlobId, requestContext) = activityContext.GetInput<(string, string, string, string, RequestContext)>();
                    var services = scope.ServiceProvider;
                    services.ResolveRequestContext(requestContext.CustomerId, requestContext.UserId, requestContext.UserDisplayName, requestContext.Culture);
                    var dataService = services.GetRequiredService<IDataService>();
                    var DataOperationDto = new DataOperationDto
                    {
                        Id = DataOperationId,
                        OperationStatusCode = status,
                        BlobReference = blobReference,
                        LogBlobReference = logFileBlobId
                    };
                    await dataService.UpdateAsync(DataOperationDto);
                }
                catch (Exception e)
                {
                    throw e;
                }
                
            }
        }
                

调试函数时,应确保您使用的是本地存储模拟器或 Azure 存储帐户,该帐户与已部署在 Azure 中的函数所使用的帐户不同。

如果您使用的存储帐户与另一个 运行 函数正在使用的存储帐户相同,那么部分执行可能实际上发生在 Azure 而不是您的开发机器中。