Побывал на 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'а есть метод который удаляет состояние всех пользователей, не активных указанное количество дней. Так что, вполне можно использовать. Если мой провайдер кому-то поможет, буду очень рад. Если будут вопросы, с радостью отвечу.