Вычисление MD5 хэша в .NET

Во время написания некого проекта на ASP.NET, мне понадобилось подключить к своему веб-сайту виджет авторизации ВКонтакте. Так как с JavaScript я вообще не знаком, а как таковых прямых примеров на подключение OpenAPI к веб-сайту я не нашел, возможно плохо искал, но скорее не было желания использовать чужую библиотеку, хотелось понять и изучить само подключение OpenAPI к моему веб-сайту. Я начал с тривиального, то-есть подключение виджета авторизации. Изучив небольшую документацию на сайте, принялся за дело.

Итак, я узнал, что last_name и прочие параметры передаются путем запросов. Собственно для проверки вошел ли пользователь используется зашифрованный MD5 хэш ID приложения, ID пользователя, и Secret key приложения. Отсюда логично то, что нужно путем обычных действий в C#, то-есть декодированием данного набора символов кодировкой UTF-8, вычислением хэша массива байтов и кодированием той-же кодировкой в string, получить зашифрованную строку. Но не тут то было…

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

Умный TextBlock

Недавно появилась необходимость отображения текста в определенной ограниченной области с переменным размером шрифта: таким образом, чтобы текст полностью заполнял отведенную ему область.
image

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

Еще один способ реализации Single Instance Application в .NET

Итак, возникла такая задача. На WPF пишется небольшое приложение (под .NET Framework 4 с рассчетом на пользователя Windows 7, а именно меня), а, заодно, и изучается сама технология WPF. Требуется не допускать запуска второго экземпляра приложения из-под того же пользователя.

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

.Net Проблемы миграции х86 проектов на х64 OS и способы их решения

Проблема 1: «Microsoft Silverlight cannot be used in browser running in 64bit mode»

С данной проблемой чаще всего можно столкнуться в WinForms приложении, содержащем в себе WebBrowser Control. При попытке отобразить в этом контроле Silverlight страницу, в Windows 7 x64 пользователь вместо страницы увидит указанную ошибку, в то время как в любой x86 операционной системе это же приложение будет работать идеально.

В чем причина? А причина элементарна — Microsoft Silverlight не поддерживает работу в x64bit процессе. Если ваше приложение скомпилировано под AnyCPU target platform, оно будет запушено как x64 приложение на х64 OS и Silverlight, способный работать только в 32-bit процессе, просто не будет работать.

Решение: Как Вы вероятно уже догадались, единственный вариант решение этой проблемы на текущий момент – это компилировать приложение по x86 платформу принудительно.

Проблема 2: В x64 OS при изменении размера окна приложения не перерисовываются и/или не меняют свой размер некоторые вложенный контролы, хотя под x86 OS такой проблемы не наблюдалось.

Источник этой проблемы детально описан у Микрософт в этой статье:
Deeply nested controls do not resize properly when their parents are resized

В двух словах суть проблемы с следующем: при изменении размера формы, она вызывает SetWindowPos чтобы изменить размер своим дочерним контролов. Каждый дочерний контрол получает сообщение WM_WINDOWPOSCHANGED, в результате которого вызывает SetWindowPos уже для своих дочерних контролов следующего уровня. Каждый вызов SetWindowPos выполняется в режиме ядра, что в конечном счете приводит к переполнению стека ядра (kernel stack overflow) которое перехватывается и молча гасится дабы не показывать в результате «синий экран смерти». А как итог, размеры глубоко вложенных контролов остаются не измененными и сами контролы – не перерисованными.

На самом деле это проблема присуща не только x64 OS, но и x86 при достаточном количестве уровней вложенности. Но почему же тогда приложение отлично работает в 32bit OS и отказывается так же исправно работать в 64bit OS? Да все дело в том, что при переходе на 64-bit архитектуру размер указателя вырос с 4 байт до 8 байт. А что стало с размером стека ядра? Догадались? Правильно – он остался точно таким же. Вот и получается, что если для x64 максимальное поддерживаемое число уровней вложенности составляет примерно 20-25, то для x86 архитектуры это число будет в 2 раза выше 40-50.

Решение: Если не считать банального изменения дизайна так, чтобы уменьшить число уровней вложенности, наиболее безболезненное и простое решение будет разорвать в ключевых местах рекурсию вызова OnSizeChanged заменив ее на множественные kernel-to-user mode callbacks:

protected override void OnSizeChanged(EventArgs e) {
 if (Handle != null) { BeginInvoke(new Action(base.OnSizeChanged), e); } 
 }

xaml+VS+Blend — решение всех бед?

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

Читать дальше →
  • avatar
  • 0
  • мне нравится
    0

.Net: События в С#

Введение
Концептуальная роль событий заключается в следующем: Если какой-то объект хочет оповестить других о смене своего состояния, он запускает событие (или сигнал). Это событие может быть отловлено любым количеством объектом. Реакцией на событие, как правило, является вызов метода в отлавливающем объекте.
В языке C# события являются более развитой системой использование групповых делегатов.

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

История написания программки для удаления ненужных файлов

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

Я пользуюсь Windows 7 и Google Chrome. Скачиваю в основном фильмы, но в сети часто встречается еще много чего интересного. Мне удобно когда свежие файлы находятся сразу под рукой на рабочем столе. А дальше полезные распределяю по назначению, остальные — в мусор. Поэтому директорией по умолчанию для загрузки в Chrome указал рабочий стол. Пользусь торрентами и торент файлы безжалостно захламляли рабочий стол, и удалять их вручную не было ни малейшего желания. Решил написать утилитку, которая будет удалять мусор с рабочего стола в фоновом режиме. Сначала реализовал в виде сервиса, но как оказалось с ним есть некоторые сложности при передаче сообщений системе, если он запускается под другим пользователем. Решил что аккуратненькая иконка в трее выглядит веселее и удобнее, поэтому от севиса в последствии отказался.

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

Коммуникационные привязки в Windows Communication Framework (WCF)

Введение


Привязки описывают соглашения между клиентом и сервером о порядке передачи данных по сети. В привязке задается способ транспортировки, кодирование и протоколы, участвующие в коммуникации. WCF с помощью привязок инкапсулирует конфигурацию в различных сценариях коммуникации. Для наиболее распространенных сценариев – Web-служб, служб REST/POX и приложений на основе очередей – имеются уже готовые привязки. Например, привязка basicHttpBinding предназназначена для работы с Web-службами, созданными в ASP.NET или совместимыми со спецификацией WSI Basic Profile 1.1. Привязки ws2007HttpBinding и wsHttpBinding похожи на basicHttpBinding, но поддерживают больше возможностей, в частности надежную доставку и транзакции, а также основаны на более современных стандартах, таких, как WSAddressing. В таблице 1 перечислены 12 привязок, применяемых в разных сценариях коммуникации.
Читать дальше →