Document 5009980

advertisement
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
Download