Обновить
128.04

C# *

Объектно-ориентированный язык программирования

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

Динамическое создание 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 динамичным. Я думал о написании собственного промежуточного ПО, но это казалось хлопотным занятием с большим количеством кода. Я хотел посмотреть, насколько просто это может быть.


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

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

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

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

Уведомление об изменении общего состояния SharedState в компонентах

Время на прочтение3 мин
Количество просмотров2K
В качестве продолжения к предыдущей статье об общем состоянии для компонентов, дальше развиваю тему и хочу реализовать фичу, которая позволит отлавливать и обрабатывать в каждом компоненте событие по изменению состояния (когда данные в общем состоянии изменяются в каком-то компоненте).

Ссылка на проект

Обычно для того, чтобы отследить изменение данных, в каком то компоненте, создается прямая связь, то есть мы, либо в методе Update проверяем, не изменились ли там данные


Пофреймовая проверка данных через метод Update
Читать дальше →

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

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


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


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

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

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

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

Создаем простой API-шлюз в ASP.NET Core

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

Привет, Хабр! Представляю вашему вниманию перевод статьи "Creating a simple API Gateway in ASP.NET Core".


Время чтения: ~10 минут


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


Диаграма архитектуры микросервиса


Другой жизненно необходимый компонент для работы продукта это API-шлюз — система между приложением и бэкэндом, которая, во-первых, маршрутизирует входящие запросы на соответствующий микросервис, и во-вторых, авторизует пользователя.


Существует много фреймворков которые могут быть использованы для создания API-шлюза, например, Ocelot в .NET core или Netflix Zuul в Java. Тем не менее, в этой статье я опишу процесс создания простого API-шлюза с нуля в .NET Core.

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

DotVVM — Коммуникация между клиентом и сервером

Время на прочтение3 мин
Количество просмотров3K
Это вторая статья из серии посвященная DotVVM. Первая статья была скорее ознакомительной. Я старался на простом примере показать как работать в DotVVM на базовом уровне. Статья, по сути, не затрагивала самого важного: как это работает.

Этому вопросу а также оптимизации трафика посвящена эта статья.
Читать дальше →

Поддержка документации в ASP.NET Web API

Время на прочтение7 мин
Количество просмотров4.5K
Когда вы предоставляете ваш сервис в виде Web API, встает вопрос о том, как проинформировать пользователя о его возможностях, о синтаксисе его запросов и т.п. Обычно вам приходится создавать отдельные Web-страницы, где вы расскрываете эти темы. Но не было бы лучше, если бы сам ваш Web API обеспечивал доступ к своей документации?
Читать дальше →

Как за один день разработать SIEM (систему управления инцидентами информационной безопасности)

Время на прочтение26 мин
Количество просмотров32K
Архитектутра SIEM системы

«Коллеги, напоминаю, в этом квартале запланированы курсы повышения квалификации для партнеров на тему управления информационной безопасностью. Нашему коллективу предлагается подготовить практическое занятие, посвященное вопросам построения SIEM систем!» – после такого предложения начальника возникла пауза во время очередной летучки.

Участники заседания из числа предполагаемых исполнителей понимали, к чему обязывает такое предложение (слава и почет затраты времени, сил, нервов). Но, поскольку проведение исследований решений SIEM (Security Information and Event Management, системы управления инцидентами безопасности) – одно из направлений нашей деятельности, отказываться от предложения не представлялось возможным. Выдохнули и приступили.

После двух месяцев напряженной работы и подготовки окончательной версии занятия мы признались, что провели это время невероятно продуктивно. И даже не предполагали, насколько полезным в профессиональном плане для коллектива окажется ответ на подобный «вызов».

Делимся материалами практикума по разработке собственной SIEM системы за один день с убедительными примерами.

Дисклеймер. Материал — объемный, рассчитанный на полный учебный день занятий в размеренном темпе. Пример — примитивный. Авторы сомневаются в возможности промышленного применения open-source решений SIEM, но вместе с тем считают, что изучение практических примеров позволит лучше разобраться в предметной области.
Читать дальше →

Игра за час или убиваем время в Unity

Время на прочтение2 мин
Количество просмотров29K
Привет, Хабр!

Сегодня вечером у меня появилось свободное время и в процессе бесполезного путешествия по просторам своего ноутбука обнаружил установленную Unity3d, до которой так и не дошли руки.
Ну и решил что-нибудь простое намутить.
Читать дальше →

