public async Task HttpCall_SimpleActivityRequest_Success() { var addressUri = new Uri("https://localhost/api/endpoint"); var endpointConfiguration = new EndpointConfiguration("Code_EC", EndpointConfigurationType.Http, addressUri, new ConfigurationAuthentication(ConfigurationAuthenticationType.Basic, new List <KeyValuePair <string, string> >(new [] { new KeyValuePair <string, string>("UserName", "flow"), new KeyValuePair <string, string>("Password", "flow-password") }))); var activityRequestWorkflowMessage = new ActivityRequestWorkflowMessage(Guid.NewGuid(), Guid.NewGuid(), "Code_AR", "{}"); var activityResponseWorkflowMessage = new ActivityResponseWorkflowMessage { WorkflowMessageId = Guid.NewGuid(), WorkflowId = activityRequestWorkflowMessage.WorkflowId, WorkflowInstanceId = activityRequestWorkflowMessage.WorkflowInstanceId, ActivityExecutionResult = new ActivityExecutionResult(ActivityExecutionStatus.Completed) }; var httpMessageHandlerMock = new MockHttpMessageHandler(HttpStatusCode.OK, JsonConvert.SerializeObject(activityResponseWorkflowMessage)); var httpClient = new HttpClient(httpMessageHandlerMock); var workflowMessageHttpTransport = new WorkflowMessageHttpTransport(httpClient); var response = await workflowMessageHttpTransport.Request <ActivityRequestWorkflowMessage, ActivityResponseWorkflowMessage>( endpointConfiguration, activityRequestWorkflowMessage, CancellationToken.None).ConfigureAwait(false); Assert.IsTrue(response.WorkflowId == activityResponseWorkflowMessage.WorkflowId); Assert.IsTrue(response.WorkflowInstanceId == activityResponseWorkflowMessage.WorkflowInstanceId); Assert.IsNotNull(httpClient.DefaultRequestHeaders.Authorization); Assert.IsTrue(string.Equals("Basic", httpClient.DefaultRequestHeaders.Authorization.Scheme, StringComparison.OrdinalIgnoreCase)); }
public async Task <ActivityExecutionResult> Execute(ActivityExecutionContext activityExecutionContext, CancellationToken cancellationToken = default) { var remoteCode = Code.GetRemoteCode(); var remoteExecutionState = activityExecutionContext.StateExecutionContext.WorkflowContext .CreateRemoteExecutionState(activityExecutionContext.ActivityConfiguration.Parameters, remoteCode); var activityRequestWorkflowMessage = new ActivityRequestWorkflowMessage(remoteCode) { WorkflowMessageId = Guid.NewGuid(), WorkflowInstanceId = activityExecutionContext.StateExecutionContext.WorkflowContext.WorkflowInstance.Id, WorkflowId = activityExecutionContext.StateExecutionContext.WorkflowContext.WorkflowConfiguration.Id, State = new WorkflowMessageState(remoteExecutionState), }; var workflowConfiguration = activityExecutionContext.StateExecutionContext.WorkflowContext.WorkflowConfiguration; var endpointConfiguration = workflowConfiguration.FindEndpointConfiguration(Code); Log.Verbose("Sending activity request message [{code}::{messageId}] to endpoint [{endpoint}]", Code, activityRequestWorkflowMessage.WorkflowMessageId, endpointConfiguration.Address); var workflowMessageTransport = activityExecutionContext.StateExecutionContext.WorkflowContext .WorkflowMessageTransportFactoryProvider.CreateMessageTransportFactory(endpointConfiguration.Type) .CreateMessageTransport(endpointConfiguration.Address); var responseWorkflowMessage = await workflowMessageTransport.Request <IActivityRequestWorkflowMessage, IActivityResponseWorkflowMessage>( endpointConfiguration, activityRequestWorkflowMessage, cancellationToken).ConfigureAwait(false); Log.Verbose("Received activity response message {messageId} from {endpoint} with {status}", activityRequestWorkflowMessage.WorkflowMessageId, endpointConfiguration.Address, responseWorkflowMessage.ActivityExecutionResult?.Status); // merge state changes made by remote activity during execution activityExecutionContext.StateExecutionContext.WorkflowContext.MergeRemoteExecutionState(responseWorkflowMessage.State); return(responseWorkflowMessage.ActivityExecutionResult); }
public void HttpCall_SimpleActivityRequest_Failure500() { var addressUri = new Uri("https://localhost/api/endpoint"); var endpointConfiguration = new EndpointConfiguration("Code_EC", EndpointConfigurationType.Http, addressUri, ConfigurationAuthentication.None); var activityRequestWorkflowMessage = new ActivityRequestWorkflowMessage(Guid.NewGuid(), Guid.NewGuid(), "Code_AR", "{}"); var httpMessageHandlerMock = new MockHttpMessageHandler(HttpStatusCode.InternalServerError, string.Empty); var httpClient = new HttpClient(httpMessageHandlerMock); var workflowMessageHttpTransport = new WorkflowMessageHttpTransport(httpClient); Assert.ThrowsAsync <ApplicationException>(() => workflowMessageHttpTransport.Request <ActivityRequestWorkflowMessage, ActivityResponseWorkflowMessage>( endpointConfiguration, activityRequestWorkflowMessage, CancellationToken.None)); }