Все потоки
Поиск
Написать публикацию
Обновить
0

ASP *

Технология создания веб-приложений и веб-сервисов

Сначала показывать
Порог рейтинга
Уровень сложности

Динамическое создание robots.txt для сайтов ASP.NET Core

Время на прочтение3 мин
Количество просмотров4.2K

Сейчас я нахожусь в процессе переноса части старых WebForms моего сайта, которые пока работают на голом железе, в ASP.NET Core и службы приложений Azure. В процессе я понял, что хочу убедиться, что мои сайты не индексируются в Google, Яндекс, Bing и в других поисковых системах.


У меня уже есть файл robots.txt, но я хочу, чтобы один служил только для продакшена, а другие — для разработки. Я думал о нескольких способах решить эту проблему. Я мог бы иметь статический файл robots.txt, файл robots-staging.txt и условно скопировать один поверх другого в моем Azure DevOps CI/CD pipeline.


Затем я понял, что самое простое — сделать robots.txt динамичным. Я думал о написании собственного промежуточного ПО, но это казалось хлопотным занятием с большим количеством кода. Я хотел посмотреть, насколько просто это может быть.


Читать дальше →

Расцвет и упадок Visual Basic

Время на прочтение7 мин
Количество просмотров80K
Мне нужно сделать признание. До того, как я стал респектабельным разработчиком, работающим с такими современными языками, как C# и Java (и тем бурлящим хаосом, который известен нам под именем JavaScript), я был увлечённым фанатом невероятно популярного и неуклюжего Visual Basic.

Моя влюблённость была искренней. Ещё в детстве я учился программировать на языке BASIC. Но не просто на BASIC. Я начинал с потрясающей среды Microsoft под названием QuickBASIC на древней операционной системе DOS. Я всё ещё помню, как набирал белый текст на её бодром голубом фоне.


Для программирования в 1988 году QuickBASIC был волшебной штукой. Можно было писать код без громоздких номеров строк, отлавливать синтаксические ошибки в процессе набора и запускать программы прямиком из среды разработки без необходимости возни с командной строкой. Закончив программу, можно было делиться ею со своими друзьями при помощи вот этих ребят:


В наши дни QuickBASIC остался лишь ещё одной диковинкой из далёкого прошлого. Хотя так ли это? Новаторский проект под названием QB64 создал современную реплику QuickBASIC. Он запускается на Windows, MacOS и Linux, и не требует эмулятора. При запуске программы в QB64 среда выполняет хитрый трюк — сначала она транслирует код на BASIC в C++, а затем компилирует его.

Классический VB и эра Visual


QuickBASIC был впечатляющей средой для далёких дней текстовых компьютерных систем. Но всё изменилось, когда Microsoft выпустила Windows и погрузила пользователей PC в графический мир кнопок и кликов. Одновременно с выпуском компанией Microsoft Windows 3.0 (первой версии, которая добилась истинного успеха), был выпущен Visual Basic 1.0.
Читать дальше →

Как работает конфигурация в .NET Core

Время на прочтение9 мин
Количество просмотров73K

Давайте отложим разговоры о DDD и рефлексии на время. Предлагаю поговорить о простом, об организации настроек приложения.


После того как мы с коллегами решили перейти на .NET Core, возник вопрос, как организовать файлы конфигурации, как выполнять трансформации и пр. в новой среде. Во многих примерах встречается следующий код, и многие его успешно используют.


public IConfiguration Configuration { get; set; }
public IHostingEnvironment Environment { get; set; }

public Startup(IConfiguration configuration, IHostingEnvironment environment)
{
   Environment = environment;
   Configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{Environment.EnvironmentName}.json")
            .Build();
}

Но давайте разберемся, как работает конфигурация, и в каких случаях использовать данный подход, а в каких довериться разработчикам .NET Core. Прошу под кат.

Читать дальше →

.NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1

Время на прочтение18 мин
Количество просмотров79K
Публикую на Хабр оригинал статьи, перевод которой размещен в блоге Codingsight.
Вторая часть доступна здесь

