ASP.NET 4.0, MVC Framework 2.0 и Visual Studio 2010 Гайдар Магдануров Microsoft Microsoft Платформа 2010 http://msplatforma.ru Поговорим... Новые возможности ASP.NET 4.0 Изменения в WebForms MVC 2.0 Улучшениях Visual Web Developer 2010 Дизайнер страниц JavaScript Распространение веб-приложений и Visual Studio 2010 Microsoft Платформа 2010 http://msplatforma.ru Основные службы ASP.NET Microsoft Платформа 2010 http://msplatforma.ru Автоматический запуск приложений Для приложений, требующих сложной инициализации Работает на IIS 7.5 Конфигурация в applicationHost.config <applicationPools> <add name="MyApplicationPool" startMode="AlwaysRunning" /> </applicationPools> Microsoft Платформа 2010 http://msplatforma.ru Автоматический запуск приложений <sites> <site name="MySite" id="1"> <application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="PrewarmMyCache" > <!-- Additional content --> </application> </site> </sites> <serviceAutoStartProviders> <add name="PrewarmMyCache" type="MyNamespace.CustomInitialization, MyInitLib" /> </serviceAutoStartProviders> Microsoft Платформа 2010 http://msplatforma.ru Автоматический запуск Собственный тип для инициализации приложения До отработки метода Preload приложение не принимает запросы public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient { public void Preload(string[] parameters) { } } Microsoft Платформа 2010 http://msplatforma.ru Расширенный механизм кеширования Возможность добавления собственных провайдеров кеширования Наследование System.Web.Caching.OutputCacheProvider Конфигурирование в web.config Возможность выбора системы хранения Локальные или сетевые диски, база данных «в облаке», системы распределенного кеша Microsoft Платформа 2010 http://msplatforma.ru Кеширование: настройка Конфигурирование в web.config <caching> <outputCache defaultProvider="AspNetInternalProvider"> <providers> <add name="DiskCache" type=“ChacheProviders.DiskOutputCacheProvider, DiskCacheProvider"/> </providers> </outputCache> </caching> Microsoft Платформа 2010 http://msplatforma.ru Кеширование: настройка По умолчанию AspNetInternalProvider Хранение данных в памяти Возможность назначать провайдеры на уровне страницы и на уровне запроса Microsoft Платформа 2010 http://msplatforma.ru Кеширование: для страницы <%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %> Microsoft Платформа 2010 http://msplatforma.ru Кеширование: для запроса В Global.asax public override string GetOutputCacheProviderName(HttpContext context) { if (context.Request.Path.EndsWith("Advanced.aspx")) return "DiskCache"; else return base.GetOutputCacheProviderName(context); } Microsoft Платформа 2010 http://msplatforma.ru Уменьшение размера состояния сеанса пользователя Использование System.IO.Compression.GZipStream для сжатия состояния Особенно актуально для веб-ферм, при хранении состояния в SQL Server или out-of-proc сервере состояния <sessionState mode="SqlServer" sqlConnectionString="data source=dbserver;Initial Catalog=aspnetstate" allowCustomSqlDatabase="true" compressionEnabled="true" /> Microsoft Платформа 2010 http://msplatforma.ru Постоянные редиректы Метод Response.Redirect выдает 302 Moved Temporary – соответственно лишний обмен по HTTP сообщениями PermanentRedirect выдает 301 – Moved Permanently RedirectPermanent("/new/content.aspx"); Поисковые системы кешируют страницы с кодом 301 и не запрашивают повторно Microsoft Платформа 2010 http://msplatforma.ru Настройки поддерживаемых URL Возможность увеличения длины путей более 260 символов: <httpRuntime maxRequestPathLength="260" maxQueryStringLength="2048" /> Контроль допустимых символов в URL <httpRuntime requestPathInvalidChars="<,>,*,%,&,:,\" /> Microsoft Платформа 2010 http://msplatforma.ru Валидация запросов Создание собственного валидатора запросов регистрация в web.config секции httpRuntime Наследование System.Web.Util.RequestValidator <httpRuntime requestValidationType=“MyLib.MyValidator, Samples" /> Метод IsValidRequestString public class CustomRequestValidation : RequestValidator { protected override bool IsValidRequestString( HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex) {...} } Microsoft Платформа 2010 http://msplatforma.ru Настройки кодирования URL и HTML Создание собственных классов для обработки вызовов при сохранении API Наследование System.Web.Util.HttpEncoder Автоматическая подмена вызовов методов кодирования классов System.Web.HttpUtility и System.Web.HttpServerUtility Настойка в web.config <httpRuntime encoderType=“MyLib.MyCustomEncoder, Samples" /> Microsoft Платформа 2010 http://msplatforma.ru Мониторинг производительности на уровне приложения Настройка в файле aspnet.config в директории, куда установлен .NET FW <?xml version="1.0" encoding="UTF-8" ?> <configuration> <runtime> <appDomainResourceMonitoring enabled="true"/> </runtime> </configuration> Новые счетчики в категории ASP.NET Applications - % Managed Processor Time и Managed Memory Used Microsoft Платформа 2010 http://msplatforma.ru Меньше настроек в web.config Основные параметры конфигурации перенесены в machine.config Минимальный достаточный web.config <?xml version="1.0"?> <configuration> <system.web> <compilation targetFramework="4.0" /> </system.web> </configuration> Microsoft Платформа 2010 http://msplatforma.ru WebForms Microsoft Платформа 2010 http://msplatforma.ru Маршрутизация Cвойства для работы с маршрутами HttpRequest.RequestContext и Page.RouteData Определение маршрута public class Global : System.Web.HttpApplication { void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapPageRoute("SearchRoute", "search/{searchterm}", "~/search.aspx"); RouteTable.Routes.MapPageRoute("UserRoute", "users/{username}", "~/users.aspx"); } } Microsoft Платформа 2010 http://msplatforma.ru Маршрутизация Параметр checkPhysicalUrlAccess метода MapPageRoute позволяет применить правила доступа, которые определены для физической страницы в web.config Чтение в коде Page.RouteData.Values[“id"] Microsoft Платформа 2010 http://msplatforma.ru Миршрутизация Декларативное связывание Чтение значений параметров <asp:Label ID="Label1" runat="server" Text="<%$RouteValue:Id%>" /> Определение параметров <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="<%$RouteUrl:Id=search%>"> Search</asp:HyperLink> Microsoft Платформа 2010 http://msplatforma.ru Маршрутизация Связь с DataSource <asp:sqldatasource ...> <selectparameters> <asp:routeparameter name="companyname" RouteKey="searchterm" /> </selectparameters> </asp:sqldatasource> Microsoft Платформа 2010 http://msplatforma.ru Настройки ViewState Наследование ViewState с возможностью наследования Атрибут ViewStateMode Enabled (по умолчанию) Disabled Inherit Microsoft Платформа 2010 http://msplatforma.ru Поддержка браузеров Класс HttpBrowserCapabilities для получения информации о текущем браузере blackberry.browser chrome.browser Default.browser firefox.browser gateway.browser generic.browser ie.browser iemobile.browser iphone.browser opera.browser safari.browser Microsoft Платформа 2010 http://msplatforma.ru Мета-теги страницы Свойства Keywords и Descriptions <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Keywords="These, are, my, keywords" Description="This is a description" %> Свойства Page.MetaKeywords и Page.MetaDescription Microsoft Платформа 2010 http://msplatforma.ru Управление ID контролов в разметке ClientIDMode AutoID – автоматическая генерация Static – статические ID Predictable – Предсказуемые (например, для Repeater, ClientIDRowSuffix будет PrimaryKey или Object ID) Inherit – наследовать от родителя Microsoft Платформа 2010 http://msplatforma.ru Управление ID контролов в разметке Страница <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" ClientIDMode="Predictable" %> Web.config <system.web> <pages clientIDMode="Predictable"></pages> </system.web> Microsoft Платформа 2010 http://msplatforma.ru Управление ID контролов в разметке <tc:NamingPanel runat="server" ID="ParentPanel" ClientIDMode="Static"> <tc:NamingPanel runat="server" ID="NamingPanel1" ClientIDMode="Predictable"> <asp:TextBox ID="TextBox1" runat="server" Text="Hello!"></asp:TextBox> </tc:NamingPanel> </tc:NamingPanel> <div id="ParentPanel"> <div id="ParentPanel_NamingPanel1"> <input name="ctl00$ContentPlaceHolder1$ParentPanel$Nami ngPanel1$TextBox1" type="text" value="Hello!" id="ParentPanel_NamingPanel1_TextBox1" /> </div> Microsoft Платформа 2010 http://msplatforma.ru ID для элементов коллекций <asp:ListView ID="ListView1" runat="server" ClientIDMode="Predictable" RowClientIDRowSuffix="ProductID"> </asp:ListView> rootPanel_ListView1_ProductNameLabel_1 В Repeater нет RowClientIDRowSuffix, поэтому используется индекс строки Microsoft Платформа 2010 http://msplatforma.ru Новое выражение <% : %> Автоматическое кодирование вывода на страницу <%: expression %> Равно <%= HttpUtility.HtmlEncode(expression) %> Если не нужно кодировать, то <%: new HtmlString("<strong>HTML that is not encoded</strong>") %> Microsoft Платформа 2010 http://msplatforma.ru Рендеринг Выбор уровня совместимости HTML <system.web><pages controlRenderingCompatibilityVersion="3.5|4.0"/> </system.web> Для «скрытых» div генерируется css class aspNetHidden Возможность отключить внешнюю таблицу для контролов FormView, Login, PasswordRecovery, ChangePassword, Wizard, CreateUserWizard <asp:FormView ID="FormView1" runat="server" RenderOuterTable="false"> Microsoft Платформа 2010 http://msplatforma.ru Улучшения контролов ListView Не нужен LayoutTemplate <asp:ListView ID="ListView1" runat="server"> <ItemTemplate> <% Eval("LastName")%> </ItemTemplate> </asp:ListView> CheckBoxList Новые типы Layout = UnorderedList, OrderedList Menu Рендеринг в виде несортированного списка Microsoft Платформа 2010 http://msplatforma.ru Выделение строки в ListView/GridView Раньше выделение было по индексу строки Теперь – по ключу данных <asp:GridView id="GridView2" runat="server" EnablePersistedSelection="true"> </asp:GridView> Microsoft Платформа 2010 http://msplatforma.ru MVC 2.0 Microsoft Платформа 2010 http://msplatforma.ru Регионы / Area Вложенные проекты Site Blog Forum Shop Microsoft Платформа 2010 http://msplatforma.ru Валидация и аннотации данных public class Person { [Required(ErrorMessage = “*”)] [StringLength(32, ErrorMessage = “Not longer than 32”)] public string LastName { get; set; } } public class PersonController { [HttpPost] public ActionResult Update(Person p){ if(!ModelState.IsValid) ... } } Microsoft Платформа 2010 http://msplatforma.ru Строгая типизация UI хэлперов Html.LabelFor (c => c.Name) Html.EditorFor (c => c.Name) Html.EditorFor (c => c) Microsoft Платформа 2010 http://msplatforma.ru Поддержка шаблонов UI EditorTemplates Display Templates .ascx файлы Html.EditorFor(c => c.Name, “NameEditor”) public class Person{ [UIHint(“NameEditor”)] public string Name {get; set;} } Microsoft Платформа 2010 http://msplatforma.ru Параметры по умолчанию public ActionResult ([DefaultValue(10)] int count) {} public ActionResult (int count = 10) {} // C# 4.0 Microsoft Платформа 2010 http://msplatforma.ru Visual Studio 2010 Microsoft Платформа 2010 http://msplatforma.ru Улучшения дизайнера Полная поддержка CSS 2.1 при рендеринге в дизайнере Шаблоны HTML и JavaScript Улучшения JavaScript IntelliSense Распознавание объектов, создаваемых автоматически Поддержка библиотек третьих компаний Моментальное распознавание комментариев Microsoft Платформа 2010 http://msplatforma.ru Поддержка CSS 2.1 Селекторы атрибутов h1[title] span[class=example] span[hello="Cleveland"][goodbye="Colum bus"] a[rel~="copyright"] *[lang|="en"] "lang" псевдо-класс html:lang(fr-ca) html:lang(de) :lang(fr) > Q :lang(de) > Q Microsoft Платформа 2010 http://msplatforma.ru Поддержка CSS 2.1 ":first-child" псевдо класс div > p:first-child p:first-child em «наследование» .container { color: inherit } #menu { font-family: inherit } border-color: transparent Корректная реализация некорректных селекторов body, ,p Microsoft Платформа 2010 http://msplatforma.ru http://www.w3.org/TR/CSS21/selector.html Microsoft Платформа 2010 http://msplatforma.ru JavaScript IntelliSense Microsoft Платформа 2010 http://msplatforma.ru Структура документа Microsoft Платформа 2010 http://msplatforma.ru Распространение Публикация: FTP FPSE Директория MS Deploy Профили для публикации в «один клик» Microsoft Платформа 2010 http://msplatforma.ru Использование MS Deploy Пакет, включающий IIS Configuration GAC или COM Components Сертификаты Реестр Базы данных (скрипты для БД и, по желанию, данных) Модификацию web.config (xml трансформация) Флагов отладки Строк соединения Ссылок на веб-службы <connectionStrings xdt:Transform="Replace"> <add name="BlogDB" connectionString="connection string" /> </connectionStrings> Microsoft Платформа 2010 http://msplatforma.ru Публикация - FTP Microsoft Платформа 2010 http://msplatforma.ru Заключение Эволюционное развитие ASP.NET WebForms параллельно с MVC Полная поддержка в Visual Studio Microsoft Платформа 2010 http://msplatforma.ru Ресурсы Официальный сайт ASP.NET http://www.asp.net Официальный сайт Visual Studio http://microsoft.com/vstudio Блог команды Visual Web Developer http://blogs.msdn.com/webdevtools/ Microsoft Платформа 2010 http://msplatforma.ru Вопросы Гайдар Магдануров Эксперт по веб-технологиям GaidarMa@microsoft.com http://blogs.msdn.com/gaidar http://twitter.com/gaidar Вы сможете задать вопросы докладчику в зоне «Спроси эксперта» в течение часа после завершения этого доклада Microsoft Платформа 2010 http://msplatforma.ru