Комуникликабельность http://heeepi.posterous.com Most recent posts at Комуникликабельность posterous.com Sat, 17 Sep 2011 03:41:00 -0700 Что нового возможно будет в WCF 4.5 http://heeepi.posterous.com/wcf-45 http://heeepi.posterous.com/wcf-45

Как то я успел пропустить такое замечательное событие, как  .NET Framework 4.5 Developer Preview. Лично для меня интересно больше всего - что будет в WCF 4.5. Так как это всего лишь Preview, то расчитывать на фичи сильно не стоит, но все равно приятно.

Как всегда, MS говорит что жить нам будет проще и все усилия кидает на упрощение разработки. Давайте посмотрим что же готовит нам WCF 4.5:

Улучшение поддержки Streamed

Ура! Неужели я наконец то этого дождался. Улучшили потоковую передачу данных. Тут сразу 2 новинки. Во-первых, теперь передача потока действительно будет потоковой и не будет блокировать поток, в случае, если принимающая сторона не принимает потока. Во-вторых, удалили ограничения на буферизацию сообщения, в случае пересылки сообщения от клиента сервису, который располагается на IIS.

Улучшение конфигурирования SSL

Еще раз Урааа! Это второе счастье. Теперь чтобы выставить сервис поверх HTTPS нужно всего лишь настроить IIS под SSL и включить его для виртуальной дирректории.

Генерация плоского WSDL файла.

Третье Ураааа!!! Ликуют все, кто когда либо делал клиентов к WCF сервису на MSSOAP! Теперь не надо будет запариваться над тем, что WSDL файл не подхватывается с сервиса и нужно его выгружать отдельно и удалять там все зависимости, делая один plain файлик описания. Теперь WCF сможет выдавать плоский файл описания.

Поддержка нескольких моделей аутентификации

Четвертое и самое главное УРА !!! IIS давно позволяет настроить аутентификацию сразу по нескольким моделям, однако один endpoint WCF мог работать только с использованием одного способа аутентификации. Теперь, надеюсь, можно будет настроить на один endpoint несколько способов аутентификации.

Конфигурирование сервиса прямо в коде реализации сервиса

Потрясная штука, которую давно хотел. Для того, чтобы понять о чем речь, надо посмотреть примеры кода вот тут. Суть – теперь для того, чтобы сконфигурировать сервис кодом, не нужно подвешивать свои собственные behaviors. Теперь стоит только определить метод Configure в реализации сервиса и сконфигурировать все там. Кроме этого, в этом же методе можно подгрузить ВСЮ конфигурацию из другого конфига.

Кеширование ChannelFactory

ChanelFactory это штука, в которую вынесен определенный слой логики, дающий оверхед. Теперь при использовании автогенерируемого проксика ChanelFactory будет закеширован, чтобы устранить оверхед. А это значит только одно – клиент станет работать быстрее, но возможно будет кушать дополнительную память.

Поддержка WebSockets

Пока не понимаю ликовать или нет, надо попробовать работать. Но думаю что для всех веб-разработчиков это будет приятным изменением. WebSockets это технология, которая предоставляет двунапрвленный канал поверх 80 или 443 порта с производительностью TCP канала. Соответственно добавляется 2 новых типа биндинга: NetHTTPBinding и NetHTTPSBinding.

Упрощение генерации конфигурационных файлов.

Конфиги для WCF всегда были проблемой. Они большие, они тяжелые и главное – новичку в них разобраться бывает просто нереально. В WCF 4 версии упростили конфиги, вынесли дефолтную конфигурацию, но это слабо спасает если разбираться нужно в уже сконфигурированном проекте. Хотя «вхождение» в технологию упростилось.

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

Поддержка принципа разработки «contract-first»

Принцип разработки, при котором первым делом разрабатывается не реализация сервиса, а его контракт и способы взаимодействия с внешним миром.

Упрощение настройки совместимости с ASP.NET

Штука сомнительная и призвана на мой взгляд, упростить жизнь ASP.NET разработчикам, которые добавляют на свои сайта WCF сервисы. В общем, теперь AspNetCompatibilityRequirementsAttribute будет по умолчанию установлен в Allowed.

Изменения в настройках по умолчанию для свойств транспорта

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

Изменения в настройках по умолчанию для XmlDictionaryReaderQuotas

Опять же упрощение конфигурирования.

Проверка конфигурационных файлов при сборке проекта.