Простая реализация Token для взаимодействия мобильного приложения с WebAPI

Время на прочтение3 мин
Количество просмотров9.1K
С недавнего времени занялся разработкой мобильных приложений с помощью Xamarin.Forms в связи с производственной так сказать необходимостью. Не буду конечно рассказывать про танцы с бубнами чтобы написать и запустить на эмуляторе приложение «Hello, World!», но главное разработка пошла достаточно плавно.

Благо и понимание задачи было — а именно — взаимодействие мобильного приложения с базой данных внутренней CRM системы в компании, добавить сотрудникам мобильности, но при этом не забывать и о безопасности. Было принято решение создать WebAPI, ибо чтобы работать с уже привычными ASMX веб-сервисами в Xamarin нужно плясать с бубнами.

Как сказал выше, в том числе хотелось сделать «связующее звено» достаточно безопасным, а значит мобильное приложение должно иметь авторизацию (до кучи и удобства с возможностью сохранения авторизации и автоматического входа.

Не хотелось глубоко копаться в реализации WebAPI с авторизацией на уровне Token, а хотелось сделать что-то попроще, тем более пока «гуглил» видел что такого желания у людей с избытком, но все отсылы отвечающих были либо к стандартным механизмам, либо использования каких-нибудь пакетов из NuGet, чего хотелось бы по максимуму избежать.

В базе собственной CRM и так уже есть вся информация для авторизации и городить что-то лишнее тупо не хотелось.

В итоге, после долгих мытарств, поисков и т.п. — думаю у меня получилось достаточно неплохое решение, которым мне и хочется поделится с сообществом.
Читать дальше →

Счетчик копий программы или сбор статистики об использовании

Время на прочтение19 мин
Количество просмотров14K
Некоторое время назад выполнял я заказ для одной конторы. Суть проекта сейчас не важна (это был некий довесок к их корпоративной системе, который они ставили на компы своим клиентам), одним из требований было что бы приложение отправляло отчет об своем использовании. А попросту говоря, ребята хотели знать насколько их программа востребована среди клиентов. И вот на этой волне, возник у меня вопрос — а действительно, написал ты программу, отдал |продал в добрые руки или просто выложил ее в интернет. И что дальше? Сколько реальных пользователей ее увидели?
Читать дальше →

Разработка Microsoft Excel add-in'а с использованием библиотеки Excel-DNA

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

Введение


Представляю вашему вниманию пошаговое руководство по разработке add-in’а для Excel.
Excel-DNA это бесплатная открытая библиотека для создания Excel расширений. Сайт проекта excel-dna.net

На протяжении данного руководства мы разработаем add-in, который позволяет по нажатию кнопки загружать данные со стороннего сайта в текущую страницу. Итак, начнем.
Читать дальше →

Вызов управляемого кода из неуправляемого

Время на прочтение2 мин
Количество просмотров8.6K
image С задачей вызова неуправляемого кода из управляемого мы сталкиваемся довольно часто, и эта задача имеет простое решение в виде одного атрибута [DllImport] и небольшого набора дополнительных правил, которые хорошо изложены в MSDN. Обратная же задача встречается гораздо реже. В данной статье мы и рассмотрим небольшой пример, как это можно сделать. Его не стоит рассматривать как исчерпывающий, скорее лишь, как направление хода мыслей и концепцию. Итак, начнем.
Читать дальше →

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

Ограничение количества выполнений метода в секунду

Время на прочтение2 мин
Количество просмотров11K
Задача: разработать возможность запускать на выполнение заданное количество операций в секунду.

Требования:

  • Решение должно отрабатывать как можно быстрее (иначе в нем теряется смысл)
  • Решение должно быть потокобезопасным

В результате у меня получилась функция (естественно в составе отдельного класса), которая возвращает true либо false (разрешение для выполнения).
Читать дальше →

Интересные вопросы на знание C# и механизмов .NET

Время на прочтение4 мин
Количество просмотров36K
Предлагаю Вам ряд вопросов по C# и .NET в целом, которые могут пригодиться для проведения собеседования или просто помогут лучше понять, как работает платформа .NET. Здесь не будет обычных вопросов о том, чем отличаются ссылочные типы от значимых и тп. Я постарался выбрать самые интересные, над которыми стоит задуматься.
Читать дальше →

Еще про внедрение таймзон в долгоживущий проект

Время на прочтение5 мин
Количество просмотров9.2K
Некоторое время назад начали адаптировать систему под требования нового рынка, где поддержка таймзон обязательна. Начальные изыскания описывал в предыдущей статье. Сейчас подход немного эволюционировал под влиянием реалий. Под катом описание проблем, с которыми пришлось столкнуться в ходе обсуждений, и окончательное решение, которое воплощается в жизнь.
Читать дальше →

Шаблон проектирования «Спецификация» в C#

Время на прочтение7 мин
Количество просмотров47K
«Спецификация» в программировании — это шаблон проектирования, посредством которого представление правил бизнес логики может быть преобразовано в виде цепочки объектов, связанных операциями булевой логики.

Я познакомился с этим термином в процессе чтения DDD Эванса. На Хабре есть статьи с описанием практического применения паттерна и проблем, возникающих в процессе реализации.

Если коротко, основное преимущество от использования «спецификаций» в том, чтобы иметь одно понятное место, в котором сосредоточены все правила фильтрации объектов предметной модели, вместо тысячи размазанных ровным слоем по приложению лямбда-выражений.

Классическая реализация шаблона проектирования выглядит так:

public interface ISpecification
{
    bool IsSatisfiedBy(object candidate);
}

Что с ним не так применительно к C#?


  1. Есть Expression<Func<T, bool>> и Func<T, bool>>, сигнатура которых совпадает с IsSatisfiedBy
  2. Есть Extension-методы. alexanderzaytsev с помощью них делает вот так:

    public class UserQueryExtensions 
    {
      public static IQueryable<User> WhereGroupNameIs(this IQueryable<User> users,
    string name)
      {
          return users.Where(u => u.GroupName == name);
      }
    }
    

  3. А еще можно реализовать вот такую надстройку над LINQ:

    public abstract class Specification<T>
    {
      public bool IsSatisfiedBy(T item)
      {
        return SatisfyingElementsFrom(new[] { item }.AsQueryable()).Any();
      }
    
       public abstract IQueryable<T> SatisfyingElementsFrom(IQueryable<T> candidates);
    }
    

В конечном итоге возникает вопрос: стоит ли в C# пользоваться шаблоном десятилетней давности из мира Java и как его реализовать?

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

Особенности разработки мобильной MMO RTS. Часть 2

Время на прочтение4 мин
Количество просмотров9.7K
Привет! Совсем недавно я начал рассказывать о том, как мы работаем над Stormfall: Rise of Balur и пишем клиентскую часть проекта на Unity. Сегодня мы поговорим о подходе к скинованию, многопоточности, работе с сетью при плохом соединении и кэшировании запросов.


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

ASP.NET Core, Angular 2, SignalR для чайников

Время на прочтение8 мин
Количество просмотров50K
Всем привет! Хочу поделиться своим опытом использования ASP.Net Core и Angular 2 с использованием SignalR.

Будучи программистом 1С, часто приходится решать задачи, которые на 1С решить сложно или невозможно. Очень помогает знание .Net. Но вот, что касается клиентской части сайтов, то здесь много тонкостей (JavaScript, CSS, JQuery итд), которые быстро забываются, если ими не пользоваться.

Angular 2 позволяет значительно упростить создание клиентской части. Так TypeScript значительно ближе к C# (и главное позволяет использовать Руслиш), а с шаблонами несложно разобраться зная Razor и Xaml.

Главное, что вы работаете с данными, по аналогии с WPF. При этом есть куча контролов.

Хочу поделиться с такими же бедолагами как я, или кто только начинает изучение Angular 2, ASP.Net Core, так как потратил значительное время, на поиски материалов для изучения.

Для тренировки на кошках был выбран мой проект 1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp. Исходники Здесь

Пока не вышел. Net Core 1.2 и NetStandard 2, сейчас нет поддержки клиента для SignalR под .Net Core

Итак, начнем. Для работы нам потребуется:

1. ASP.NET Core + Angular 2 шаблон для Visual Studio
2. Руководство по ASP.NET Core
3. Руководство по Angular 2
4. Руководство по TypeScript
5. Компоненты от PrimeNG
6. Компоненты Bootstrap
Читать дальше →

Enum-switch антипаттерн

Время на прочтение6 мин
Количество просмотров48K
В последнее время мне часто встречается в коде один интересный шаблон. Он заключается в том, что для описания небольшого множества объектов создается enum, а потом в разных местах кода значения из перечисления обрабатываются при помощи оператора switch.

Как выглядит реализация данного шаблона, и чем он опасен? Давайте разберемся.
Читать дальше →

Вклад авторов