Ответы пользователя по тегу ASP.NET
  • Как опубликовать .NET MVC приложение, разрабатываемое на Mac OS?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Вроде как пишут, что можно поставить старую Xamarin Studio 5.1.4, и в ней это еще есть. Надеюсь, это поможет.
    Опубликовать вручную не должно быть сложно: собираете проект, копируете ./bin, ./Views, *.config и каталоги со статикой в root-директорию сайта в IIS — этого должно быть достаточно.
    Ответ написан
    1 комментарий
  • Можно ли использовать Model для взаимодействия с View вместо ViewModel?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Лично я сторонник такого разделения в силу практики Separation Of Concerns.
    Я даже разделяю модель, модель представления и модель запроса (данные, пришедшие от пользователя).
    Я люблю, когда объекты домена представляют собой POCO-классы, как правило, неизменяемые — с readonly-полями и валидацией всего в конструкторе. Для получения данных от пользователя я использую отдельные классы с атрибутами валидации, автосвойствами и автоматическим связыванием. Если все хорошо, я просто делаю маппинг в доменный объект и сохранение.
    Модель представления нужна, если она комбинирует несколько доменных объектов, содержит данные, нужные только представлению, и так далее. В простых случаях возможно передавать во View сам доменный объект.
    Вышесказанное имеет смысл при разработке серьезных приложений. Для простых сайтов на коленке лучше разделение не использовать, или использовать его только там, где это действительно нужно. Минусы заключаются, собственно, в дополнительном количестве кода, который приходится писать и поддерживать. Плюсы — в четком разграничении ответственности и дисциплине.
    Ответ написан
    4 комментария
  • Как называется архитектура с несколькими серверами и одной базой?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    В терминологии Microsoft развертывание web-приложения на нескольких серверах именуется Web Farm. Даже framework для них сделали. Про конфигурацию еще здесь можно почитать, ну и вообще в Google по запросу «configure web farm».
    Про базу данных — MongoDB замечательно масштабируется по горизонтали, начать можно с репликации, это даст масштабирование на чтение, при необходимости организовать распределенный кластер.
    Ответ написан
    Комментировать
  • Узнать URL страницы?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Ох, уж эти Web Forms!
    Думаю, для понимания механизма достаточно будет открыть вкладку Network dev-консоли Chrome, понажимать разные кнопки и посмотреть, какие запросы отправляются.
    За выполнение действий по postback отвечают поля __EVENTTARGET и __EVENTARGUMENT POST-запроса. Сценарий рисуется примерно такой:
    1. Отправляем POST-запрос к странице с аргументами для установки размера страницы в 100 записей (нужные аргументы можно взять из консоли, взять их из страницы, навскидку, непросто).
    2. Парсим email'ы.
    3. Ищем ссылку на следующую страницу. Нам интересны ссылки (a), расположенные внутри блока с классом .rgNumPart. Пейджер отображается дважды, поэтому берем только первый блок.
    4. Находим в нем элемент a, следующий за a.rgCurrentPage. Если такого нет, мы просмотрели список до конца.
    5. Из атрибута href ссылки регуляркой достаем идентификатор вроде ctl00$MainContent$RadGrid1$ctl00$ctl03$ctl01$ctl03. Это будет новый __EVENTTARGET.
    6. Отправляем новый POST-запрос с новыми аргументами, переходим к шагу 2.
    Ответ написан
  • Постраничный вывод (пагинация) ASР.NET MVC?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Похоже, проблема в том, что метод, принимающий аргументы фильтра, работает только по POST, а пейджер реализован в виде ссылок, которые, очевидно, делают GET запрос (и вы попадаете в первый метод).
    Думаю, вы могли бы сделать один GET-метод, Index(FilterAutoValue filter, int page = 1) и, если критерии поиска не заданы, просто возвращать из dataFilter.FiltrationAuto запрос, отображающий все.
    Ответ написан
    1 комментарий
  • Как спроектировать архитектуру ASP.NET MVC приложения в данном случае?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Не совсем понял суть вопроса.
    Если работа с данными в вашем проекте вынесена в отдельную библиотеку и MVC-приложение использует эту библиотеку, ничто не мешает рядом с MVC сделать еще одно приложение (console или service), которое будет работать независимо, используя те же библиотеки. Консольное приложение можно запускать через scheduler ОС, если сервис — тут вы сами решаете, когда и что нужно делать.
    Если код работы с базой (контексты, модели, да хоть бы ADO.NET) у вас в MVC, то стоит сделать рефакторинг.
    Для коммуникации между приложениями MVC и не-MVC можно сделать специальный endpoint (в случае console -> MVC), или event queue (для console <-> MVC), но это при необходимости.
    Ответ написан
    2 комментария
  • Нарушение порядка запросов страницы, баг браузера или сервера?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    А на мой взгляд, тут банальное race condition. Когда мы зажимаем F5, несколько запросов теоретически могут одновременно попасть в конвейер обработки.
    Попробуйте поместить указанные операции в критическую секцию:
    lock (Session.SyncRoot) {
        if (Session["a"] == null)
            Session["a"] = a;
        else { 
            Session["a"] = (int)Session["a"] + 1;
            a = (int)Session["a"];
        }
    }


    И я бы сделал так, а то у вас три операции чтения, хотя нужна только одна:
    var storedValue = Session["a"];
    a = (storedValue == null) ? a : (int)storedValue + 1;
    Session["a"] = a;
    Ответ написан
    Комментировать
  • ASP.Net zero down time deployment, как лучше и дешевле?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Есть решение с использованием модуля Application Request Routing, описанное на serverfault, правда, лично я его не пробовал. Можно попробовать начать с этого, а если будет работать ненадежно или в случае роста нагрузки — тогда уже ставить nginx.
    Ответ написан
    Комментировать