Задать вопрос
  • Имя "c" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Как исправить?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Запускать "операторы" из командной строки (cmd.exe в Windows или sh и пр. в *nix). Потому что синтаксис этих команд - не Powershell'овский. Ну, или переделать эти команды под Powershell.
    Ответ написан
    Комментировать
  • Почему на многих крупных сайтах не используются смысловые теги main,section, article, aside, header, footer?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Потому что современные веб-сайты основаны не на той концепции, которую продвигают теоретики-разработчики HTML.
    Вся эта смысловая разметка - она относится к коцепции документа как основного содержимого страниц. То есть - структурированного как текст содержимого, основное взаимодействие с которым - чтение и прочий просмотр. А в реальности большинсво крупных сайтов - это интерактивные приложения, у которых совершенно другая структура, в рамки "смысловой разметки" плохо впихуемая.

    Короче, смысловая разметка подобна Скрипачу: "А Скрипач не нужен, дорогой.".
    Ответ написан
    Комментировать
  • Почему получаю System.InvalidOperationException: No authentication handler is registered for the scheme?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вы неправильно используете метод ControllerBase.Forbid. Передаваемая в него строка (она, как понимаю, преобразуется в массив строк из одного элемента) - это не сообщение об ошибке, а название использованного метода аутентификации.
    Ответ написан
    Комментировать
  • Как добавить одно поле множеству классов без применения наследования и добавления поля в каждый класс по отдельности?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Привыкли к миксинам в языке с динамической типизацией? В C# их нет, и вряд ли будут, потому что типизация тут статическая. И приемы программирования - соответственно, другие.

    В частности, чтобы добавить дополнительное свойство (или метод) в классы из разных иерархий наследования, используйте интерфейс. Примерно так (примеры - на основе кода из комментариев):
    public interface IChosable {
        bool IsChosen {get; set;}  //Желательно имена писать таки на английском правильном
                                                 // а не ломаном. А то глаза режет.
                                                 //Ну, или хотя бы - по русски транслитом: 
                                                 // Vybrano вместо IsChoised - и то лучше, IMHO
    }
    
    //...
        public class ViewedDirectoryData : DirectoryDataEntity, IChosable
        {
            public bool IsChosen {get; set;}  
        }
    
        public class ViewedOutputData : OutputData, IChosable
        {
            public bool IsChosen {get; set;}  
        }

    Но свойства, таки да, придется определять в каждом классе, реализующем интерфейс (но можно перенести их, вместе с указанием реализации интерфейса, в базовые классы иерархий).

    Удобство тут в том, что ссылку на любой из классов, реализующих интерфейс, можно привести к типу интерфейса - тогда и статический контроль типов сохраните, и работать со всем этими классами можно будет единообразно.
    Ответ написан
  • Linux. Через роутер в виртуалку на хосте ICMP идет, а TCP нет. Почему?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Возможно, прямые и обратные пакеты между 192.168.0.0/24 и 192.168.2.0/24 у вас ходят разными маршрутами. В наше время это проверить сложно, потому что современные устройства любят резать опцию записи маршрута в эхо-пакеты ICMP (в ping она включалось ключем -r 9).
    TCP, в отличие от ping, нужно установленное соединение, а роутер (брандмауэр на нем) может контролировать, что соединение установливается правильно. И если он видит пакеты только в одну сторону, то может блокировать соединение.

    Для проверки добавьте маршрут в 192.168.2.0/24 через Linux(192.168.0.101) на тот узел в 192.168.0.0/24, с которого вы пробуете wget. На Windows это делается командой route add 192.168.2.0 mask 255.255.255.0 192.168.0.101 (работает до перезагрузки).

    Если это решит проблему, то добавьте этот маршрут на постоянку - это можно сделать через DHCP или прописать маршрут вручную напостоянку (в Windows для этого используйте route add -p и далее по тектсту). Можете также попробовать отключить брандмауэр на роутере для внутренней сети (как это сделать и можно ли - это мне неведомо, я модель вашего роутера и что он может не знаю, я такое поведение на MS ISA Server в древности наблюдал).

    PS Вообще-то, если подключать виртуалку через именно мост ("на уровне L2"), то она должна иметь/получить адрес из той же подсети, что и хост, но тут я выяснять, что вы там на самом деле сделали, не хочу.
    Ответ написан
  • Как создать экземпляр экземпляра класса?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вы неправильно понимаете класс enum. enum - это не класс, а ключевое слово языка C#.

    PS
    И я задумался:
    Надо не думать, и даже - не знать. Надо - уметь применять. Подумайте, какую практическую задачу вы хотели решить этой задумкой? Если такой задачи нет - не забивайте себе голову. А если желаете забить себе голову чисто для себя чем-нибудь абстрактным, то для этого лучше всего подойдет философия, а не IT.
    Ответ написан
    Комментировать
  • Как сделать Mock на приватное поле типа Dictionary для Integration tests или как можно проверить, что его метод был вызван?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Сделайте фабрику для экземпляра, реализующего кэш, и передавайте через конструктор её, в виде интерфейса. Тогда кэш у вас будет частным, действующим только внутри класса, но конкретная его реализация будет задаватьс снаружи. И все будет по фэн-шуюSOLID
    Для теста передайте в конструктор имитатор ("мок") этой фабрики, который создает и возвращаетнужный вам имитатор кэша.

    PS Стндартная для .NET имплементация кэша в памяти - это MemoryCache, он реализует интерфейс IMemoryCache. Только вот самому его имитировать нетривиально, поскольку у него есть особенность в поведении: его элемент (ICacheEntry) сохраняется в кэше по факту очистки (вызову Dispose() ). Я про это даже статью на Хабре написал.
    Ответ написан
    2 комментария
  • Как предотвратить изменение пользователем данных во время выполнения async метода сохранения этих данных?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Простейший вариант: копируйте (синхронно) в обработчике нажатия кнопки данные, которые вы сохраняете, в другое место, а там пользователь пусть хоть обизменяется: на сохраняемые данные это уже не повлияет. Если данных вдруг много, то тогда уже придется синхронизировать доступ к ним (для асинхронной синхронизации подходит SemaphoreSlim.WaitAsync/Release, а если вы можете позволить себе блокировку потока UI, то и lock сойдет). Есть и более сложные схемы - копировать только те данные, которые пользователь собрался изменить, и сохранять в таком случае именно их, а не данные из ViewModel ("копирование при записи"). Короче, дерзайте: вариантов много.
    Ну, а вариант с ползунком сам по себе ненадежен: пользователю доверять нельзя. Но как подспорье, вместе с блокировкой изменения - годится.
    Ответ написан
    Комментировать
  • Как заставить объект Moq возвращать разные значения при повторных прогонах теста?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Есть подозрение, что при каждом вызове тестового метода с новым параметром экземпляр вашего тестового класса каждый раз создается заново, вместе с новым экземпляром имитатора (Mock> _ratingRecordRepositoryMock; ) . В пользу этого говорит и то, что вы при каждом вызове заново настраиваете имитатор заново, а если бы экземпляр имитатора уже использовался, вы бы получили ошибку.

    Проверить просто: поставьте точку остановки (или воткните отладочное сообщение) в конструктор тестового класса.
    Ответ написан
    2 комментария
  • Как решить проблему с WDS?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Я не понял, что именно вы сделали, но по поводу настроек посмотрите эту статью: https://learn.microsoft.com/en-us/previous-version...
    Ответ написан
  • Почему винда создает неправильную запись в route table?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Неправильный шлюз по умолчанию прилетает вам по DHCP на следующий интерфейс: Ethernet adapter VMware Network Adapter VMnet8. Его создает VMware WorkStation, а используется он в настройках по умолчанию для выхода наружу через NAT виртуалок подсоединенных к соотвествующей сети.
    Т.к. я не знаю, для чего у вас на ПК используется VMWare (и используется ли вообще - у вас там вообще всё интересно: я вижу ещё следы VirtualBox и Hyper-V), то точно сказать, что вам надо сделать, я не могу. Но, как минимум, можно в Virtual Network Editor отключить DHCP на нем - а если у вас в этой виртуальной ести еесть виртуалки - настроить на них адрес IP вручную.
    Ответ написан
    Комментировать
  • Можно ли вручную монтировать и размонтировать диски на Windows?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если вам нужно всего лишь монтировать вручную/не монтировать автоматически диски - смотрите в сторону команды mountvol.
    Но есть подозрение, что нужно вам, на самом деле, что-то другое.
    Ответ написан
    1 комментарий
  • Как сменить привязку DNS к старому IP?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    IP, как известно, скрываются в зоне DNS (запись типа A). Впрочем, Windows ищет КД по другим записям (SRV). Для начала: этот ваш КД указан на второй машине, как сервер DNS, причем - единственный? Если нет - укажите.
    Если уже указан - проверяйте работспособность поднятого КД - объявляет ли он себя контроллером? dcdiag (в командной строке в режиме администратора) - вам в помощь.

    PS Ещё IP может временно храниться в кэше DNS на клиенте, но если вы уже перезагружали клиент, то там его быть не может.

    PPS
    уже все перерыл
    Вы уверены, что перерыли действительно всё? В файл hosts на клиенте заглянули, например?
    Ответ написан
  • Как в C# на этапе AddCookie[options.Events.OnValidatePrincipal] проверять активность сессии пользователя в стороннем auth-server?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Подскажите, как делают refresh_token взрослые дяди в многопоточке.

    Если нужен ответ на это конкретный вопрос, причем если имеется в виду не просто многопоточка, а асинхронная, с await без блокировки потока - то на это есть такой SemaphoreSlim. Делается примерно так (надеюсь, идея будет понятна)
    //Попадаем сюда после получения существующего access token и выявления, что он просрочен
        SemaphoreSlim sem = GetSemaphore(clientId); 
       await sem.WaitAsync(); //timeot и CancellationToken добавить по вкусу
       try {
         //Получаем существующий access token повторно - вдруг его уже кто-нибудь до нас обновил 
        //   (используем double check pattern)
        //Если это не так,  выполняем тут всю логику обновления access token
      }
      finally {
          sem.Release(); //SemaphoreSlim - не мьютекс, сам не освободится в случае чего
      }


    GetSemaphore реализовать можно по-разному. Можно один на все приложение: static или Singleton - это если нагрузка небольшая.
    А можно кэшировать семафоры по одному для каждого пользователя (т.е. свой семафор для каждого clientID), чтобы пользователи не толклись около одного семафора на всех.
    Главное, чтобы этот семафор создавался с начальным значением 1 - тогда он будет пускать пользователей по одному.

    Ну, а если все делать без асинхронности, в одном потоке, блокируя его при необходимости (т.е. без await), то способов много. Простейший - блок lock вокруг кода обновления маркера доступа (access token), есть такде Monitor, Mutex, тот же Semaphore (хоть со Slim, хоть без)...
    Ответ написан
    1 комментарий
  • Не работает InterVLAN routing c3750g?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Как тут уже говорили в комментариях предполагаемая причина проблемы - настройки брандмауэра Windows по умолчанию: доступ по многим протоколам правила по умолчанию в брандмауэре разрешают только из локальной подсети.

    Для диагностики - добавьте какой-нибудь ПК в VLAN 102 и попробуйте сначала пропинговать 192.168.101.181 с него, а потом, наоборот - этот ПК со 192.168.101.181. Если ping идет только в одну сторону, то дело 100% в брандмауэре. Если дело в бранмауэре, то надо поменять правила. Если есть домен, это легко и просто: добавляете правило в политику для ПК. Если домена нет - придется побегать и поперенастраивать на каждом вручную (можно, вообще-то под это дело скрипт написать и куда-нибудь на файл-сервер выложить).
    Ответ написан
    3 комментария
  • Как уменьшить время на удаление (30 дней) после перемещения ящика Exchange в другую базу?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вам точно нужно уменьшить именно whitespace (т.е. выпонить дефрагментацию БД), а не удалить из базы п/я, которые в ней остались в состоянии SoftDeleted (их можно увидеть командой Get-MailboxStatistics в EMS для БД, где они были)? Если нужно на самом деле удалить оставшиеся п/я (которые там по умолчанию болтаются упомянутые 30 дней), испольуйте команду Remove-StoreMailbox.

    PS Дефрагментация же БД (онлайновая) идет сама по себе своим чередом и обычно кушать не просит. Ну а автономная (offline) дефрагментация, с помощью eseutil - это вообще средство на крайний случай.
    Ответ написан
    4 комментария
  • Какой гипервизор (на базе основной ОС, а не автономный) из популярных (VirtualBox, VMWare и др) больше подходит для бэкенд разработки и тестирования?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Под такие требования подойдет любой. Кстати, чем вам встроененный в Windows Hyper-V не нравится? Или в испольуемой вами редакции его нет?
    Ответ написан
    1 комментарий
  • Как реализовать TcpLister, который будет ожидать запроса?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Зависит от того, чего вы хотите.
    Если вас устраивает, что задача, выполняющая HandleClientAsync для подключившегося клиента будет брошена на произвол судьбы, можно использовать оба варианта (но первый мне нравится больше). Если вы хотите узнать, чем она закончилась - надо делать по-друому.
    PS См. также комментарии к вопросу.
    Ответ написан
    Комментировать
  • Можно ли удалить вложения из писем?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Иной способ существует: написать скрипт, проходящий по всем письмам в п/я и удалить из них вложения. Комндлета для EMS для этого нет (AFAIK), но в PowerShell для этого можно использовать EWS Managed API.

    Только вот написать скрипт, да ещё чтобы он работал без ошибок и ничего не попортил в процессе отладки - это не так просто. Да и разрешения нужно ему дать (стандартных разрешений админинистратора не хватит). Так что лучше IMHO этим не заморачиваться, а для повышения радивости пользователей поставить им квоты на п/я: пусть чистят сами.
    Ответ написан
    1 комментарий
  • Консоль выдаёт ошибку в коде хотя там её явно не видно, как можно решить?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Смотреть, если не умеючи и без привычки, можно долго и бестолку.
    А чтобы посмотреть быстро и толково, разрабочики IDE дали нам отладчик.
    Судя по сообщению об ошибке, у вас список GeneratedRooms пустой (потому что ничего нет даже в начальной позиции - 0). Так что начать можно с того, что поставить в строке 143 точку останова и убедиться в этом.
    А можно сразу начать разбираться, почему он пустой: поставить точку останова (breakpoint) там, где этот список пополняется - у вас такое место одно, строка 106, где в этот список добавляется результат некой функции - и пройти в отладчике по шагам работу этой функции: начать с проверки ее параметров, затем смотреть, что управление пошо туда, куда вам надо и переменные имеют ожидаемое значение. Можно даже сразу поставить точку останова в начале функции, если она у вас ниоткуда больше не вызывается.
    Ответ написан
    3 комментария