public CreateAttemptTokenResponse CreateAttemptToken(CreateAttemptTokenRequest request)
        {
            CreateAttemptTokenResponse response = new CreateAttemptTokenResponse();

            try
            {
                Common.Helpers.ValidationHelper.ValidateRequiredField(request.Token, "Token");

                InterviewToken token = InterviewToken.FromBytes(EncryptionHelper.DecryptURL(Convert.FromBase64String(request.Token)));

                DbContext context = DataController.CreateDbContext();

                long randomizer = Common.Helpers.RandomHelper.RandomLong();

                Guid mostRecentAttemptId = context.Attempts
                    .Where(a => a.InterviewQuestionID == request.QuestionID)
                    .OrderByDescending(a => a.CreatedDate)
                    .Select(a => a.ID)
                    .FirstOrDefault();

                AttemptToken attemptToken = new AttemptToken(request.QuestionID, randomizer, mostRecentAttemptId);
                response.AttemptToken = Convert.ToBase64String(EncryptionHelper.EncryptToken(attemptToken.AsBytes()));
            }
            catch (AuthenticationException ex)
            {
                throw new WebFaultException<string>(ex.Message, System.Net.HttpStatusCode.BadRequest);
            }
            catch (Common.Exceptions.ValidationException ex)
            {
                throw new WebFaultException<string>(ex.Message, System.Net.HttpStatusCode.BadRequest);
            }
            catch (Exception ex)
            {
                ExceptionHelper.Log(ex, null);
                throw new WebFaultException<string>("An unknown error has occurred.", System.Net.HttpStatusCode.InternalServerError);
            }

            return response;
        }