Больше возможностей с C# 8.0

Недавно была выпущена превью версия Visual Studio 2019. Вместе с ней стали доступны новые фичи языка C# и появилась интересная статья в .NET Blog на эту тему: Do more with patterns in C# 8.0. Ниже вы найдете вольный перевод этой статьи.
Читать далее

Потокобезопасные события (Events)

При написании компонентов в многопоточном мире обычно возникает вопрос: Как сделать мои события (Events) потокобезопасными?. Как правило, этот вопрос относиться к подписке (subscription) и отписке (unsubscription) в многопоточной среде, но следует также учитывать потокобезопасность при вызове события.

В этой статье вы узнаете мнение Стивена Клири о потокобезопасности событий (Events) в .NET. Как по мне, довольно интересная статья для ознакомления. Это мнение человека, который посвятил работе с многопоточностью многие годы и имеет огромный опыт в этой области.
Читать далее

Task.Run vs BackgroundWorker: Сравнение

Это статья, в которой я буду сравнивать BackgroundWorker с Task.Run (в асинхронном стиле). Я всегда рекомендую Task.Run. Так что это будет статья, в которой я буду сравнивать код в разных сценариях и показывать, почему я считаю, что Task.Run лучше всех перечисленных.

Чтобы было ясно, эта статья покажет сценарии для которых были разработаны и BackgroundWorker и async Task.Run. Я не буду выбирать и рассматривать какие-либо сценарии, которые не реализуемые при помощи BackgroundWorker. Кроме сегодняшней статьи. 🙂
Читать далее

Как управлять Windows сервисом из программы WinForms [C#]

Возникло у меня задание, управлять сервисом Windows из GUI программы написанной на C# WinForms. Сервис управляет модемным Интернет подкючением. Заказчик захотел иметь возможность управлять сервисом напрямую из программы. Т.е. ему нужна следующая функциональность — Остановить, Запустить, Перезапустить, отобразить текущее состояние.

Для этого я написал простой класс, который делает это при помощи стандартного ServiceController класса.

Читать далее

Single Page Application : ASP.NET MVC .NET Core 2 + Angular 5. Часть 6.

В этой статье я продолжу улучшать тестовый проект. И по плану я буду делать следующие:

  • Изменю структуру проекта, сделаю его похожим на реальное приложение, с несколькими страницами, действиям пользователя, администрированием, авторизацией.
  • После реорганизации проекта, добавлю в него авторизацию на основе токенов OpenID/OAuth2 (используя ASOS)

Это достаточно много работы, несмотря на то, что это всего 2 пункта. Авторизация и аунтефикация обьемные темы. А реарганизация проекта снова вынуждает парвить файлы и добавлять реализацию в уже существующие. Поэтому это снова будет обьемная статья, так что будьте готовы 🙂

Читать далее

Single Page Application : ASP.NET MVC .NET Core + Angular 4. Часть 3.

Вот наконец и появилось время сесть и написать новую часть из задуманной серии статей. В прошлых частях мы создали некий каркас приложения, в котором связали вместе работу серверной части на ASP.NET MVC и клиентской части на Angular 4. Как и было задумано, мы начали создавать Single Page Application.  И как видно по первым результатам такой тип приложения смотрится намного выгоднее простого стандартного ASP.NET MVC Приложения. А все потому, что навигация по страницам приложения практически мгновенная — представления грузятся один раз и переключение между ними не требует обращений к серверу (представления кешируются, так как являются статическим HTML кодом). На страницу нужно подгружать только данные, которые так же можно закешировать на стороне клиента, если создать достаточно «умное» клиентское приложение.

Читать далее

Single Page Application : ASP.NET MVC .NET Core + Angular 4. Часть 5.

Новая статья после долгого (вынужденного) перерыва. Это будет уже пятой частью в сери статей о создание одностраничного приложения с использованием ASP.NET MVC .NET Core и Angular 4. Следующим логичным шагом в создании приложения будет добавления авторизации пользователей. Но сначало нужно немного обновить проект. Со времени последней публикации прошло несколько месяцев и за это время произошло несолько событий:

  • Вышел релиз PostgreSQL 10 и pgAdmin 4
  • Вышло обновление .NET Core до версии 2.0
  • Обновилась система авторизации ASOS

Таким образом в данной статье я хочу описать подготовительные работы по обновлению проекта:

  • переведу базу данных на PostgreSQL 10
  • приведу имена таблиц и полей в соответствие с философией PostgreSQL
  • добавлю таблицу пользователей
  • обновим проект до версии .NET Core 2.0
  • перепишу код доступа к БД. Избавлюсь от Entity Framework и буду использовать более эффективный npgsql драйвер
  • вынесу код доступа к БД в отдельный проект
  • реализую обьекты для управления пользователями

Это будет подготовительный этап. В следующей части я займусь непосредственно реализацией авторизации:

  • Добавлю поддержку ASOS в проект для авторизации при помощи токенов OpenID / OAuth2
  • Реализую код для авторизации и создания access_token и refresh_token для работы с Web API
  • Реализую страницы авторизации и добавления новго пользователя в Angular 4
  • Изменю структуру проекта, что бы сделать его более завершенным

Как видите, я собираюсь сделать много изменений, и именно поэтому решил разбить статью на две части. Так будет проще воспринимать новую информацию.
Итак, начнем.

Читать далее

Single Page Application : ASP.NET MVC .NET Core + Angular 4. Часть 4.

Вот я добрался и до новой части в цикле статей о SPA на основе Angular 4 и ASP.NET MVC Core. Как и обещал, в этой части будем реализовывать следующие вещи:

  • добавим поддержку небольшой базы данных PostgreSQL
  • добавим новый HTML Tag Helper для отработки ввода данных

Читать далее

Поиск размера различных объектов в базе данных PostgreSQL

Недавно мне нужно было оптимизировать базу данных на портале дл яобработки данных от устройств мониторинговой сети. Данных там очень много, плюс к ним много различной служебной информации сохраняется, так сказать попутно. И база данных растет очень быстро. Было принято решение проанализировать размеры таблиц и интдексов и оптимизировать их (где то убрать ненужные поля, где то уменьшить количество вставок в таблицу и т.д.). Результатом этой работы стал небольшой список SQL запросов для PostgreSQL базы данных, который я хотел бы сохранить для себя, ну и поделиться со всеми, кому они могут понадобиться.

Читать далее