Практически любой .NET разработчик так или иначе использует в своей практике технологию Linq. Linq позволяет писать красивый и лаконичный код для получения объектов из источника данных с возможностью определения критериев получения и/или трансформации запрошенных объектов «на лету». Поддержка Linq присутствует практически во всех популярных ORM-фреймворках, в том числе и в NHibernate. NHibernate предоставляет Linq-провайдер, с помощью которого мы можем написать запрос на этапе разработки (Design-Time), но для того, чтобы составить запрос в runtime, придется повозиться с Reflection. Однако, если возникнет потребность в формировании запроса во внешнем процессе, например, в клиентской части сервиса, то в таком случае Reflection уже не спасет, клиентская часть, как правило, не знает (и не должна ничего знать) про серверный ORM.
Ниже мы разберем как создать API для написания Linq запросов к NHibernate в ситуации, когда запрос пишется в одном процессе, а выполняется в другом. Также, реализуем собственный IQueryProvider, который будет транслировать запросы из приложения-источника в исполняющее приложение.
Читать полностью »
Рубрика «C#» - 112
Client-side Linq to NHibernate
2016-06-07 в 7:09, admin, рубрики: .net, C#, linq, nhibernate, sql, wcf, Программирование, разработка под windowsСобытийная модель на основе async и await
2016-06-03 в 10:04, admin, рубрики: .net, async, C#, параллельное программированиеВ далеком 2012, когда цена на нефть еще была трехзначной, а трава зеленее, майкрософтом был выпущен .NET 4.5, а с ним и конструкция async/await. Про неё написано уже довольно много статей (Async в C#), а большинство разработчиков C# хорошо её изучили. Но все ли варианты использования были рассмотрены, можно ли выжать из await немного больше?
Самым очевидным вариантом использованием этой конструкции является ожидание завершения некой асинхронной операции. Первое, что приходит на ум — это ожидание ввода-вывода. Например, мы послали запрос клиенту и ожидаем ответа, тогда используя await мы сможем продолжить выполнение кода после получения ответа, а сам код при этом будет выглядеть синхронным. Но что если во время ожидания возникнет необходимость прервать выполнение этой операции? Тогда нам придется использовать CancellationToken, причем если таких операций несколько, то токены необходимо будет линковать или использовать один общий токен. При этом причина отмены будет скрыта от кода, использующего этот CancellationToken. Кроме отмены, код должен поддерживать обработку потери соединения, таймаута, возвращаемых ошибок и т.д.
В классическом варианте это выльется в использование CancellationToken для обработки отмены, try catch для обработки разрыва соединения и код анализа возвращенных данных, для оценки результата запроса. Но можно ли уместить всё это в единой парадигме? В этот статье я предлагаю рассмотреть альтернативный подход, основанный на событийной модели с использованием синтаксического сахара async/await.
Читать полностью »
Делаем собственный сервис по определению WHOIS любого домена
2016-06-02 в 16:26, admin, рубрики: .net, C#, whois, автоматизация, доменная зона, доменные имена, домены, открытые данные, разработка под windows, системное программирование, хостинг
Сервис WHOIS – это один из основных инструментов для людей, которые постоянно работают с доменными именами. Он нужен как любому человеку, желающему подобрать себе красивое доменное имя, так и хостинг-провайдеру, который помимо прочих услуг может предоставлять возможность регистрации домена. И те, и другие ищут автоматизации своей работы.
Итак, давайте разберёмся как это работает.
Читать полностью »
Близкая к идеалу адаптация ВКонтакте API для платформы .NET
2016-06-02 в 13:57, admin, рубрики: .net, C#, vk api, wpf, Вконтакте, Вконтакте APIЗдравствуйте, дорогие читатели!
Мало для кого является секретом, что за последние несколько лет одноимённая социальная сеть успела основательно войти людям в привычку и вырасти до масштабов сервиса континентального уровня.
За это время пространство ВКонтакте активно осваивали все, кто увидел там какой-либо потенциал, и сегодня в нём существует множество проектов, нацеленных на аудиторию с различными предпочтениями.
Когда работа с информацией приобретает решающее значение, становится очевидно, что в стремлении к лучшим результатам люди будут нуждаться в новых и не всегда стандартных решениях обработки данных.
Меня зовут Илья Терещук, на сегодняшний день я живу ведением проекта в социальной сети и занимаюсь программированием. Создавая своё первое приложение для работы с API, я столкнулся с немалым количеством нюансов, которые, по всей видимости, дают изрядно поломать голову любому, кто берётся за подобное впервые.
В разработке фундаментального слоя взаимодействия для конкретного интерфейса главной задачей стоит исключить любые "подводные камни" в его функционировании и обеспечить хорошую встраиваемость этого слоя как компонента для любого решения. К слову, методы реализации такой парадигмы называются паттернами, а умение их применять является прерогативой грамотных программистов. Следовательно, данная статья и будет показательным примером того, как внимание к мелочам создаёт качественные решения.
Используем HTML и WebBrowser control в качестве UI для обычных windows-приложений на C#
2016-06-01 в 23:41, admin, рубрики: .net, C#, html, UI, ненормальное программированиеКак известно, контрол WebBrowser это просто обертка над ActiveX компонентом Internet Explorer. Следовательно он предоставляет доступ к полноценному layout-движку со всеми современными плюшками. А раз так, то попробуем (сам не знаю правда зачем) на его основе сделать пользовательский интерфейс для обычного windows-приложения.
Можно, конечно, было бы запустить в этом же процессе мини веб-сервер (на HttpListener например) и ловить запросы через него, но это слишком просто, скучно и неспортивно. Попробуем обойтись без сетевых компонентов, just for fun.
Читать полностью »
DotNext 2016 Piter: Full Stack .NET conference
2016-05-31 в 15:45, admin, рубрики: .net, .net core. asp.net core, ASP, ASP.NET, C#, hardcore, performance, Блог компании JUG.ru Group, конференция, Программирование, разработкаДо DotNext 2016 Piter (3 июня, гостиница Park Inn Пулковская) осталось всего ничего – каких-то пара дней. А вчера, изучая программу на сайте конференции, я поймал себя на мысли, что подробное изучение всех докладов, спикеров и хабропостов отняло у меня больше 2 часов чистого времени!
Поэтому в срочном порядке было решено сделать практический гайд-карту программы DotNext, который вы сейчас и читаете: мы собрали все доклады, разложили их по полочкам и описали так, чтобы получилась единая и цельная картина. Получилось следующее:
- 4 доклада по ASP.NET Core;
- 3 – про технику про инструменты разработки;
- Доклад про кроссплатформенность .NET.
Но ведь DotNext это не обсуждение тулзов и анонсов платформ, но и адский хардкор, разве нет? Конечно, и этого у нас полно: перфоманс, кодогенерация, модели памяти, математика и многое другое. Ну как оно?
Win-Win: Спикеры DotNext на встрече SPB .NET Community и наоборот
2016-05-31 в 9:07, admin, рубрики: .net, C#, CoreCLR, dotnext, gc, meetup, performance, spbdotnet, Блог компании JUG.ru GroupВ июне исполняется год нашему сообществу .NET программистов SPB .NET Community. Я не буду подводить итоги и рассказывать, что было, так как… не до этого, заняты подготовкой новой встречи, двенадцатой! В четверг, 2 июня у нас приглашенные гости, ведущие докладчики конференции DotNext: гуру .NET Performance Sasha Goldshtein и активный участник .NET User Group Minsk Сергей Щегрикович. Темы, как мы любим: производительность, memory traffic, отладка, CoreCLR, внутренности, расчленёнка…
Сравнение конфигураций Dependency Injection фреймворков
2016-05-31 в 5:48, admin, рубрики: .net, autofac, C#, castle.windsor, comparison, dependency injection, ioc, Ninject, simple injector, structuremap, unity-containerМного раз я спрашивал себя, что какой IoC контейнер подойдет для того или иного проекта. Их производительность — это только одна сторона медали. Полное сравнение производительности можно найти здесь. Другая сторона медали — простота и скорость обучения. Так что я решил сравнить несколько контейнеров с этой точки зрения и взял Autofac, Simple Injector, StructureMap, Ninject, Unity, Castle Windsor. На мой взгляд, это наиболее популярные IoC контейнеры. Вы можете найти некоторые из них в списке 20 лучших пакетов NuGet и также я добавил другие по своим предпочтениям. Лично мне очень нравится Autofac и во время работы над этой статьей я еще больше утвердился, что это лучший выбор в большинстве случаев.
Здесь описываются основы IoC контейнеров, таких как конфигурация и регистрации компонентов. Есть мысль так же провести сравнение управления lifetime scope и продвинутых фитч. Примеры кода можно найти в репозитории LifetimeScopesExamples GitHub.
ASP.NET Identity Caché Provider — работаем с Identity через InterSystems Caché
2016-05-30 в 12:44, admin, рубрики: .net, ASP.NET Identity, C#, cache, databases, intersystems, Блог компании InterSystemsС появлением технологии ASP.NET Identity от Microsoft .NET разработчики стали все чаще использовать ее при создании веб-приложений. Для краткого экскурса в технологию предлагаем прочитать статью. Эта технология присутствует в стандартном шаблоне проекта и позволяет использовать стандартную реализацию функциональности авторизации и аутентификации пользователя.
«Из коробки» провайдером данных для ASP.NET Identity является MSSQL, но поскольку система авторизация Identity может взаимодействовать с любой другой реляционной СУБД, мы исследовали и реализовали эту возможность для InterSystems Caché.
Читать полностью »
[PF] Печать PDF под .NET, векторный подход, практика
2016-05-30 в 7:14, admin, рубрики: .net development, C#, c#.net, ghostscript, pcl, PDF, pdf-принтер, vector magic, Алгоритмы, Блог компании Тинькофф Банк, печать документов, ПрограммированиеКак и обещал, продолжаю тему(раз, два) управляемой печати PDF из под .NET в векторном формате. О теоретических аспектах работы с PCL я рассказал в предыдущей статье, настало время разобрать программу для вывода на принтер PDF файла в векторе. Наше приложение будет полезно, например, когда нужно распечатать пачку многостраничных бланков или анкет на бумаге разных цветов и разной плотности. Если мы научимся управлять лотками принтера, избавим себя от ручного прокладывания страниц ;) В шаблоне будет указан номер лотка, из которого принтер заберет бумагу для текущей страницы. Причем шаблон будет применяться к документу циклически: если в документе 32 страницы, а в шаблоне 4, то шаблон повторится 8 раз для Simplex режима и 4 раза для Duplex.Читать полностью »