public async Task Send <TWorkflowMessage>(IEndpointConfiguration endpointConfiguration, TWorkflowMessage workflowMessage, CancellationToken cancellationToken) where TWorkflowMessage : class, IWorkflowMessage { VerifyEndpointConfiguration(endpointConfiguration); SetAuthenticationParameters(endpointConfiguration); var uriBuilder = new WorkflowMessageHttpUriBuilder(endpointConfiguration.Address); var httpAddress = uriBuilder.Build(workflowMessage.State.JsonState); var httpMethod = GetHttpMethod(endpointConfiguration); await MakeHttpCall(httpMethod, httpAddress, workflowMessage.State.JsonState, cancellationToken).ConfigureAwait(false); }
public async Task <TResponseWorkflowMessage> Request <TRequestWorkflowMessage, TResponseWorkflowMessage>( IEndpointConfiguration endpointConfiguration, TRequestWorkflowMessage workflowMessage, CancellationToken cancellationToken) where TRequestWorkflowMessage : class, IWorkflowMessage where TResponseWorkflowMessage : class, IWorkflowMessage { VerifyEndpointConfiguration(endpointConfiguration); SetAuthenticationParameters(endpointConfiguration); var uriBuilder = new WorkflowMessageHttpUriBuilder(endpointConfiguration.Address); var httpAddress = uriBuilder.Build(workflowMessage.State.JsonState); var httpMethod = GetHttpMethod(endpointConfiguration); try { var httpResponseMessage = await MakeHttpCall(httpMethod, httpAddress, workflowMessage.State.JsonState, cancellationToken) .ConfigureAwait(false); var responseString = await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); if (Log.IsEnabled(LogEventLevel.Verbose)) { Log.Verbose("Finished {method} request to {address} with {statusCode} and {response}", httpMethod, httpAddress, httpResponseMessage.StatusCode, responseString); } var responseMessageType = ResolveClassByInterface <TResponseWorkflowMessage>(); var responseMessage = (TResponseWorkflowMessage)Activator.CreateInstance(responseMessageType); responseMessage.WorkflowMessageId = Guid.NewGuid(); responseMessage.WorkflowId = workflowMessage.WorkflowId; responseMessage.WorkflowInstanceId = workflowMessage.WorkflowInstanceId; if (responseString.TryConvertToJsonState(out var jsonState)) { responseMessage.State = new WorkflowMessageState(jsonState); } return(responseMessage); } catch (Exception ex) { Log.Error(ex, "An error has occurred during making call to {address}", httpAddress); throw; } }