При сборке проекта будут проверяться конфигурационные файлы на наличие ошибок, что должно уменьшить количество ошибок после запуска сервиса. Решение для тех, кто еще не научился читать ошибки WCF, в которых все подробно написано. Кроме этого, ко всем элементам конфигурации WCF добавятся подсказки в XML редакторе.

Binary encoder будет поддерживать сжатие

Теперь и для бинарного энкодера можно установить сжатие для экономии (еще большей) трафика.

Поддержка IDN

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

Permalink | Leave a comment  »

]]>
Mon, 29 Aug 2011 05:35:49 -0700 Рекомендации по разработке под WCF от Michele http://heeepi.posterous.com/wcf-michele http://heeepi.posterous.com/wcf-michele

Давненько ничего не выкидывал в блог по WCF. Пора наверстать упущеное.

Некоторые рекомендации от Michele Leroux Bustamante по разработке WCF сервисов в моем вольном переводе. Оригинал записи тут.

·         SOA

o   SOA хорошая штука, сервисы хороши для повторного использования, однако не стоит перебарщивать.

o   Попробуйте создать 2-3 при простом обращении к сервису.

·         Addressing

o   Никогда не зашивайте в коде базовый адрес или адрес endpoint’а.

o   Задавайте базовый адрес в конфигурации.

o   Будет еще лучше, если вы будете использовать runtime конфигурацию для упрощения управления конфигурацией веб-фермы (необходимо дописывать свой код).

·         Хостинг

o   Используйте хостинг в консольном приложении для начального тестирования, если конечно хостинг на IIS\WAS не доступен локально.

o   Всегда тестируйте сервис на реальном хостинге.

o   Попробуйте использовать WAS с AppFabric если это возможно.

o   Используйте AppFabric для автостарта и визуализации ошибок (предпочтительно использовать свою систему диагностики для централизации предупреждений, исключений, отладочной информации и трейсов).

o   Служба Windows удобна в случае неизвестной конфигурации при развертывании.

o   Оператор using

§  Нормально для тестовых хостов (например консольного), когда при закрытии уничтожается домен приложения.

§  Не круто для остальных хостов (cлужбы Windows, рабочей роли, клиента windows), где вы должны разделять вызов Close() в обычном случае и Abort() при наличии исключений, чтобы нормально очистить ресурсы.

§  Никогда не используйте using для проксиков.

o   Типично использовать свой хост для настройки общих behavior и инициализации endpoint’ов

§  Требуется ServiceHostFactory для endpoint’ов на IIS/WAS.

·         Bindings

o   Вы всегда будете настраивать стандартные binding’и

§  Ограничения на размер сообщения и чтения из пакета.

§  Безопасность

o   Часто требуется <customBinding>.

§  Для настройки специальных возможностей, которые не предоставляют стандартные binding’и.

o   Сначала завершите разработку общего дизайна системы, потом устанавливайте шаблон binging’а.

§  Включение модели безопасности.

§  Вы, возможно, придете к 2-3 binding’ам, которые будут использованы клиентами/сервисом и другими слоями.

§  Оберните их в повторно используемые типы binding’ов, чтобы вызывать в runtime или сконфигурируйте с помощью своей секции конфигурации.

o   Создание разделяемого кода между клиентом и сервисом (если такое возможно).

§  Клиентская версия может незначительно отличаться.

·         Endpoints

o   Храните требования enpoint’а в разделяемом коде между клиентом и сервисом, если он у вас есть с обеих сторон.

§  Динамические аспекты, такие как базовый адрес придет из соответствующих конфигурационных файлов.

o   Инициализируйте endpoint’ы программно (свой  ServiceHost и код для инициализации прокси).

§  Хорошо, при использовании веб-ферм. Уменьшает затраты на обновление множества серверов.

§  Не требуется для Windows Azure? Но все равно полезен.

·         Proxies (клиентские прокси-классы)

o   Используйте генерацию прокси классов только для тестирования или клиентов, которые не распостраняют свои компоненты.

o   Создайте отдельную разделяемую библиотеку контрактов (контракты сервисов, сообщений, исключений) и сущностей (контракт данных, код собственной сериализации).

o   Всегда вызывайте Close() явно и Abort() в случае исключений.

o   Желательно не использовать ClientBase<T>, больше контроля наз каналом и фабрикой каналов.

