public OperationStatus TrySignIn(UserSignInClient signInUser, out TokenUser tokenUser)
        {
            if (signInUser == null) { tokenUser = null; return OperationStatus.DataFormatError; }

            signInUser.ServerStatus = false;
            OperationStatus status = OperationStatus.None;
            try
            {
                MemberUser user = null;
                if (_userWork.ValidateUser(signInUser.Identifier, signInUser.Password, out user))
                {
                    tokenUser = new TokenUser(user);
                    SecurityManager.AddOrUpdateCurrentTokenUser(tokenUser);
                    status = OperationStatus.SignInSuccess;
                    signInUser.ServerStatus = true;
                    return OperationStatus.SignInSuccess;
                }
                else
                {
                    status = OperationStatus.NoUseOrWrongPassword;
                }
            }
            catch(Exception ex)
            {
                tokenUser = null;
                signInUser.ServerStatus = false;
                status = OperationStatus.GenericError;
                LoggingWork.Error(ex);
            }

            tokenUser = null;
            return status;
        }
        public ClientJsonResult SignIn(UserSignInClient signInUser)
        {
            if (signInUser != null)
            {
                try
                {
                    signInUser.ClearNotifications();
                    IAccountDriver driver = DependencyResolver.Current.GetService<IAccountDriver>();
                    TokenUser tokenUser;
                    OperationStatus status = driver.TrySignIn(signInUser, out tokenUser);
                    if (status == OperationStatus.SignInSuccess)
                    {
                        SaveTicketToCookie(tokenUser, signInUser.IsCookiePersistent);
                        TokenUserClient clientTokenUser = new TokenUserClient(tokenUser);
                        clientTokenUser.AddSuccessNotification(MessageManager.GetMessage(status));
                        return ClientJson(clientTokenUser);
                    }
                    else
                    {
                        signInUser.ServerStatus = false;
                        signInUser.AddErrorNotification(MessageManager.GetMessage(status));
                    }
                }
                catch (Exception ex)
                {
                    signInUser.ServerStatus = false;
                    LoggingWork.Error(ex);
                    signInUser.AddErrorNotification(MessageManager.GetMessage(OperationStatus.GenericError));
                }
            }
            else
            {
                signInUser = new UserSignInClient() { ServerStatus = false };
                signInUser.AddErrorNotification(MessageManager.GetMessage(OperationStatus.DataFormatError));
            }

            return ClientJson(signInUser);
        }
        public ActionResult UserSignIn(UserSignInViewModel signInUser)
        {
            string errorMessage = null;
            if (signInUser == null)
            {
                signInUser = new UserSignInViewModel();
                errorMessage = MessageManager.GetMessage(OperationStatus.DataFormatError);
            }
            else
            {
                try
                {
                    IAccountDriver driver = DependencyResolver.Current.GetService<IAccountDriver>();
                    TokenUser tokenUser;
                    UserSignInClient client = new UserSignInClient() 
                                                {
                                                    Identifier = signInUser.Identifier,
                                                    Password = signInUser.Password
                                                };
                    OperationStatus status = driver.TrySignIn(client, out tokenUser);
                    if (status == OperationStatus.SignInSuccess)
                    {
                        SaveTicketToCookie(tokenUser, signInUser.IsCookiePersistent);
                        string returnUrl = FormsAuthentication.GetRedirectUrl(string.Empty, false);
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        errorMessage = MessageManager.GetMessage(status);
                    }
                }
                catch (Exception ex)
                {
                    LoggingWork.Error(ex);
                    errorMessage = MessageManager.GetMessage(OperationStatus.GenericError);
                }
            }

            if (!string.IsNullOrEmpty(errorMessage))
            {
                ViewBag.ErrorMessage = errorMessage;
            }
            return PartialView("_UserSignIn", signInUser);
        }