private async Task SignalEntityAsyncInternal(DurableClient durableClient, string hubName, EntityId entityId, DateTime?scheduledTimeUtc, string operationName, object operationInput) { var entityKey = entityId.EntityKey; if (entityKey.Any(IsInvalidCharacter)) { throw new ArgumentException(nameof(entityKey), "Entity keys must not contain /, \\, #, ?, or control characters."); } if (operationName == null) { throw new ArgumentNullException(nameof(operationName)); } if (scheduledTimeUtc.HasValue) { scheduledTimeUtc = scheduledTimeUtc.Value.ToUniversalTime(); } if (this.ClientReferencesCurrentApp(durableClient)) { this.config.ThrowIfFunctionDoesNotExist(entityId.EntityName, FunctionType.Entity); } var guid = Guid.NewGuid(); // unique id for this request var instanceId = EntityId.GetSchedulerIdFromEntityId(entityId); var instance = new OrchestrationInstance() { InstanceId = instanceId }; var request = new RequestMessage() { ParentInstanceId = null, // means this was sent by a client ParentExecutionId = null, Id = guid, IsSignal = true, Operation = operationName, ScheduledTime = scheduledTimeUtc, }; if (operationInput != null) { request.SetInput(operationInput, this.messageDataConverter); } var jrequest = JToken.FromObject(request, this.messageDataConverter.JsonSerializer); var eventName = scheduledTimeUtc.HasValue ? EntityMessageEventNames.ScheduledRequestMessageEventName(request.GetAdjustedDeliveryTime(this.durabilityProvider)) : EntityMessageEventNames.RequestMessageEventName; await durableClient.client.RaiseEventAsync(instance, eventName, jrequest); this.traceHelper.FunctionScheduled( hubName, entityId.EntityName, EntityId.GetSchedulerIdFromEntityId(entityId), reason: $"EntitySignal:{operationName}", functionType: FunctionType.Entity, isReplay: false); }
/// <summary> /// Gets a <see cref="IDurableClient"/> using configuration from a <see cref="DurableClientAttribute"/> instance. /// </summary> /// <param name="attribute">The attribute containing the client configuration parameters.</param> /// <returns>Returns a <see cref="IDurableClient"/> instance. The returned instance may be a cached instance.</returns> protected internal virtual IDurableClient GetClient(DurableClientAttribute attribute) { DurableClient client = this.cachedClients.GetOrAdd( attribute, attr => { DurabilityProvider innerClient = this.durabilityProviderFactory.GetDurabilityProvider(attribute); return(new DurableClient(innerClient, this, this.HttpApiHandler, attr)); }); return(client); }
private bool ConnectionNameMatchesCurrentApp(DurableClient client) { var storageProvider = this.config.Options.StorageProvider; if (storageProvider.TryGetValue("ConnectionStringName", out object connectionName)) { var newConnectionName = client.DurabilityProvider.ConnectionName; return(newConnectionName.Equals(connectionName)); } return(false); }
private OrchestrationStatusQueryResult ConvertFrom(DurableStatusQueryResult statusContext) { var results = new List <DurableOrchestrationStatus>(); foreach (var state in statusContext.OrchestrationState) { results.Add(DurableClient.ConvertOrchestrationStateToStatus(state)); } var result = new OrchestrationStatusQueryResult { DurableOrchestrationState = results, ContinuationToken = statusContext.ContinuationToken, }; return(result); }
private bool ConnectionNameMatchesCurrentApp(DurableClient client) { return(this.DurabilityProvider.ConnectionNameMatches(client.DurabilityProvider)); }
private bool TaskHubMatchesCurrentApp(DurableClient client) { var taskHubName = this.durableTaskOptions.HubName; return(client.TaskHubName.Equals(taskHubName)); }
private bool ClientReferencesCurrentApp(DurableClient client) { return(!client.attribute.ExternalClient && this.TaskHubMatchesCurrentApp(client) && this.ConnectionNameMatchesCurrentApp(client)); }
private bool ClientReferencesCurrentApp(DurableClient client) { return(this.TaskHubMatchesCurrentApp(client) && this.ConnectionNameMatchesCurrentApp(client)); }
/// <summary> /// Converts the DTFx representation of the orchestration state into the DF representation. /// </summary> /// <param name="orchestrationState">The orchestration state.</param> /// <returns>The orchestration status.</returns> public static DurableOrchestrationStatus ConvertOrchestrationStateToStatus(OrchestrationState orchestrationState) { return(DurableClient.ConvertOrchestrationStateToStatus(orchestrationState)); }