§  Используйте свой базовый класс, например WCF Proxy Generator (http://wcfproxygenerator.codeplex.com/)

§  Примечание: обновленный экземпляр будет размещен на этой неделе.

Permalink | Leave a comment  »

]]>
Mon, 08 Aug 2011 00:31:25 -0700 Стоимость найма http://heeepi.posterous.com/64471431 http://heeepi.posterous.com/64471431
Замечательная статья о найме и удержании сотрудников.

Из раза в раз я видел один и тот же процесс, связанный с увольнением и наймом: человек уходит, зачастую из-за достаточно небольшой суммы, которую ему отказываются давать, заодно еще пытаясь промотивировать его остаться высказываниями в духе «ты этих денег не стоишь», «таких зарплат на рынке сейчас нет» и т. д. Проблема в том, что в подавляющем большинстве случаев экономии для компании в конечном итоге не получается.
В этом играют роль несколько моментов: стоимость найма, стоимость обучения, снижение производительности, риски, связанные с новым сотрудником, зарплата.
Во-первых, практически всегда платить в конечном итоге новому сотруднику приходится столько же, сколько просил ушедший. Это откровение обычно шокирует: мы же в прошлый раз нанимали человека на эту позицию за гораздо меньшие деньги!
Кроме того почему-то практически никто и никогда не считает стоимость найма и обучения. Нанимая программистов к себе в команду, я проводил минимум 6-8 собеседований с кандидатами. При этом на собеседовании присутствую не только я, но и hr, а на «втором круге» еще и руководитель группы, куда должен попасть человек (да, у нас была странная ситуация, когда фактически второе и первое собеседование были поменяны местами). Учтите при этом, что собеседования с хорошим кандидатом получаются долгими и выматывающими, каждое это минимум 3-4 человеко-часа далеко не самых низкооплачиваемых сотрудников. Добавьте к этому время на работу с резюме, переговоры с кандидатами, внутренние согласования, и получится, что найм одного кандидата стоит в среднем 2 человеко-недели вовлеченных в этот процесс. В рубли, думается, каждый пересчитает сам.
Печально, но расходы на этом не заканчиваются: человека надо учить, учить долго и внимательно. В зависимости от специфики и обучаемости уходит на это от полугода до года (да, как-то сложилось, что я работал в достаточно специфичной области, так что на рынке просто не было готовых специалистов, которых можно было бы сразу выпустить в бой). Через полгода на человека уже тратится времени меньше, чем он экономит, через год следить за ним постоянно уже не нужно, да и разжевывать задачи излишне: навыков и опыта ему хватает, чтобы самому разобраться, что к чему. Таким образом, всё время обучения, выплачивая полноценную зарплату, мы фактически спонсируем обучение человека.
При этом не надо забывать, что в любом случае найм нового человека – риск. Пройдет ли он испытательный срок, впишется ли в команду, насколько точно его удалось оценить, не уйдет ли он через пол года... заранее сказать очень тяжело, если вообще возможно. С учетом вышеприведенных факторов получается, что нанимать человека меньше, чем на два года просто экономически невыгодно, а тех, кого уже выучили, недо держать... Понятно, вот только редко так делается.

Оригинал статьи находится здесь.
Репост на itblogs. Думаю там обсуждение будет активней.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1251196/41367_100000114540637_5701_n.jpg http://posterous.com/users/5erAlHrZ4FJ7 Posazhennikov Andrey heeepi Posazhennikov Andrey
Mon, 01 Aug 2011 12:01:00 -0700 Untitled http://heeepi.posterous.com/63440803 http://heeepi.posterous.com/63440803

По тесту Тест Айзенка на интеллект (IQ), 40 вопросов на сайте Психологические тесты у меня следующие результаты:

Правильных ответов - 30 из 40. Коэффициент интеллекта - 135. Уровень Вашего интеллекта находится выше среднего уровня. Поздравляем!!! Или Вы сейчас занимаете в жизни хорошую позицию или у Вас хорошие перспективы! Согласно исследованиям, таким уровнем интеллекта обладает небольшая часть населения, что можно наблюдать ниже.

Вот как распределяются значения IQ у всех людей:

Пройдите и вы тесты

