public static IServiceCollection AddDurableTaskClient( this IServiceCollection services) { services.TryAddSingleton(serviceProvider => { var orchestrationServiceClient = serviceProvider.GetRequiredService <IOrchestrationServiceClient>(); var jsonDataConverter = new TypelessJsonDataConverter(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); return(new TaskHubClient(orchestrationServiceClient, jsonDataConverter, loggerFactory)); }); return(services); }
protected TaskMessage[] GetOrchestrationMessages(string instanceId) { var dbContextFactory = _host.Services.GetRequiredService <Func <OrchestrationDbContext> >(); using (var dbContext = dbContextFactory()) { var dataConverter = new TypelessJsonDataConverter(); return(dbContext.OrchestrationMessages .OrderBy(m => m.AvailableAt) .ThenBy(m => m.SequenceNumber) .Select(m => dataConverter.Deserialize <TaskMessage>(m.Message)) .ToArray()); } }
public ActivityBase() { DataConverter = new TypelessJsonDataConverter(); }
public OrchestrationBase() { DataConverter = new TypelessJsonDataConverter(); }
public static IReadOnlyList <IEndpointConventionBuilder> MapOrchestrationEndpoints( this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder builder, PathString prefix) { var endpoints = new List <IEndpointConventionBuilder>(); endpoints.Add(builder.MapGet(prefix + "/v1/orchestrations", async context => { var extendedOrchestrationServiceClient = context.RequestServices.GetRequiredService <IExtendedOrchestrationServiceClient>(); var query = context.ParseQuery <OrchestrationQuery>(); var result = await extendedOrchestrationServiceClient.GetOrchestrationsAsync(query); await context.RespondJson(result); }).RequireAuthorization(DurableTaskPolicy.Read).WithMetadata(new DurableTaskEndpointMetadata { Id = "OrchestrationsList" })); endpoints.Add(builder.MapPost(prefix + "/v1/orchestrations", async context => { var taskHubClient = context.RequestServices.GetRequiredService <TaskHubClient>(); var linkGenerator = context.RequestServices.GetRequiredService <LinkGenerator>(); var request = await context.ParseBody <CreateOrchestrationRequest>(); var validationResults = new List <ValidationResult>(); if (!Validator.TryValidateObject(request, new ValidationContext(request), validationResults)) { await context.RespondJson(validationResults, 400); return; } var instance = await taskHubClient.CreateOrchestrationInstanceAsync( request.Name, request.Version ?? string.Empty, request.InstanceId, request.Input, request.Tags); var typedHeaders = context.Response.GetTypedHeaders(); typedHeaders.Location = new Uri(linkGenerator.GetUriByName("DurableTaskApi_OrchestrationsGet", new { instanceId = instance.InstanceId }, context.Request.Scheme, context.Request.Host, context.Request.PathBase)); await context.RespondJson(instance, 201); }).RequireAuthorization(DurableTaskPolicy.Create).WithMetadata(new DurableTaskEndpointMetadata { Id = "OrchestrationsCreate" })); endpoints.Add(builder.MapGet(prefix + "/v1/orchestrations/{instanceId}", async context => { var taskHubClient = context.RequestServices.GetRequiredService <TaskHubClient>(); var instanceId = Uri.UnescapeDataString(context.Request.RouteValues["instanceId"].ToString()); var state = await taskHubClient.GetOrchestrationStateAsync(instanceId); if (state == null) { context.Response.StatusCode = 404; return; } await context.RespondJson(state); }).RequireAuthorization(DurableTaskPolicy.Read) .WithMetadata(new EndpointNameMetadata("DurableTaskApi_OrchestrationsGet")) .WithMetadata(new DurableTaskEndpointMetadata { Id = "OrchestrationsGet" })); endpoints.Add(builder.MapGet(prefix + "/v1/orchestrations/{instanceId}/{executionId}", async context => { var taskHubClient = context.RequestServices.GetRequiredService <TaskHubClient>(); var instanceId = Uri.UnescapeDataString(context.Request.RouteValues["instanceId"].ToString()); var executionId = Uri.UnescapeDataString(context.Request.RouteValues["executionId"].ToString()); var state = await taskHubClient.GetOrchestrationStateAsync(instanceId, executionId); if (state == null) { context.Response.StatusCode = 404; return; } await context.RespondJson(state); }).RequireAuthorization(DurableTaskPolicy.Read) .WithMetadata(new EndpointNameMetadata("DurableTaskApi_OrchestrationsGetExecution")) .WithMetadata(new DurableTaskEndpointMetadata { Id = "OrchestrationsGetExecution" })); endpoints.Add(builder.MapGet(prefix + "/v1/orchestrations/{instanceId}/{executionId}/history", async context => { var taskHubClient = context.RequestServices.GetRequiredService <TaskHubClient>(); var instanceId = Uri.UnescapeDataString(context.Request.RouteValues["instanceId"].ToString()); var executionId = Uri.UnescapeDataString(context.Request.RouteValues["executionId"].ToString()); var orchestrationInstance = new OrchestrationInstance { InstanceId = instanceId, ExecutionId = executionId }; var history = await taskHubClient.GetOrchestrationHistoryAsync(orchestrationInstance); var events = new TypelessJsonDataConverter().Deserialize <HistoryEvent[]>(history); await context.RespondJson(events); }).RequireAuthorization(DurableTaskPolicy.ReadHistory).WithMetadata(new DurableTaskEndpointMetadata { Id = "OrchestrationsGetExecutionHistory" })); endpoints.Add(builder.MapPost(prefix + "/v1/orchestrations/{instanceId}/terminate", async context => { var taskHubClient = context.RequestServices.GetRequiredService <TaskHubClient>(); var instanceId = Uri.UnescapeDataString(context.Request.RouteValues["instanceId"].ToString()); var orchestrationInstance = new OrchestrationInstance { InstanceId = instanceId }; var request = await context.ParseBody <TerminateRequest>(); await taskHubClient.TerminateInstanceAsync(orchestrationInstance, request.Reason); await context.RespondJson(new { }); }).RequireAuthorization(DurableTaskPolicy.Terminate).WithMetadata(new DurableTaskEndpointMetadata { Id = "OrchestrationsTerminate" })); endpoints.Add(builder.MapPost(prefix + "/v1/orchestrations/{instanceId}/rewind", async context => { var extendedOrchestrationServiceClient = context.RequestServices.GetRequiredService <IExtendedOrchestrationServiceClient>(); var instanceId = Uri.UnescapeDataString(context.Request.RouteValues["instanceId"].ToString()); var request = await context.ParseBody <RewindRequest>(); await extendedOrchestrationServiceClient.RewindTaskOrchestrationAsync(instanceId, request.Reason); await context.RespondJson(new { }); }).RequireAuthorization(DurableTaskPolicy.Rewind).WithMetadata(new DurableTaskEndpointMetadata { Id = "OrchestrationsRewind" })); endpoints.Add(builder.MapPost(prefix + "/v1/orchestrations/{instanceId}/raiseevent/{eventName}", async context => { var taskHubClient = context.RequestServices.GetRequiredService <TaskHubClient>(); var instanceId = Uri.UnescapeDataString(context.Request.RouteValues["instanceId"].ToString()); var eventName = Uri.UnescapeDataString(context.Request.RouteValues["eventName"].ToString()); var orchestrationInstance = new OrchestrationInstance { InstanceId = instanceId }; var eventData = await context.ParseBody <JToken>(); await taskHubClient.RaiseEventAsync(orchestrationInstance, eventName, eventData); await context.RespondJson(new { }); }).RequireAuthorization(DurableTaskPolicy.RaiseEvent).WithMetadata(new DurableTaskEndpointMetadata { Id = "OrchestrationsRaiseEvent" })); endpoints.Add(builder.MapDelete(prefix + "/v1/orchestrations/{instanceId}", async context => { var extendedOrchestrationServiceClient = context.RequestServices.GetRequiredService <IExtendedOrchestrationServiceClient>(); var instanceId = Uri.UnescapeDataString(context.Request.RouteValues["instanceId"].ToString()); var result = await extendedOrchestrationServiceClient.PurgeInstanceHistoryAsync(instanceId); await context.RespondJson(new { }); }).RequireAuthorization(DurableTaskPolicy.Purge).WithMetadata(new DurableTaskEndpointMetadata { Id = "OrchestrationsPurgeInstance" })); return(endpoints); }