четверг, 21 октября 2010 г.

WCF и Streamed

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

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

Posted via email from Комуникликабельность

среда, 20 октября 2010 г.

Прикольные 404 страницы

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

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

Posted via email from Комуникликабельность

воскресенье, 17 октября 2010 г.

Ищем ошибки WCF сервиса

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

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

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

<customErrors mode="RemoteOnly" />

Или

<customErrors mode="Off" />

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

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

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

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

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

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

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

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

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

Отладка

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

В итоге

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

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

Posted via email from Комуникликабельность

воскресенье, 10 октября 2010 г.

Windows Live Essentials 2011

Попробовал поставить 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 начнет интегрироваться с мобильными устройствами.

Posted via email from Комуникликабельность

среда, 6 октября 2010 г.

WCF transfer large DataSet or DataTable - Part 2

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

Posted via email from Комуникликабельность

вторник, 5 октября 2010 г.

Порой версия для печати лучше оригинальной

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

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

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

Posted via email from Комуникликабельность

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. Все таки для инета это тоже может очень хорошо работать.

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

Posted via email from Комуникликабельность

понедельник, 4 октября 2010 г.

User Group Support Services

MS открыла ресурс, который видимо будет объединять Community всех стран, в том числе и User Groups и MCP Clubs.

www.technicalcommunity.com

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

Сразу же нашел MCP Club Izhevsk. К сожалению User Group пока нет, но думаю что она скоро там появится.

Posted via email from Комуникликабельность

суббота, 2 октября 2010 г.

Локальный SVN

Сегодня решил несколько организовать свое рабочее пространство: поставить локальный сервак SVN и складывать туда проекты. Для чего это хочу сделать? Для того, чтобы все проекты были в одном месте, для того, чтобы они не потерялись, если чтото слетит, для того, чтобы была версионность, для того … ну в общем, мне это показалось клеевой идеей J.

В итоге, для начала я решил поднять самый простой сервак. Проще, чем VisualSVN Server не нашел … наверное потому что не искал, или наверное потому что нашел его самым первым и сразу поставил, он меня полностью удовлетворил своими возможностями. Так как у меня уже стоял TortoiseSVN, то и сразу же залил туда все проекты. Интеграции с IDE не было, поэтому я поднял и ее. Тут пришлось порыться в инетах, в итоге нашлось бесплатное средство, интегрирующееся с VS AnkhSVN. Visual SVN поставил и сразу снес, потому что он платный J.

После того, как попробовал заливать и менять проекты, захотелось чтобы репозиторий «случайно» не потерялся, как это часто бывает, если у вас что то слетает. Да и хочется, в случае необходимости иметь доступ к репозиторию с другого компа. Так что попробовал сохранить его в репозиторию DropBox.

В итоге, хочу использовать для двух целей:

1. Хранение локальных проектов.

2. Хранение документов.

Посмотрим что из этого получится…

Posted via email from Комуникликабельность