Развлекаловка конечно, но приятно.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1251196/41367_100000114540637_5701_n.jpg http://posterous.com/users/5erAlHrZ4FJ7 Posazhennikov Andrey heeepi Posazhennikov Andrey
Tue, 19 Jul 2011 05:04:00 -0700 Заглядываем сайту под капот http://heeepi.posterous.com/61636871 http://heeepi.posterous.com/61636871 На хабре промелькнула ссылка на очень любопытный ресурс, который по косвенным и не только признакам определяет какие технологии использует сайт.
Про сайты билайна и МТС он говорит что они хостятся на IIS и крутятся поверх ASP.NET, хотя руками я viewstate в коде странички вроде бы не нашел. А сайт мегафона - на nginx (подозреваю что на пхп).
В общем то ресурс выдает кучу инфы, которая будет полезна разработчикам. 
Кроме этого, вспоминается ресурс, который умеет распознавать популярные CMS движки. Правда про сайты мобильных операторов он мало что говорит, но остальное угадывает достаточно неплохо.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1251196/41367_100000114540637_5701_n.jpg http://posterous.com/users/5erAlHrZ4FJ7 Posazhennikov Andrey heeepi Posazhennikov Andrey
Thu, 12 May 2011 06:10:13 -0700 dotPeek похоже "жульничает" http://heeepi.posterous.com/dotpeek http://heeepi.posterous.com/dotpeek

Сегодня вся моя лента гугларидера мельтешит сообщениями о том, что вышел dotPeek. Скачал его, установил и запустил. И очень уж меня поразило что код, который показал мне этот инструмент был до жути похож на мой. Причем похож до последнего пробела, все комментарии были на месте (при компиляции все комментарии, и тем более пробелы игнорируются).

Тогда закрались в мою голову подозрения о том, что тулза вовсе не дезасемблирует код, а просто находит по атрибуту CodeBase сборки файлик, где лежат исходники и открывает его. Чтобы не быть голословным – открываю сборку в dotPeek, меняю файлик без перекомпиляции и получаю вот такую картину:

Image001

Отсюда вывод – будьте осторожны, когда будете применять тулзу чтобы узнать, актуален ли код сборки.

UPD:

Нашел в опциях интересную галочку

Image002

Она как раз и определяет, будет ли использоваться для отображения кода информация из pdb файликов.

Permalink | Leave a comment  »

]]>
Fri, 15 Apr 2011 04:31:50 -0700 Бажная терминология http://heeepi.posterous.com/49655419 http://heeepi.posterous.com/49655419

Image001
Гейзенбаг (англ. Heisenbug) — термин, используемый в программировании для описания программной ошибки, которая исчезает или меняет свои свойства при попытке её обнаружения. Примером могут являться ошибки, которые проявляются в окончательном варианте программы (релизе), однако не видны в режиме отладки, или ошибки синхронизации в многопоточном приложении. Гейзенбаги очень сложно искать, поскольку они проявляются в зависимости от случайных факторов и воспроизводятся нестабильно (свою роль играет и сложность анализа состояния многопоточной системы). Поэтому их стараются отсечь еще на этапе проектирования, продумывая процедуры синхронизации.

Борбаг (англ. Bohr bug) — термин, используемый в программировании для описания программной ошибки, которая, в противоположность гейзенбагу, не исчезает и не меняет своих свойств при попытке её обнаружения. Это слово, в отличие от слова «баг», в русском языке практически не используется. Близкий по значению русскоязычный аналог — «стабильный» или «устойчивый» баг.

Мандельбаг (англ. Mandelbug) — термин, используемый в программировании для описания программной ошибки, чьё поведение столь сложно, что выглядит хаотичным. Это также подразумевает, что говорящий полагает, что это скорее борбаг, чем гейзенбаг.

Шрёдинбаг (англ. Schroedinbug) — термин, используемый в программировании для описания программной ошибки, которая никак не проявляет себя, однако внезапно возникает, если кто-то наткнётся на неё в исходном коде или попытается использовать программу в необычных условиях и осозна́ет, что система вообще не могла работать при наличии такой ошибки. После этого программа перестаёт работать вообще до тех пор, пока ошибка не будет исправлена. Хотя это звучит невероятно, некоторые программы содержат в себе такие ошибки.

Баги фазы луны

Термин «фаза луны» зачастую возникает, как понятие о глупом параметре, от которого может зависит баг, после того, как все утомились искать истинные причины. Jargon File отмечает два редких случая, в которых проблемы с обработкой данных действительно вызваны фазами луны.

Статистические баги

