private void SubmitApplication(LoanApplicationData loanApp) { LoanApplicationProcess loanRequestActivity = new LoanApplicationProcess(loanApp.ApplicationID) { ApplicantID = loanApp.Ssn, LoanApplicationSubmitted = DateTime.UtcNow }; // Ensure the availability of required extensions, throw an exception if not available. Global.WebRoleSingleton.Extensions.Demand <IActivityTrackingEventStreamExtension>(); Global.WebRoleSingleton.Extensions.Demand <IRulesEngineServiceClientExtension>(); IActivityTrackingEventStreamExtension trackingEventStream = Global.WebRoleSingleton.Extensions.Find <IActivityTrackingEventStreamExtension>(); IRulesEngineServiceClientExtension ruleEngineClient = Global.WebRoleSingleton.Extensions.Find <IRulesEngineServiceClientExtension>(); IRoleConfigurationSettingsExtension roleConfig = Global.WebRoleSingleton.Extensions.Find <IRoleConfigurationSettingsExtension>(); // Tells the event stream to invoke the BeginActivity operation. trackingEventStream.BeginActivity(loanRequestActivity); // Call BRE rule to obtain a pre-approval. SimpleValueFact result = ruleEngineClient.ExecutePolicy <SimpleValueFact>("Contoso.Cloud.Integration.Demo.LoanPreapproval", loanApp); // Update the LoanPreapprovalReceived milestone. loanRequestActivity.LoanPreapprovalDecision = Convert.ToString(result.Value); loanRequestActivity.LoanPreapprovalReceived = DateTime.UtcNow; // Display pre-approval decision. SetResultDisplay(loanRequestActivity.LoanPreapprovalDecision); // Tells the event stream to invoke the UpdateActivity. trackingEventStream.UpdateActivity(loanRequestActivity); // Submit pre-approved loan for final processing. if (String.Compare(loanRequestActivity.LoanPreapprovalDecision, "Preapproved", true) == 0) { // Submit the loan application for processing (this will update LoanApplicationStarted, LoanFinalDecision and LoanFinalDecisionMade milestones. using (var loanProcessor = new ReliableServiceBusClient <ILoanApplicationProcessingServiceChannel>(roleConfig.GetServiceBusEndpoint("LoanApplication"), roleConfig.CommunicationRetryPolicy)) { loanProcessor.RetryPolicy.ExecuteAction(() => { loanProcessor.Client.Submit(loanApp); }); } } // Update the LoanFinalDecisionReceived milestone. loanRequestActivity.LoanFinalDecisionReceived = DateTime.UtcNow; // Tells the event stream to invoke the UpdateActivity and EndActivity operations. trackingEventStream.CompleteActivity(loanRequestActivity); }