Ejemplo n.º 1
0
        static void CheckMSDTC()
        {
            try
            {
                /*
                 * Проверка MSDTC
                 * */

                var msdtcManager = new MsdtcManager(false, 1000);

                Debug.WriteLine("MSDTC: параметры службы (dcomcnfg). Установлена = {0}. Установлена и запущена = {1}.", msdtcManager.IsServiceInstalled(), msdtcManager.IsServiceInstalledAndRunning());
                Debug.WriteLine("MSDTC: Network DTC. Доступ к сети DTC = {0}. Диспетчер транзакций - разрешить входящие = {1}, разрешить исходящие = {2}", msdtcManager.NetworkDtcAccess, msdtcManager.AllowInbound, msdtcManager.AllowOutbound);
                if (msdtcManager.NetworkDtcAccess == NetworkDTCAccessStatus.Unknown)
                {
                    Debug.WriteLine("MSDTC: Настройки безопасности Network DTC недоступны. Возможно, нет доступа на чтение реестра. Проверьте настройки вручную (Требуется следующее: доступ к сети DTC = Включен; диспетчер транзакций - разрешить входящие = Включен; диспетчер транзакций - разрешить исходящие = Включен)");
                }
                else
                {
                    if (msdtcManager.NetworkDtcAccess != NetworkDTCAccessStatus.On || !msdtcManager.AllowInbound || !msdtcManager.AllowOutbound)
                    {
                        var toCorrect = new List <string>();
                        if (msdtcManager.NetworkDtcAccess != NetworkDTCAccessStatus.On)
                        {
                            toCorrect.Add("Доступ к сети DTC - включить");
                        }
                        if (!msdtcManager.AllowInbound)
                        {
                            toCorrect.Add("Разрешить входящие - включить");
                        }
                        if (!msdtcManager.AllowOutbound)
                        {
                            toCorrect.Add("Разрешить исходящие - включить");
                        }

                        Debug.WriteLine("MSDTC: выполнение корректирующих действий:\r\n - " + string.Join(";\r\n - ", toCorrect) + ".");

                        if (msdtcManager.NetworkDtcAccess != NetworkDTCAccessStatus.On)
                        {
                            msdtcManager.NetworkDtcAccess = NetworkDTCAccessStatus.On;
                        }
                        if (!msdtcManager.AllowInbound)
                        {
                            msdtcManager.AllowInbound = true;
                        }
                        if (!msdtcManager.AllowOutbound)
                        {
                            msdtcManager.AllowOutbound = true;
                        }

                        if (msdtcManager.NeedRestart)
                        {
                            Debug.WriteLine("MSDTC: служба требует перезагрузки, выполняем попытку...");
                            msdtcManager.RestartService();
                            Debug.WriteLine("MSDTC: служба перезагружена.");
                        }
                    }
                }
            }
            catch (Exception ex) { Debug.WriteLine("Web.MSDTC: {0}", ex.Message); }
        }
Ejemplo n.º 2
0
        public void ATOMICTRANSACTION( )
        {
            Dispatcher.BeginInvoke(new Action(() => {
                msdtcManager = new MsdtcManager(false, 1000);
                msdtcManager.EnableWindowsFirewallException(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_ALL);
                msdtcManager.EnableWindowsFirewallException(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN);
                msdtcManager.EnableWindowsFirewallException(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE);
                msdtcManager.EnableWindowsFirewallException(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC);
                // if (msdtcManager.IsServiceInstalled() == false)
                // {
                msdtcManager.InstallService();

                // }


                //msdtcManager.EnableWindowsFirewallException(GetNetFwProfileType());
                dispatcherTimer          = new DispatcherTimer();
                dispatcherTimer.Tick    += new EventHandler(dispatcherTimer_Tick);
                dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
                dispatcherTimer.Start();
            }), DispatcherPriority.SystemIdle);

            //   Thread.();
        }