Статистические баги можно отловить только при многократном запуске фрагмента кода. Обычно эти ошибки появляются при создании случайных или псевдослучайных результатов. Например, программа, равномерно распределяющая точки по поверхности, скажем, сферы, в результате демонстрирует, что в нижнем полушарии значительно больше точек, чем в верхнем. Пошаговое исполнение создания одной точки совершенно не может пролить свет на происхождение ошибки, потому что невозможно назвать каждый отдельный результат неверным — в конце концов, он же должен быть случайным! Проблема становится понятной только при создании множества точек. Стандартные приемы отладки, вроде проверки начальных и конечных условий, тоже мало чем помогут. Похожие пробемы часто случаются в численных методах, где каждая конкретная операция точна в пределах выбранной погрешности, но после большого числа итераций накапливаются ошибки, особенно при наличии статистического смещения.

Альфа-баг

Термин альфа-баг происходит от исторического феномена «ошибок железа», вызванных излучением альфа-частиц. Эти частицы, появляющиеся случайным образом, могут повлиять на электроны в RAM и превратить 0 в 1 или наоборот. То есть термин используется для описания типа ошибок, продемонстрировавших неверный результат, но анализ кода говорит, что баг невозможен. Таким образом, единственный вариант разгадки — это альфа-частицы, повлиявшие на электрон. Обычная причина таких багов — ошибки билда или сборки, или какой-то необычный дефект памяти.

Permalink | Leave a comment  »

]]>
Wed, 09 Mar 2011 23:51:24 -0800 SOLID демотивация http://heeepi.posterous.com/solid http://heeepi.posterous.com/solid

Нашел классные демотиваторы SOLID принципов.

Image001

Принцип единственности ответственности - На каждый объект должна быть возложена одна единственная ответственность.

Image002

Принцип открытости\закрытости - Программные сущности должны быть открыты для расширения, но закрыты для изменения.

Image003

Принцип подстановки Лисков - Объекты в программе могут быть заменены их наследниками без изменения свойств программы

Image004

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

Image005

Принцип инверсии зависимостей - Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Image006

Permalink | Leave a comment  »

]]>
Sun, 23 Jan 2011 12:53:27 -0800 Роман об управлении проектами. http://heeepi.posterous.com/40735767 http://heeepi.posterous.com/40735767

На одном дыхании прочитал «Deadline. Роман об управлении проектами» Тома ДеМарко. Читается легко и непринужденно. Полезно разнообразить техническую литературу и блоги такими книгами. По ходу чтения ловил себя на мысли что некоторые моменты уже подмечал в текущей работе. Другие были достаточно новы. В общем, чтение зря явно не прошло.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1251196/41367_100000114540637_5701_n.jpg http://posterous.com/users/5erAlHrZ4FJ7 Posazhennikov Andrey heeepi Posazhennikov Andrey
Sat, 22 Jan 2011 11:38:01 -0800 Игрушка с генетическим алгоритмом http://heeepi.posterous.com/40641251 http://heeepi.posterous.com/40641251

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

Для 34 поколения большинство вариантов уже вполне приличненько ездят. Проблема пока только в том, чтобы взбираться в большие крутые горки. Видимо разработчик не предусмотрел что есть вообще вариант забраться так далеко.

До правдоподобности игрушке конечно далековато, но все равно прикольно и симпотично.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1251196/41367_100000114540637_5701_n.jpg http://posterous.com/users/5erAlHrZ4FJ7 Posazhennikov Andrey heeepi Posazhennikov Andrey
Sun, 12 Dec 2010 12:59:51 -0800 Сводки с полей... http://heeepi.posterous.com/36157128 http://heeepi.posterous.com/36157128

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

Номер раз. Съездил в столицу нашей славной родины на одно из самых значимых событий в области ИТ - Платформу  2011. Ощущения на «горячую голову» высказывать не стал, а теперь уже достаточно поздно о них говорить. Может еще выложу материал, только скорей свое видение, а не отчет о конференции.

Номер два. Сдал на этой же самой платформе экзамен на статус MCTS по WCF 4. Тут интересней, поскольку к экзамену практически не готовился и сдавал его по принципу «авось пронесет». Чувствую что повезло только раз, так что к следующим буду готовиться основательно.

Номер три. Читаю «Чистый код» Роберта Мартина (спасибо коллеге за бумажный вариант). Постигаю умные мысли, ругаюсь, протестую, в общем пропускаю текст сквозь призму собственного сознания.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1251196/41367_100000114540637_5701_n.jpg http://posterous.com/users/5erAlHrZ4FJ7 Posazhennikov Andrey heeepi Posazhennikov Andrey
Tue, 09 Nov 2010 03:21:20 -0800 Расширения для chrome http://heeepi.posterous.com/chrome http://heeepi.posterous.com/chrome