Необходимость делать что-то асинхронно, не дожидаясь результат здесь и сейчас, или разделять большую работу между несколькими выполняющими ее единицами была и до появления компьютеров. С их появлением такая необходимость стала очень ощутимой. Сейчас, в 2019, набирая эту статью на ноутбуке с 8 ядерным процессором Intel Core, на котором параллельно этому работает не одна сотня процессов, а потоков и того больше. Рядом, лежит уже немного потрепанный, купленный пару лет назад телефон, у него на борту 8 ядерный процессор. На тематических ресурсах полно статей и видео, где их авторы восхищаются флагманскими смартфонами этого года куда ставят 16ти-ядерные процессоры. MS Azure предоставляет менее чем за 20$/час виртуальную машину со 128 ядерным процессором и 2 TB RAM. К сожалению невозможно извлечь максимум и обуздать эту мощь не умея управлять взаимодействием потоков.
Читать дальше →

Оптимизация сборки мусора в высоконагруженном .NET сервисе

Время на прочтение16 мин
Количество просмотров33K
Ежедневно в сервисе Pyrus работают десятки тысяч сотрудников из нескольких тысяч организаций по всему миру. Отзывчивость сервиса (скорость обработки запросов) мы считаем важным конкурентным преимуществом, так как она напрямую влияет на впечатление пользователей. Ключевой метрикой для нас является «процент медленных запросов». Изучая ее поведение, мы заметили, что раз в минуту на серверах приложений возникают паузы длиной около 1000 мс. В эти промежутки сервер не отвечает и возникает очередь из нескольких десятков запросов. О поиске причин и устранении узких мест, вызванных сборкой мусора в приложении, пойдет речь в этой статье.


Читать дальше →

.Net Community Райффайзенбанка приглашает на митап UPD Трансляция

Время на прочтение2 мин
Количество просмотров3.3K
.NET Community Райффайзенбанка приглашает на Meetup, который состоится в московском офисе в Нагатино 23 мая.

Сообщество разработчиков Райффайзенбанка активно проводит митапы, готовит вокркшопы, и делает еще много всего, для того, чтобы сотрудники могли делиться опытом и знаниями друг с другом. В программе события два доклада. Поговорим про DDD в микросервисах и узнаем как коллеги из Ozon реализовали сбор метрик в приложениях ASP.NET Core


Blazor перешел из стадии эксперимента в Preview

Время на прочтение4 мин
Количество просмотров10K
С этим новым релизом мы рады сообщить, что Blazor теперь в стадии превью! Blazor больше не является экспериментальным, и мы обязуемся предоставлять его в качестве поддерживаемого фреймворка веб-интерфейса, включая поддержку запуска на стороне клиента в браузере на WebAssembly.

Чуть более года назад мы запустили экспериментальный проект Blazor с целью создания клиентского фреймворка веб-интерфейса на основе .NET и WebAssembly. В то время Blazor был нечто чуть-большим, чем прототип, и было много открытых вопросов о жизнеспособности запуска .NET в браузере. С тех пор мы выпустили девять экспериментальных релизов Blazor, посвященных различным проблемам, включая компонентную модель, привязку данных, обработку событий, маршрутизацию, макеты, размер приложения, модели хостинга, отладку и инструменты. Сейчас мы находимся в точке, когда мы думаем, что Blazor готов сделать свой следующий шаг.
image

Читать дальше →

Глобальное кеширование результатов Query в ASP.NET CORE

Время на прочтение10 мин
Количество просмотров8.7K

Парадигма CQRS в том или ином виде предполагает, что вызовы Query не будут менять состояние приложения. То есть многократные вызовы одной и той же query, в рамках одного запроса, будут иметь один и тот же результат.


Пусть все интерфейсы, использующиеся в рамках запроса будут иметь тип IQuery или IAsyncQuery:


public interface IQuery<TIn, TOut>
{
   TOut Query(TIn input);
}

public interface IAsyncQuery<TIn, TOut>: IQuery<TIn, Task<TOut>
{
}
Читать дальше →

Обновлена поддержка Razor в Visual Studio Code. Теперь с Blazor

Время на прочтение2 мин
Количество просмотров4.3K
Совсем недавно мы анонсировали улучшенную поддержку инструментов Razor в Visual Studio Code с последним расширением C#. Этот выпуск включает в себя улучшенную диагностику Razor и поддержку для тег-хелперов и приложений Blazor.

image
Читать дальше →

Вышел Blazor 0.9.0

