Gollum's den

ASP.NET (и не только) здесь и сейчас!

View Eugene Agafonov's profile on LinkedIn

June 2006 - Posts

По следам WebDevCon06

Побывал на WebDevCon06 и даже прочитал полтора доклада. Все было здорово, единственно, что мне не понравилось - это зал номер 3...  Тем не менее, огромное спасибо организаторам конференции и Саше Ложечкину лично :)

Как и обещал, вот ссылки на доклады:

ASP.NET 2.0 WebParts

Atlas vs WPF/E

Теперь, что еще хотел сказать. К сожалению, ненамеренно ввел в заблуждение спросившего у меня на конференции, доступна ли анонимная персонализация веб-частей. Сейчас уже сложно сказать, перепутал ли я просто с profile, или же она действительно была в бета-версии... Но тем не менее, приходится исправляться. Итак, не смотря ни на что, анонимная персонализация веб-частей возможна. Есть, как всегда, два пути, простой и сложный. В обоих нужно включить идентификацию анонимов в web.config. Дальше, мы можем подписаться на событие PostAuthenticateRequest в global.asax, и в случае, если пользователь не аутентифицирован, берем Request.AnonymousID, и если он есть, создаем GenericIdentity с Name = AnonymousID, GenericPrincipal c identity = наше Identity, и сразу добавим роль, которая будет означать этих псевдоанонимов. Способ очень надежный, но идеологически неправильный, т.к. у нас все пользователи будут аутентифицированы. Другой способ - самый идеологически правильный, но из-за особенностей реализации инфраструктуры персонализации, я не уверен в его надежности. Итак, способ заключается в том, чтобы создать собственный провайдер персонализации, в котором предусмотреть анонимную персонализацию. К сожалению внутри базового класса PersonalizationProvider много hardcoded мест, где проверяется анонимность, и предпринимаются запретительные меры. Провайдер в результате я написал, но он использует кучу рефлекшна, и я не уверен, что при эксплуатации не вылезет еще какоето место, где подобная вещь опять же hardcoded.

Скачать демонстрационный проект можно здесь:

Web Parts Anonymous Personalization

Для его запуска нужны инсталлированные Visual Studio 2005 (или Web Developer Express) и SQL Express 2005. Если установлена другая версия SQL, то потребуется модификация строки соединения у провайдера. В проекте вы найдете класс провайдера, и демонстрационную страничку. Обратите внимание, что используемый провайдер прописывается непосредственно в WebPartManager, по умолчанию действует обычный. Тем не менее, если у данного провайдера указать свойство allowAnonymous="false" то он дожен работать 100% также как и обычный SqlPersonalizationProvider

Анонимная персонализация довольно опасная штука, но ничего криминального я в ней не вижу. Да, данные всех анонимов хранятся в базе, но у WebPartManager'а есть метод который удаляет состояние всех пользователей, не активных указанное количество дней. Так что, вполне можно использовать. Если мой провайдер кому-то поможет, буду очень рад. Если будут вопросы, с радостью отвечу.