Когда Chrome только появился, и поразил меня своей скоростью, я как то не задумывался о том, нужны ли мне расширения. Браузер меня полностью устраивал (ну за исключением того, что я не мог его поставить через проксю). Со временем ситуация не изменилась, браузер меня полностью устраивает. Поэтому собственно я не понимаю как меня занесло на страничку с расширениями. Последний раз  заходил туда наверное с год назад. Даже устанавливать тогда расширения было достаточно непросто.

Сейчас, зайдя в галерею, удивился обилию расширений. Сразу же поставил себе несколько (не буду говорить какие, дабы лишний раз не рекламировать, если хотите знать – спрашивайте лично). Что меня поразило, что chrome стал очень хорошо поддерживать расширения. Это касается и их установки и их работы. В принципе, я покрыл несколько своих потребностей, которые были у меня на работе, например, уведомлялку о почте на Gmail или отображение RSS лент. Помимо этого, нашел плагин, который хотел было уже писать сам – iReader (черт, все таки получилась реклама), который для некоторых статей, блогов и прочего может отображать основную статью крупно, без всякой рекламы и т.д. (привет версиям для печати) читать такую статью становится невероятно приятно.

Permalink | Leave a comment  »

]]>
Mon, 01 Nov 2010 03:08:24 -0700 Примеры использования технологий MS http://heeepi.posterous.com/ms http://heeepi.posterous.com/ms

В блоге J.D. Meier's Blog появились коллекции примеров кода  а также сценариев применения для различных технологий MS: ADO.NET, ASP.NET, Silverlight, WCF, Windows Azure, Windows Phone. Примеры кода ссылаются на MSDN. Очень удобная штука, если нужно быстро применить какой то типовой сценарий использования технологии, да и выбрать технологию по области ее применения, а не как обычно «да в принципе подойдет».

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

Permalink | Leave a comment  »

]]>
Thu, 21 Oct 2010 04:14:38 -0700 WCF и Streamed http://heeepi.posterous.com/wcf-streamed http://heeepi.posterous.com/wcf-streamed

Image001
Прихожу постепенно к мысли, что WCF просто напросто не предназначен для того, чтобы передавать большие куски данных. А Streamed, который в нем реализован – это просто костыль, который покрывает часть задач, но не ложится в общую идею WCF. Вообще, иногда складывается впечатление, что в WCF все построено по «кусочному принципу». Функционал реализован мелкими кусками, как будто разработчики пытались «растянуть» архитектуру на как можно больший пласт задач, а она (архитектура) в силу технических ограничений никак не позволяла это сделать. Вот пример, того, что WCF не покрывает ряд задач аутентификации при Streamed режиме. Я кстати об этом же писал недавно.

Какие варианты потокового доступа к данным и раздачи контента есть еще?..

Permalink | Leave a comment  »

]]>
Wed, 20 Oct 2010 09:27:38 -0700 Прикольные 404 страницы http://heeepi.posterous.com/404 http://heeepi.posterous.com/404

Сегодня случайно ткнул куда то не туда, и нарвался на вот такую веселую 404 страничку.

Image001

Сразу вспомнил 404 страницу с каким то скриптом, который печатал фразы. Создавалось впечатление что веб-сервер разговаривает с тобой. Кто еще помнит прикольные 404 ошибки?

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1251196/41367_100000114540637_5701_n.jpg http://posterous.com/users/5erAlHrZ4FJ7 Posazhennikov Andrey heeepi Posazhennikov Andrey
Sun, 17 Oct 2010 10:17:20 -0700 Ищем ошибки WCF сервиса http://heeepi.posterous.com/wcf-5 http://heeepi.posterous.com/wcf-5

Последнее время стал отслеживать всякие форумы и другие хранилища знаний в области WCF, вроде такой http://www.gotdotnet.ru/forums/19/. Удивился тому, что люди просто напросто не знают как выяснить какая ошибка мешает работе WCF сервиса. Причем проблема скорей не в том, что люди не хотят выяснить ошибку, они просто не знают как это сделать. Поэтому сейчас я буду играть в детектива, говорить «элементарно, Ватсон», пуская круги дыма из трубки … В общем сейчас расскажу простые вещи, которые можно сделать, чтобы выяснить в чем ошибка.

