Пример #1
0
        /// <summary>
        /// 通过库连接名称获取库
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static Vault GetVaultByName(string name)
        {
            var clientApp = new MFilesClientApplication();
            var vc        = clientApp.GetVaultConnection(name);

            return(vc.BindToVault(IntPtr.Zero, true, true));
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="user"></param>
        /// <param name="vault"></param>
        /// <param name="forceLogout">是否强制退出</param>
        /// <param name="vaultName">库名称</param>
        /// <returns></returns>
        public static Vault GetUserVault(UserDto user, VaultDto vault, bool forceLogout, string vaultName)
        {
            log.Info(" GetUserVault username="******",vault=" + vault.Name);
            if (VaultGuids.Contains(vault.Guid))
            {
                return(GetVault(user, vault.Guid));
            }
            vaultName = vaultName ?? vault.Name;
            var app         = new MFilesClientApplication();
            var removeConns = new List <VaultConnection>();

            try
            {
                var sameVC = app.GetVaultConnection(vault.Name);
                var needR  = Need2Remove(vault, sameVC, vaultName);
                if (needR)
                {
                    removeConns.Add(sameVC);
                }
            }
            catch (Exception ex)
            {
                log.Info(string.Format("GetUserVault error:{0},{1}", vaultName, ex.Message));
            }
            var conns = app.GetVaultConnectionsWithGUID(vault.Guid);

            VaultConnection connection = null;

            foreach (VaultConnection vc in conns)
            {
                var needR = Need2Remove(vault, vc, vaultName);
                if (needR)
                {
                    removeConns.Add(vc);
                }
                else
                {
                    connection = vc;
                }
            }
            if (removeConns.Count > 0)
            {
                foreach (var vc in removeConns)
                {
                    app.RemoveVaultConnection(vc.Name, vc.UserSpecific);
                }
            }
            if (connection == null)
            {
                connection = new VaultConnection
                {
                    AuthType         = MFAuthType.MFAuthTypeSpecificWindowsUser,
                    AutoLogin        = false,
                    NetworkAddress   = vault.Server.Ip,
                    Endpoint         = vault.Server.Port,
                    Name             = vaultName,
                    ServerVaultName  = vault.Name,
                    ServerVaultGUID  = vault.Guid,
                    UserName         = user.UserName,
                    Password         = user.Password,
                    Domain           = user.Domain,
                    UserSpecific     = true,
                    ProtocolSequence = "ncacn_ip_tcp"
                };
                if (String.IsNullOrEmpty(user.Domain))
                {
                    connection.AuthType = MFAuthType.MFAuthTypeSpecificMFilesUser;
                }
                app.AddVaultConnection(connection);
            }
            //var now = DateTime.Now;
            Vault mfVault = null;

            if (connection.IsLoggedIn())
            {
                var v = connection.BindToVault(IntPtr.Zero, true, true);
                if (v != null)
                {
                    if (forceLogout)
                    {
                        try
                        {
                            v.LogOutWithDialogs(IntPtr.Zero);
                        }
                        catch
                        {
                            log.Info("Remote Loggin time11111: " + DateTime.Now);
                        }
                    }
                    else
                    {
                        var accountName = v.SessionInfo.AccountName;
                        var index       = accountName.IndexOf('\\');
                        var userName    = accountName.Substring(index + 1);
                        if (StringComparer.OrdinalIgnoreCase.Equals(userName, user.UserName))
                        {
                            mfVault = v;
                        }
                        else
                        {
                            try
                            {
                                v.LogOutWithDialogs(IntPtr.Zero);
                            }
                            catch
                            {
                                log.Info("Remote Loggin time 22222: " + DateTime.Now);
                            }
                        }
                    }
                }
            }
            log.Info("Remote Loggin time: " + DateTime.Now);

            try
            {
                //now = DateTime.Now;
                var has = false;
                log.Info(string.Format(" in getuservault,userName={0}, pwd={1}, domai={2}", user.UserName, user.Password, user.Domain));
                if (forceLogout)
                {
                    mfVault = LoginVault(connection, user.UserName, user.Password, user.Domain);
                    has     = true;
                }
                if (mfVault == null || !has)
                {
                    mfVault = LoginVault(connection, user.UserName, user.Password, user.Domain);
                }
                log.Info("Loggin time: " + DateTime.Now);
            }
            catch
            {
                log.Info("Remote Loggin time: 33333" + DateTime.Now);
            }
            VaultGuids.Add(vault.Guid);
            return(mfVault);
        }