Время на прочтение2 мин
Количество просмотров6.6K

Blazor 0.9.0 уже доступен! Этот релиз добавляет в Blazor улучшения компонентов Razor в .NET Core 3.0 Preview 3.


Новые улучшения Razor Component теперь доступны для приложений Blazor:


  • Улучшена обработка событий
  • Формы и валидация

Blazor survey


Будем рады увидеть ваши отзывы!
Читать дальше →

Мягкое удаление в REST API

Время на прочтение5 мин
Количество просмотров15K
image

Чтобы пользователь не чувствовал боли от безвозвратно утерянных данных, стоит задуматься о мягком удалении. При мягком удалении запись не удаляется из базы физически, а лишь помечается как удалённая. Это позволяет легко восстановить данные путём сброса флага.

Недавно я реализовал мягкое удаление в одном из наших REST-сервисов. Тех, кому интересно, что у меня получилось, приглашаю под кат.
Читать дальше →

Параллельное обновление данных в ASP.NET Web API

Время на прочтение3 мин
Количество просмотров4.6K
Хочу рассказать, как мы организовали фоновое обновление данных во время запроса к REST-сервису.

Задача следующая: система хранит данные о пользователях. Cервис работает изолированно и не имеет прямого доступа к базам с этими данными. Для работы сервису необходимо иметь в своей внутренней базе имена и фамилии пользователей. Их можно получить из Identity текущего пользователя во время запроса. Требуется добавлять или обновлять имена во время каждого запроса. Желательно осуществлять это в отдельном потоке, чтобы эта работа не влияла на время выполнения основного запроса.
Читать дальше →

Что нужно знать о JavaScript Engine Switcher 3.0

Время на прочтение22 мин
Количество просмотров6.5K

Логотип третьей версии JavaScript Engine Switcher


JavaScript Engine Switcher изначально создавался как вспомогательная библиотека и его развитие во многом определялось потребностями библиотек, которые его использовали. Фактически каждая его мажорная версия решала одну или несколько крупных задач необходимых для дальнейшего развития других библиотек:


  1. В первой версии такой задачей было добавление как можно большего количества модулей-адаптеров для популярных JS-движков, поддерживающих платформу .NET. И это дало пользователям Bundle Transformer определенную гибкость: на компьютерах разработчика они могли использовать модуль MSIE, поддерживающий отладку JS-кода с помощью Visual Studio, а на серверах, на которых не было современной версии Internet Explorer или он не был установлен вовсе, они могли использовать модуль V8. Некоторым даже удавалось запускать Bundle Transformer в среде Mono на Linux и Mac, используя модули Jurassic и Jint.
  2. Основной задачей второй версии была реализация поддержки .NET Core, которая требовалась для новой версии библиотеки ReactJS.NET. Другой немаловажной задачей было создание кроссплатформенного модуля, способного быстро обрабатывать большие объемы JS-кода (модули Jurassic и Jint не подходили для этого), и таким модулем, после ряда доработок, стал модуль ChakraCore.
  3. В третьей версии основной акцент был сделан на улучшение интеграции с библиотекой ReactJS.NET и повышение производительности.

В этой статье мы рассмотрим некоторые нововведения третьей версии, которые для многих оказались неочевидными даже после прочтения текста релиза и раздела документации «How to upgrade applications to version 3.X»: изменения в классе JsEngineSwitcher, реорганизация исключений, более информативные сообщения об ошибках, прерывание и предварительная компиляция скриптов, возможность изменения максимального размера стека в модулях ChakraCore и MSIE, а также новый модуль на основе NiL.JS.

Читать дальше →

Ближайшие события

Пакуем приложения ASP.NET Core с помощью Docker

Время на прочтение11 мин
Количество просмотров124K

Приложения ASP.NET Core по-настоящему кросс-платформенны и могут запускаться в «никсах», а соответственно, и в Docker. Посмотрим, как их можно упаковать, чтобы развертывать на Linux и использовать в связке с Nginx. Подробности под катом!


Читать дальше →

Интервью с руководителем центра компетенции .NET на DotNext 2018

Время на прочтение6 мин
Количество просмотров6.3K
22 и 23 ноября в Москве прошла очередная конференция DotNext 2018 для любителей .NET. Меня зовут Максим Смирнов, я руковожу центром компетенций .NET в Альфа-Банке и хочу представить вам текстовую версию одного из интервью, взятых в кулуарах DotNext.


