Задать вопрос
  • Как исправить ошибку подключения в Dotnet?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    WIN-4NMDVUAQV42\\SQLSERVER


    Есть подозрение, что проблема тут. Там точно нужны два обраттных слэша, или вы это откуда-то типа программы на C скопировали (их там нужно два потому что один имеет спейиальное значение)? Потому что обычно там один.
    Ответ написан
  • Стоит ли разделить микросервис Account на микросервис по авторизации и микросервис пользователей?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    микросервис должен выполнять только один функционал

    Микросервис никому ничего не должен. Даже - существовать отдельно от приложения.
    И в вашем приложении, скорее всего, он тоже не нужен, а список пользователей и авторизацию можно сделать частью самого приложения. Но если вы хотите потренироваться с микросервисной архитектурой, то смотрите по своей задаче.
    Если у вас нет пользователей, которые просто числятся и никогда не авторизуются, то отдельный микросервис для пользователей вам точно не нужен. Потому что в таком случае атрибуты авторизации - это неотъемлемая часть сущности "пользователь".
    В противном случае возможны варианты, но нужно взвесить все за и против. В частности - возможную потерю целостности, когда какие-нибудь авторизационные данные не будут соответствовать ни одному пользователю.
    Ответ написан
    Комментировать
  • Как исправить ошибку поделючения к WIM?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Пробовал менять реестр , ставил обновы и ничего


    Так как непонятно, что вы там делали, для начала попробуйте вот решение из вот этого ответа
    https://www.linuxshop.ru/forum/f5/t41632--resheno-...
    Ответ написан
  • Как реализовать историю заказа в БД?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если я правильно вас понял, то в истории заказа вам не нужно хранить весь слепок заказа (ибо там ничего кроме статуса не меняется, в том числе - и в зависимой таблице Готовые_фото), а нужны только идентификатор заказа, статус заказа (то есть, его идентификатор в справочнике) и дата обновления.

    В таком случае всё просто: замените поле слепок_заказа полем, содержащим ссылку (внешний ключ) на запись справочника статусов заказа с нужным статусом.

    Если нет - тогда придется объяснить нам тут схему того JSON слепка, который вы там храните, и что в этом слепке может поменяться.
    Ответ написан
  • Как правильно использовать составные первичные ключи в таблицах?

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

    PS Вообще, при выборе решения надо исходить из условия задачи, а не из соответствия решения какому-нибудь "единственно верному учению", или из текущей моды AKA "best practices".

    PPS Разницы по скорости вы, скорее всего не заметите.
    Ответ написан
    Комментировать
  • Что происходит со свойством класса при присвоении извне?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    class - это функция. Которая выполняет роль конструктора класса при вызове через new. Если вы добавите к функции свойство, то у функции это свойство останется. А вот в созданный ей объект оно просто так не попадает. И не унаследуется - потому что в ссылку на протоип ([[Prototype]] и т.д.) созданного объекта операция new записывает содержимое свойства prototype функции-конструктора. Хотите добавить свойство в экземпляры class SomeClass - добавляте его в SomeClass.prototype. Или же добирайтесь через свойство constructor объекта-экземпляра (constructor.word) - вот оно указывает на функцию-конструктор.
    Ответ написан
    Комментировать
  • Батчинг входящих запросов с неблокирующим ожиданием?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    А вам точно это нужно?
    Потому что тут у вас появляется нюанс, который не совсем ложится на схему работы веб-приложения: у ваших отдельных запросов появляется общее состояние. Как минимум, это - накапливаемый пакет запросов, а ещё, наверное, в это состояние входит нечто общее для всех запросов для работы с БД: подключение или, если используется Entity Framework, DbContext. Это общее состояние придется как-то хранить, регулировать доступ к нему (DbContext к примеру, параллельный доступ не поддерживает в принципе), и вовремя это состояние удалять. Если посмотреть на стандартные механизмы ASP.NET Core, то сессия (ISession) для этого, наверное, не подойдет - там можно хранить только сереализуемые в байты пассивные объекты, и насчет регулировки доступа там непросто. Подойдет концентратор (Hub) SignalR, у которого есть сохраняемый между вызовами контекст подкючения - но ради него, скорее всего, потребуется менять способ вызова API из браузера: у него там своя клиентская библиотека.
    Ну и, по-любому, как-то надо реализовывать активную часть - которая, собственно, отслеживает пакет изменений и вовремя отправляет его в БД.
    Ваша идея
    Шедуллер в фоне будет периодически читать коллекцю объектов на запись и устанавливать результат выполнения в соотвтвующий TaskComplitionSource.

    мне не совсем нравится. Зачем периодически? Kучше чтобы эта активная часть срабатывала по факту добавления запроса в пакет - например, асинхронно ожидала Task от TaskComplitionSource. который метод добавления запроса завершал бы по факту добавления завершающего пакет запроса. Но и завершение по таймауту тоже предусмотреть надо - по жизни оно всякое бывает: обычно для таких целей используется WaitAny для комбинации основной ожидаемой задачи с Delay по таймауту.
    Ну, а ещё требуется, наверное, чтобы для каждого пользователя состояние было свое. В принципе, это делается, но надо делать. Для SignalR для этого можно использовать Hub.Context.Items - это словарь, который может содержать произвольные объекты, и сохраняется на время действия всего подключения.

    А ещё у меня, в принципе, есть своя самодельная библиотека, которая решает ту же задачу - сохранение контекста сеанса, в том числе - активного, с выполняющимся кодом. Я описывал ее недавно в статьях (кроме основной статьи есть дополнительная) на Хабре. Можете попробовать её, если переделывать API не хочется: она вполне годится для работы с API на базе MVC API Controller. или Minimal API. В принципе, она заточена немного под другую задачу - получние и возврат дополнительных результатов в фоне, но для вашей задачи она тоже подойдет. Напишу тут сразу технические подробности как использовать: ссылку на активную часть, собирающую и отправляющую пакет, можно хранить в IActiveSession.Properties, точно так же, как если бы вы хранили ее в Hub.Context.Items, а обработчик завершения, который прибирает за собой (в SignalR его место в OnDisconnect) - привязать к IActiveSession.CompletionToken через его метод Register. В общее для всез запросов состояние входит свой контейнер сервисов со своей областью действия в течение всего существования состояния, так что, если для работы с БД требуется Scoped-сервис из DI-контейнера, то его можно получить оттуда (в дополнительной статье написано, как, а также написано, как защититься от нежелательного одновременного доступа к такому сервису).

    Только вот библиотека эта, естественно, ни разу не стадартная, use at your own risk. Но если попробуете ее, мне будет интересно, что получилось. В том числе - и обнаруженные ошибки, заодно я и для вас их исправлю :-) .

    PS И неплохо было бы IMHO, чтобы дальнейший диалог, если он будет, шел на русском языке, без "батч", "эвейтить", "шедулер" и прочих транслитераций, IMHO лучше уж по-английски писать, если перевод неизвестен. А то я человек старый, мне читать этот пиджин тяжеловато.

    PPS А ещё благодарю за идею, о том, в какую сторону мне развивать мою библиотеку.
    Ответ написан
    1 комментарий
  • Как из одного сегмента вызвать функцию другого сегмента?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Мой сегмент:
    ┃ .text ┃ 0x7FFF0000 ┃ 0x80040000 ┃ 0001 ┃

    Так делать не надо: 0x80000000 - это граница адресного пространства пользователя для обычных 32-битных процессов, не помеченных как использующие расширенное адресное пространство. А перед ней располагаются используемые ядром данные (информация о процессе и потоках в нем), размещаемые в памяти пользовательского режима. То есть, вы напрасно думаете, что вы разместили сегмент в свободной, никем не используемой памяти.
    Ответ написан
  • Как закрыть доступ к домену компам не находящиеся в домене?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Есть старое уже руководство от Microsoft по настройке Windows Firewall для этой цели (называлось сие Domain Isolation)
    Ответ написан
    Комментировать
  • Как выполнить функцию после завершения всех задач?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Используйте метод Task.WaitAll
    Ссылки на все эти задачи, при этом надо, кончено не бросать без присмотра при перезаписи переменной outer, а сохранить (например, в массив Task[])
    Ответ написан
    Комментировать
  • MsSQL ошибка при создание лога транзакций?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Возможно проблема в чистке журнала транзакций (база переводится в simple, shkrink ну и обратно в full), но на другом сервере проблем не наблюдаю с этим.

    Да, это как раз может вызывать вашу ошибку: если после полного резервного копирования происходит изменение модели восстановления базы (full->simple->full), и в момент, когда БД находится в simple, происходит усечение журнала транзакций, то цепочка записей транзакций после полного копирования оказывается нарушенной. А если усечения не происходит, как на другом сервере, - то вам везет. Поэтому так, как вы делаете, делать не надо.
    Вы сжимаете именно журнал транзакций, а не саму БД, я правильно понял? В таком случае посмотрите, а надо ли это вам. Потому что резервное компирование журнала транзакций очищает занятое место в его файле. И это место в дальнейшем (через некоторый промедуток времени - после переключения на другой логический журнал) может использоваться повторно. В результате в стационарном случае - при примерно одинакой частоте трназакций - файл журнала расти перестает.
    Если же вам действительно потребуется сжать журнал - например, после массовй операции типа загрузки большого объема данных - то это можно сделать, не меняя модель восстановления БД. Делается это последовательностью операций "резервное копирование журнала"->"повторное резервное копирование журнала"(лучше после паузы, чтобы преключение на следующий пустой логический журнал, который будет в начале файла, точно произошло)->"усечение журнала с конца"(truncate). Иногда, правда, эту последовательность может потребоваться повторить (если переключения на пустой логиченский журнал в начале файла не произошло).
    А усечение журнала трназакций с конца - это очень быстрая операция (потому что никакие записи журнала никуда не перемещаются), так что ее можно делать обычно даже в период номинальной нагрузки, днем.
    Ответ написан
    1 комментарий
  • Как правильно разделить логику между контроллерами с usecases?

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

    А вся эта теория "чистой архитектуры" - она абстрактная. Ее полезно знать, чтобы иметь возможность рассмотреть больше вариантов решения, и видеть больше про возможных подводных камней, а вот фанатично ей следовать не стоит (если, конечно, ваша задача - сделать что-то полезное, а не спихнуть курсовик и т.п.).
    Ответ написан
    Комментировать
  • Как прописать настройки DNS для добавления компьютера в домен Windows?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Нет, нельзя.
    В hosts можно прописать только записи типа A, а обнаружение домена работает через записи типа SRV.

    PS А с чем связано такое странное желание? Если с тем, что вам нужно разрешать ещё и имена в интернете, то можно настроить на сервере DNS на контроллере домена пересылку на тот сервер, который разрешает имена в интернете. Либо - позволить контроллеру домена свободно рассылать запросы DNS по всему интернету - тогда он сам обратится к нужным серверам-владельцам зон, начиная с корневых (их список у него есть).
    Ответ написан
    6 комментариев
  • Будет ли корректной установка Docker на Windows Server и последующее развёртывание, например, Squid и DNS?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если вам нужно ПО под Linux, чтобы оно физически было размещено на сервере под Windows - cоздайте на сервере виртуальную машину в Hyper-V и поставьте Linux на нее. А лучше - посмотрите, нет ли аналогов этого ПО под Windows. Например, сервер DNS уже есть в Windows Server из коробки.
    Ответ написан
    Комментировать
  • Как сменить FQDN Exchange сервера?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    В Exchange Management Shell (который Powershell) командой:
    Set-SendConnector -Identity <SendConnectorIdParameter> -FQDN <fqdn>


    SendConnectorIdParameter - имя соединителя, через который идет отправка почты в Интернет
    fqdn - имя, которое разрешается во внешний белый IP сервера, желательно чтобы IP-адрес разрешался в это имя (этот вопрос решается с провадером: нужно изменить или добавить в зоне обратного разрешения запись PTR).
    Ответ написан
    Комментировать
  • Почему не удается подключиться к веб серверу?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вы делаете приложение на ASP.NET Core? В таком случае это означает, что не запустилось приложение. У вас там должна текстовая консоль при запусе выражения вылезать. Посмотрите, что там написано.
    Или в окне Output/Debug - туда это тоже дублируется.
    Ответ написан
    Комментировать
  • В связи с чем может разваливаться база данных?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Чтобы убрать ошибки, используйте gfix

    А вообще, там что-то с сервером явно не то: битая память, сбойной диск или подключение к диску... Или просто часто обрубается по питанию.
    Ответ написан
    Комментировать
  • WMI почему отказывает в доступе?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Руководство от MS - здесь там есть ссылки и на руководство по настройке удаленного доступа к WMI, и на руководство по устранению неисправностей.
    Ответ написан
  • Как использовать логин пароль в NSSM при создании службы?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Дошёл до более менее адекватной ошибки, это указав ObjectName \\Domain\User 555555, получаю


    Попробуйте Domain\User, имя пользователя часто указывается так. Domain тут - имя домена AD, в котором существует пользователь - при условии что компьютер включен в этот домен или в домен, который доверяет этому. Если компьютер не в домене или пользователь - локальный, то вместо имени домена указывается имя компьютера.
    Ответ написан
    1 комментарий
  • Какие нужны условия, чтобы выставить тип загрузки службы - BOOT?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вы, случайно, не пытаетесь установить этот тип запуска для обычной службы - программы пользовательского режима которую запускает Service Control Manager? Если так, то так делать нельзя: типы загрузки boot и system предназначены исключительно для драйверов режима ядра.
    Ответ написан