Включаем отображение ошибок для IIS

Image001

Для asp.net разработчиков, да и для всех более менее адекватных разработчиков дело привычное и вроде бы понятно что делать – включить отображение ошибок. Значит добавляем в web.config следующие строчки:

<customErrors mode="RemoteOnly" />

Или

<customErrors mode="Off" />

И сразу все становится понятно:

Image002

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

Включаем трассировку WCF

Подробней о трассировке WCF можете посмотреть тут. Как правило, долго сидеть с конфигураций не хочется. Прописывать здоровый кусок конфига дело неблагодарное. Благо, есть такая интереная утилитка, как WCF Service Configuration Editor. Вызывается она либо из меню Tools студии, либо из контекстного меню Solution Explorer на конфиге. Утилитка работает и вне контекста студии, так что можно использовать и там, где установить студию нельзя. Нас в данной утилите интересует раздел Diagnostics и его подраздел - Tracing.

Image003

Нас в большинстве случаев интересует две настройки:

1.       Непосредственно включение Tracing.

2.       Log file – файл, куда будет писаться лог.

Файлик svclog, который будет записан в результате работы сервиса содержит детальную информацию о работе сервиса. При этом, его можно открыть, используя достаточно удобный просмотрщик (регистрируется по умолчанию для расширения svclog).

Image004

Для файлов трейса есть интересная особенность, они находятся в монопольном доступе у службы, поэтому прежде, чем их просматривать с помощью утилиты нужно закрыть хост сервиса. В случае с IIS – перезапустить группу приложений, что в некоторых случаях невозможно.

Отладка

Если перечисленные выше простые способы не помогают, приходится использовать тяжелую артиллерию, в данном случае – отладку. Однако и она не всегда помогает. Пример тому – ошибка в недрах WCF, когда просто напросто невозможно подхватить ошибку отладчиком. Такое случается как правило, когда переписываются стандартная инфраструктура WCF, как то свой сериализатор, или система аутентификации. В данных случаях бывает полезным включение трейсов.

В итоге

Приведенные способы выяснения причины неполадки вашего сервиса прекрасно сочетаются друг с другом и могут быть использованы совместено. Все зависит от их разумного использования.

Удачной отладки!!! ;)

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1251196/41367_100000114540637_5701_n.jpg http://posterous.com/users/5erAlHrZ4FJ7 Posazhennikov Andrey heeepi Posazhennikov Andrey
Sun, 10 Oct 2010 01:32:00 -0700 Windows Live Essentials 2011 http://heeepi.posterous.com/windows-live-essentials-2011 http://heeepi.posterous.com/windows-live-essentials-2011

Image001
Попробовал поставить Windows Live Essentials. Изменений нашел достаточно немного.

Что я увидел после установки:

1.       Messenger научился работать с Facebook и другими социалками (Linked In и т.д.).

2.       Добавили SkyDrive, вроде раньше не было в базовом пакете.

3.       Writer получил наконец то Ribbon, стало красиво и функционально.

4.       Writer нормально без проблем из коробки настраивается на Wordpress блог.

В итоге, не нашел причин, чтобы переходить на использование Windows Live.

1.       Writer я давно и успешно заменил постингом по почте. Писать как в outlook, так и в writer одинаково.

2.       Пока Live Mail не научится работать с Mobile Center для синхронизации календаря, задач и почты переходить на него для меня бессмысленно.

3.       Переходить на альбомы смысла нет, поскольку Picassa покрывает все мои необходимости.

4.       Остальные приложения пакета для мне пока что не нужны.

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

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1251196/41367_100000114540637_5701_n.jpg http://posterous.com/users/5erAlHrZ4FJ7 Posazhennikov Andrey heeepi Posazhennikov Andrey
Wed, 06 Oct 2010 05:11:47 -0700 WCF transfer large DataSet or DataTable - Part 2 http://heeepi.posterous.com/wcf-transfer-large-dataset-or-datatable-part http://heeepi.posterous.com/wcf-transfer-large-dataset-or-datatable-part

Продолжение размышлений, которые я начал в прошлой статье WCF transfer large DataSet or DataTable.

Начал реализовывать свою версию chunked коллекции. Вот на какие вопросы сразу же наткнулся:

1.       Интероперабельность. Написание клиентов для не WCF платформы, или нового WCF клиента с нуля становится нетривиальной задачкой без кода непосредственно подгружающего данные порциями.