Про жизнь и приключения дотнета в нашем банке, про сосуществование с джавой и проблемы внедрения — под катом.

Сколько в Альфе вообще .NET и для чего он нам нужен

Вышел ASP.NET Core 2.2. Что нового? (2 из 3)

Время на прочтение5 мин
Количество просмотров20K

4 декабря вышел ASP.NET Core 2.2, он входит в поставку .NET Core 2.2. Про .NET Core 2.2 я писал совсем недавно и теперь нужно раскрыть тему в глубину. Давайте посмотрим, чего новенького нам приготовили.


Читать дальше →

Минимизация трафика в ASP.NET Web Forms, кликабельный div и периодический опрос сервера

Время на прочтение5 мин
Количество просмотров4.5K
Технология ASP.NET Web Forms медленно но верно уходит в прошлое. На смену ей приходят Web API с Angular 6 и похожие стеки. Но мне по наследству достался проект именно на Web Forms с огромным legacy. У меня есть несколько друзей, у которых плюс-минус похожая ситуация. Давно написанные приложения на старой технологии, которые надо развивать и поддерживать. У Web Forms есть возможность на PostBack не обновлять всю страницу, а только её часть. То что обёрнуто в UpdatePanel. Это добавляет интерактива, но всё равно работает довольно медленно и потребляет много трафика, т.к. рендеринг каждый раз происходит на сервере, а клиенту передаётся готовая разметка, которую нужно вставить вместо текущей внутрь div. К слову, UpdatePanel как раз рендерится в div, в котором потом разметка и заменяется.
Читать дальше →

Аутентификация asp .net core через IdentityServer4

Время на прочтение3 мин
Количество просмотров23K
Тут не будет ничего необычного, один фреймворк «IdentityServer4» будет выполнять аутентификацию по логину и паролю на неком Api, плюс еще обрабатывать refresh_token.

Работать он будет с существующим IdentityDbContext, IdentityUser.

По итогу получится сценарий при котором, для каждой аутентификации будет выдан и сохранен в таблицу «PersistedGrants» один refresh_token. Это один из четырех типов разрешений OAuth 2.0:

Учётные данные владельца ресурса (Resource Owner Password Credentials): используются доверенными приложениями, например приложениями, которые являются частью самого сервиса.

Все работы по обслуживанию токенов берет на себя фреймворк.

Итак начнем.
Читать дальше →

Неочевидные особенности применения Rotativa для генерации PDF в ASP.NET MVC приложении

Время на прочтение9 мин
Количество просмотров6.4K

Многие разработчики сталкиваются с задачей создания PDF отчетов для веб приложений, вполне естественный запрос. Я бы хотел представить вашему вниманию свой опыт работы с такой задачей при использовании библиотеки Rotativa для генерации отчетов. Это одна из самых, на мой взгляд, удобных библиотек для такой цели в своем сегменте, но при использовании ее я столкнулся с несколькими не очевидными моментами, о которых и хочу поговорить.

Читать дальше →

IndieVisible — онлайн-сообщество инди-разработчиков, построенное на платформе с открытым исходным кодом

Время на прочтение9 мин
Количество просмотров5.1K


Не так давно в тематической группе инди-разработчиков игр я встретил интересное сообщение:


Ладно, ребята, у меня есть идея… И нет, Я НЕ ИДЕЯ-ПАРЕНЬ… Большинство из вас используют разный набор информационных ресурсов, таких как Ludum Dare, Gamedev.net, Indie Game Developers (и другие группы Facebook), Unity Connect, IndieDb, Itch.io, Game Jolt и т.д. Что, если бы мы могли объединиться, чтобы создать централизованное место, где вы могли бы остаться, чтобы обмениваться информацией о геймдеве или быть перенаправленным на внешний ресурс, упомянутый выше?

НЕТ, я не хочу по типу 50-на-50, а вы делаете всю работу. Я уже делаю это! Совершенно точно! С вами или без вас, ребята. Я мог бы лишь использовать некоторую помощь сообщества разработчиков игр.

Так в чем же суть IndieVisible?

Покажите мне суть!