Имя: Пароль:
1C
1С v8
Как идентифицировать свое соединение?
0 rasta
 
15.03.17
14:33
1. Альтернатива НомерСоединенияИнформационнойБазы() 0% (0)
Всего мнений: 0

Доброго всем дня. Помогите с вопросом.
на c# пишу процедуру для закрытия сеансов и соединений с базой.
и чтобы не вырубить самого себя не могу понять как узнать номер своего соединения.
в 1с можно так: IDconn = НомерСоединенияИнформационнойБазы();
а как узнать номер своего соединения когда подключение через v82COMConnector ?


public static void KillUserSession(bool OnlyCurrUser = false, bool Question = true)
        {
            if (!OnlyCurrUser && Question)
            {
                string message = "Вы хотите закрыть сеансы всех ползователей, продолжить?";
                string caption = "Закрытие всех сеансов";
                MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                DialogResult result;

                result = MessageBox.Show(message, caption, buttons, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

                if (result == System.Windows.Forms.DialogResult.No)
                {
                     return;
                }
            }

            dynamic v8ConnectorL = new V82.COMConnector();

            int IDconn;
            

            dynamic Agent = v8ConnectorL.ConnectAgent(GlobalVars.BaseSettings.Cluster);
            IDconn = 0;
            //IDconn = НомерСоединенияИнформационнойБазы();

            dynamic Clusters = Agent.GetClusters();
            dynamic Processes;
            dynamic CurrProcess;
            dynamic Bases;
            int port;
            dynamic InfoBase;
            dynamic Sessions;
            dynamic Connections;
            dynamic InfoBaseInfo;

            foreach (dynamic Cluster in Clusters)
            {
                Agent.Authenticate(Cluster, null, null);
                Processes = Agent.GetWorkingProcesses(Cluster);
                foreach (dynamic Process in Processes)
                {
                    port = Process.MainPort;
                    // теперь есть адрес и порт для подключения к рабочему процессу
                    CurrProcess = v8ConnectorL.ConnectWorkingProcess(GlobalVars.BaseSettings.Cluster + ":" + port);
                    CurrProcess.AddAuthentication(GlobalVars.BaseSettings.User, GlobalVars.BaseSettings.Password);

                    ///найдем нашу базу
                    InfoBase = null;

                    Bases = Agent.GetInfoBases(Cluster);
                    foreach (dynamic Base in Bases)
                    {
                        if (Convert.ToString(Base.Name).ToUpper() == GlobalVars.BaseSettings.Base.ToUpper())
                        {
                            InfoBase = Base;
                            break;
                        }
                    }
                    if (InfoBase == null)
                    {
                        continue;
                    }

                    Sessions = Agent.GetInfoBaseSessions(Cluster, InfoBase);
                    foreach (dynamic Session in Sessions)
                    {
  
                           if (Session.ConnID = IDconn )
                            {
                            continue;
                            }
        if (OnlyCurrUser && (Convert.ToString(Session.UserName).ToUpper() != GlobalVars.BaseSettings.User.ToUpper()))
                            {
                                continue;
                            }
                            Agent.TerminateSession(Cluster, Session);
                        }
                    }
                    InfoBaseInfo = CurrProcess.CreateInfoBaseInfo();
                    InfoBaseInfo.Name = GlobalVars.BaseSettings.Base;
                    Connections = CurrProcess.GetInfoBaseConnections(InfoBaseInfo);
                    
                      foreach (dynamic Connection in Connections)
                    {

                        if (Connection.ConnID = IDconn )
                        {
                            continue;
                        }
                        if (OnlyCurrUser && (Convert.ToString(Connection.UserName).ToUpper() != GlobalVars.BaseSettings.User.ToUpper()))
                        {
                            continue;
                        }
                        CurrProcess.Disconnect(Connection);
                    }
                     }
            }
        }
1 rasta
 
15.03.17
14:40
if (Connection.AppID=  "COMconsole")
                        {
                            continue;
                        }
не предлагать, тк кроме меня еще есть соединения с таким AppID