Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }