Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

2,211 views

Published on

Краткий обзор ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,211
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
19
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

  1. 1. Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0<br />Гайдар Магдануров<br />t: http://twtter.com/gaidar<br />e: GaidarMa@microsoft.com<br />
  2. 2. Платформа ASP.NET<br />Dynamic Data<br />Библиотека для автоматического создания приложений работающих с данными<br />Microsoft Ajax<br />Набор клиентского JavaScript кода и серверных компонентов<br />2.0<br />WebForms<br />Элементы управления, модель событий, источники данных<br />MVC Framework<br />Инфраструктура представлений и контроллеров, поддержка модели<br />4.0<br />Службы ASP.NET<br />Кеширование, хранение состояния, маршрутизация, хранение данных пользователей, поддержка локализация<br />Ядро ASP.NET<br />Процесс обработки Http запросов, инфраструктура HttpModule иHttpHandler, интеграция с веб-серверомIIS, модель расширения<br />
  3. 3. Ядро и службы ASP.NET 4.0<br />
  4. 4. Автоматический запуск приложений<br />Для приложений, требующих длительной инициализации<br />Работает на IIS 7.5<br />Конфигурация в applicationHost.config<br /><applicationPools> <br /> <add name="MyApplicationPool" startMode="AlwaysRunning" /></applicationPools><br />
  5. 5. Автоматический запуск приложений<br /><sites><br /> <site name="MySite" id="1"><br /> <application path="/" <br />serviceAutoStartEnabled="true"<br />serviceAutoStartProvider="PrewarmMyCache" ><br /> <!-- Additional content --><br /> </application><br /> </site><br /></sites><br /><serviceAutoStartProviders><br /> <add name="PrewarmMyCache"<br /> type="MyNamespace.CustomInitialization, MyInitLib" /><br /></serviceAutoStartProviders><br />
  6. 6. Автоматический запуск приложений<br />Управление инициализацией приложения<br />До отработки метода Preload приложение не принимает запросы<br />public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient { public void Preload(string[] parameters) { } <br />}<br />
  7. 7. Расширенный механизм кеширования<br />Возможность добавления собственных провайдеров кеширования<br />Наследование System.Web.Caching.OutputCacheProvider<br />Конфигурирование в web.config<br />Возможность выбора системы хранения<br />Локальные или сетевые диски, база данных «в облаке», системы распределенного кеша<br />
  8. 8. Кеширование: настройка<br />Конфигурирование в web.config<br /><caching><br /> <outputCachedefaultProvider="AspNetInternalProvider"> <providers> <add name="DiskCache" type=“ChacheProviders.DiskOutputCacheProvider,DiskCacheProvider"/> </providers> </outputCache></caching><br />
  9. 9. Кеширование: настройка<br />По умолчанию AspNetInternalProvider<br />Хранение данных в памяти<br />Возможность назначать провайдеры на уровне страницы и на уровне запроса<br />
  10. 10. Кеширование: уровень страницы<br /><%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %><br />
  11. 11. Кеширование: уровень запроса<br />В Global.asax<br />public override stringGetOutputCacheProviderName(HttpContext context) <br /> { <br /> if (context.Request.Path.EndsWith("Advanced.aspx"))<br /> return "DiskCache"; <br /> else<br /> return base.GetOutputCacheProviderName(context);<br /> }<br />
  12. 12. Уменьшение размера состояния сеанса<br />Использование System.IO.Compression.GZipStream для сжатия состояния<br />Особенно актуально для веб-ферм, при хранении состояния в SQL Server или out-of-proc сервере состояния<br /><sessionState<br /> mode="SqlServer"<br />sqlConnectionString="data source=dbserver;Initial Catalog=aspnetstate"<br />allowCustomSqlDatabase="true"<br />compressionEnabled="true"<br /> /><br />
  13. 13. Постоянные редиректы<br />Метод Response.Redirectвыдает 302 Moved Temporary – соответственно лишний обмен по HTTP сообщениями<br />PermanentRedirectвыдает 301 – Moved Permanently<br />RedirectPermanent("/new/content.aspx"); <br />Поисковые системы кешируют страницы с кодом 301 и не запрашивают повторно<br />
  14. 14. Настройки разрешенных URL<br />Возможность увеличения длины путей более 260 символов:<br /><httpRuntimemaxRequestPathLength="260" maxQueryStringLength="2048" /> <br />Контроль допустимых символов в URL<br /><httpRuntimerequestPathInvalidChars="<,>,*,%,&,:," /><br />
  15. 15. Валидация запросов<br />Создание собственного валидатора запросоврегистрация в web.configсекцииhttpRuntime<br />Наследование System.Web.Util.RequestValidator<br /><httpRuntimerequestValidationType=“MyLib.MyValidator, Samples" /> <br />Метод IsValidRequestString<br />public class CustomRequestValidation : RequestValidator { <br /> protected override boolIsValidRequestString( HttpContext context, string value, RequestValidationSourcerequestValidationSource, string collectionKey, out intvalidationFailureIndex) {...} } <br />
  16. 16. Кодирование URL и HTML<br />Создание собственных классов для обработки вызововпри сохранении API<br />Наследование System.Web.Util.HttpEncoder<br />Автоматическая подмена вызовов методов кодирования классов System.Web.HttpUtilityиSystem.Web.HttpServerUtility<br />Настойка в web.config<br /><httpRuntimeencoderType=“MyLib.MyCustomEncoder, Samples" /> <br />
  17. 17. Настройка в файле aspnet.config в директории, куда установлен .NET FW<br /><?xml version="1.0" encoding="UTF-8" ?> <configuration> <runtime> <appDomainResourceMonitoring enabled="true"/> </runtime> </configuration><br />Новые счетчики в категории ASP.NET Applications - % Managed Processor Time и Managed Memory Used<br />Мониторинг производительности <br />
  18. 18. <?xml version="1.0"?> <configuration> <system.web><br /><compilation targetFramework="4.0" /> </system.web><br /></configuration> <br />Меньше настроек в web.config<br />Основные параметры конфигурации перенесены в machine.config<br />Минимальный достаточный web.config<br />
  19. 19. Web Forms 4.0<br />
  20. 20. Маршрутизация<br />Cвойствадля работы с маршрутами HttpRequest.RequestContext и Page.RouteData<br />Определение маршрута<br />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"); }} <br />
  21. 21. Маршрутизация<br />Параметр checkPhysicalUrlAccess метода MapPageRoute позволяет применить правила доступа, которые определены для физической страницы в web.config<br />Коллекцияпараметров маршрута<br />Page.RouteData.Values["username"]<br />
  22. 22. Маршрутизация<br />Декларативное связывание<br />Чтение значений параметров<br /><asp:Label ID="Label1" runat="server" Text="<%$RouteValue:Id%>" /><br />Определение параметров<br /><asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="<%$RouteUrl:Id=search%>"> Search</asp:HyperLink> <br />
  23. 23. Маршрутизация<br />Связь с DataSource<br /><asp:sqldatasource ...><br /><selectparameters><br /><asp:routeparameter name="companyname" RouteKey="searchterm" /> <br /></selectparameters> </asp:sqldatasource><br />
  24. 24. Настройки ViewState<br />Наследование ViewStateс возможностью наследования<br />Атрибут ViewStateMode<br />Enabled (по умолчанию)<br />Disabled<br />Inherit<br />
  25. 25. Поддержка браузеров<br />Класс HttpBrowserCapabilitiesдля получения информации о текущем браузере<br /><ul><li>blackberry.browser
  26. 26. chrome.browser
  27. 27. Default.browser
  28. 28. firefox.browser
  29. 29. gateway.browser
  30. 30. generic.browser
  31. 31. ie.browser
  32. 32. iemobile.browser
  33. 33. iphone.browser
  34. 34. opera.browser
  35. 35. safari.browser</li></li></ul><li>Мета-теги страницы<br />Свойства Keywords и Descriptions<br /><%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Keywords="These, are, my, keywords" Description="This is a description" %> <br />Свойства Page.MetaKeywords и Page.MetaDescription<br />
  36. 36. Управление атрибутом id<br />ClientIDMode<br />AutoID – автоматическая генерация<br />Static – статические ID<br />Predictable – Предсказуемые (например, для Repeater, ClientIDRowSuffixбудет PrimaryKeyили Object ID)<br />Inherit – наследовать от родителя<br />
  37. 37. Управление атрибутом id<br />Страница<br /><%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" ClientIDMode="Predictable" %> <br />Web.config<br /><system.web><pagesclientIDMode="Predictable"></pages></system.web><br />
  38. 38. Управление атрибутом id<br /><tc:NamingPanelrunat="server" ID="ParentPanel" ClientIDMode="Static"> <tc:NamingPanelrunat="server" ID="NamingPanel1" ClientIDMode="Predictable"> <asp:TextBox ID="TextBox1" runat="server" Text="Hello!"></asp:TextBox> </tc:NamingPanel> </tc:NamingPanel> <br /><div id="ParentPanel"> <div id="ParentPanel_NamingPanel1"> <input name="ctl00$ContentPlaceHolder1$ParentPanel$NamingPanel1$TextBox1" type="text" value="Hello!" id="ParentPanel_NamingPanel1_TextBox1" /> </div> <br />
  39. 39. Атрибуты id коллекций<br /><asp:ListView ID="ListView1" runat="server" ClientIDMode="Predictable" RowClientIDRowSuffix="ProductID"> </asp:ListView> <br />rootPanel_ListView1_ProductNameLabel_1<br />В Repeater нет RowClientIDRowSuffix, поэтому используется индекс строки<br />
  40. 40. Новое выражение <% : %><br />Автоматическое кодирование вывода на страницу<br /><%: expression %><br />Равно<br /><%= HttpUtility.HtmlEncode(expression) %> <br />Если не нужно кодировать, то <br /><%: new HtmlString("<strong>не энкодить меня!</strong>") %> <br />
  41. 41. Рендеринг<br />Выбор уровня совместимости HTML<br /><system.web><pages controlRenderingCompatibilityVersion="3.5|4.0"/> </system.web> <br />Для «скрытых» div генерируется css class aspNetHidden<br />Возможность отключить внешнюю таблицу для контроловFormView, Login, PasswordRecovery, ChangePassword, Wizard, CreateUserWizard<br /><asp:FormView ID="FormView1" runat="server" RenderOuterTable="false"> <br />
  42. 42. Выделение строки в ListView/GridView<br />Раньше выделение было по индексу строки<br />Теперь – по ключу данных<br /><asp:GridView id="GridView2" runat="server" EnablePersistedSelection="true"> </asp:GridView> <br />
  43. 43. Улучшения контролов<br />ListView<br />Не нужен LayoutTemplate<br /><asp:ListView ID="ListView1" runat="server"> <ItemTemplate> <% Eval("LastName")%> </ItemTemplate> </asp:ListView> <br />CheckBoxList<br />Новые типы Layout = UnorderedList, OrderedList<br />Menu<br />Рендеринг в виде несортированного списка<br />Скрипты на стороне клиента<br />
  44. 44. MVC Framework 2.0<br />
  45. 45. Регионы / Area<br />Вложенные проекты<br />Site<br />Blog<br />Forum<br />Shop<br />
  46. 46. Асинхронные контроллеры<br />Возможность избежать блокировок тредов из пула тредовASP.NET<br />public class MyController: AsyncController {<br /> public void MyActionAsync(string value) {<br />AsyncManager.OutstandingOperations.Increment();<br />MyServicemyService= new MyService();<br />myService.GetDataCompleted+= (sender, e) =><br />{ AsyncManager.Parameters[“data"] = e.Value;<br />AsyncManager.OutstandingOperations.Decrement(); <br /> };<br />myService.GetDataAsync(city); <br /> }<br /> public ActionResultMyActionCompletd(string[] data) {<br /> return View(“MyData", new MyData { DataLines= date }); }<br /> }<br />
  47. 47. Валидация и аннотации данных<br />public class Person {<br /> [Required(ErrorMessage = “*”)] [StringLength(32, ErrorMessage = “Лимит – 32 символа”)] public string LastName { get; set; }<br />}<br />public class PersonController {<br />[HttpPost]<br /> public ActionResult Update(Person p){<br /> if(!ModelState.IsValid) ...<br /> }<br />}<br />
  48. 48. Строгая типизация UI хэлперов<br />Html.LabelFor (c => c.Name)<br />Html.EditorFor (c => c.Name)<br />Html.EditorFor (c => c)<br />
  49. 49. Поддержка шаблонов UI<br />EditorTemplates<br />Display Templates<br />.ascxфайлы<br />Html.EditorFor(c => c.Name, “NameEditor”)<br />public class Person{<br /> [UIHint(“NameEditor”)]<br /> public string Name {get; set;}<br />}<br />
  50. 50. Параметры по умолчанию<br />public ActionResult ([DefaultValue(10)] int count) {}<br />public ActionResult (int count = 10) {} // C# 4.0<br />
  51. 51. Основные ресурсы<br />Библиотека MSDN<br />http://msdn.microsoft.com/en-us/asp.net/default.aspx<br />CайтASP.NET<br />http://www.asp.net<br />Технические видео по теме<br />http://www.microsoft.com/rus/web/tech/development.aspx<br />
  52. 52. СПАСИБО ЗА ВНИМАНИЕ!<br />Гайдар Магдануров<br />t: http://twtter.com/gaidar<br />e: GaidarMa@microsoft.com<br />

×