2.       Серверная логика. Если на сервере крутится 2 независимых сервиса, то для произвольных данных нужно либо уметь выбирать данные порциями, либо сохранять /кешировать результат запроса, для того, чтобы не вытаскивать кучу раз кучу данных (а именно в ситуации с кучей данных нужны такие извращения). Да и хранение такого количества данных накладно.

3.       Клиентская логика. Коллекцию нужно уметь сливать. Для примера: я гружу коллекцию в трех потоках 1-100 записи, 100-200 записи и 200-300 записи. Первым отрабатывает поток, который отдаст 100-200 записей, соотвественно мне как то надо при получение остальных порций данных слить все в одну коллекцию. При рассмотрении произвольных данных ситуация ухудшается.

4.       Идентификация. Нужно как то водить дополнительный уровень идентификации, для того, чтобы знать к какому объекту мы хотим обращаться.

Попробую все же добить эти вопросы и написать нормальную реализацию для коллекций. На 1 вопрос придется видимо просто забить, тут ничего не поделаешь, идеологически не прокатит. Вопрос 2 и 4 оставлю видимо на усмотрение разработчика сервиса, поскольку большие зависимости от того, какие передаются данные.

Вообще странно что в WCF такие штуки не предусмотрены из коробки, потому что на канальном уровне это делается гораздо проще.

Permalink | Leave a comment  »

]]>
Tue, 05 Oct 2010 05:36:33 -0700 Порой версия для печати лучше оригинальной http://heeepi.posterous.com/29725982 http://heeepi.posterous.com/29725982

Сравните две версии. Оригинальная версия на сайте. Ее версия на том же сайте для печати.

Вот тот же пример второй части той же статьи, только ресурс почему то оказался другой. Оригинальная версии. Версия для печати.

Статьи классные, но не прет меня читать тонкую полоску посреди экрана, окруженную баннерами. Скорей всего это конечно кривость дизайна сайта, но суть не меняется, поэтому никогда, не делайте дизайн таким, чтобы пользователь захотел от него избавиться и читать текст в блокноте (если конечно не хотите досадить таким образом людям). Буду надеяться что на моих сайтах все в порядке с читабельностью постов.

Permalink | Leave a comment  »

]]>
Tue, 05 Oct 2010 03:10:34 -0700 WCF transfer large DataSet or DataTable http://heeepi.posterous.com/wcf-transfer-large-dataset-or-datatable http://heeepi.posterous.com/wcf-transfer-large-dataset-or-datatable

В WCF достаточно проблемно организована работа с большими объемами данных. Например, передача большого DataSet упирается в: сериализацию, ограничения на размер буфера и размер пакета и т.д.

Если у вас гоняются через WCF сервис действительно большие таблицы, то вам может понадобится решение «Transfer gigantic DataTables over WCF / .Net Remoting» которое лежит на Codeplex.

Суть его достаточно проста и понятна. Вместо того, чтобы в один запрос сериализовать весь DataTable, сервис создает и открывает еще один хост отдельного сервиса с одной операцией получения части таблицы данных и возвращает легковесный объект, который содержит описание подключения к этому сервису и некоторые простые служебные переменные таблицы, например, размер. Далее по этому объекту на клиенте можно легко вытягивать данные. 

Такой подход принципиально можно применять для коллекций и потоков (например, в случае невозможности включения Streamed режима) и т.д.

Авторы утверждают что:

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

2.       Улучшает пропускную способность до 75% (WCF с передачей DataTable может передавать со скоростью 3154 Кб/с, а такое решение – 12245 Кб/с).

За счет чего может получаться такая пропускная способность мне не вполне понятно, я думаю что за счет распараллеливания клиентских запросов к данным. Например, в нескольких запросах получается последовательно 3-4 порции записей.

Меня сметили в реализации следующие вещи:

1.       Открытие дополнительного ServiceHost выглядит не очень. Скорей тут нужно публиковать отдельный сервис, который будет висеть постоянно. Так можно будет не привязываться к хостам, которыми в ряде случаев (например при хостинге на IIS мы не управляем).

2.       Регулировать размер возвращаемых данных нужно относительно того, какие квоты выставлены для сервиса.

3.       Использовать не только Binary сериализацию, и не только net.tcp. Все таки для инета это тоже может очень хорошо работать.

В итоге: идея жизнеспособная, но решение надо прорабатывать под конкретные нужды.

Permalink | Leave a comment  »

]]>