net framework и С#, весна 2015: webservices introduction
TRANSCRIPT
Толстиков Никита
Долгий путь HTTP запроса
22.04.2015 1ASP.NET
План лекции
• IIS
• ASP.NET
• ASP.NET MVC
22.04.2015 Толстиков Никита 2ASP.NET
Терминология
• Web Server:
– ПО которое обрабатывает запросы прешедшие через HTTP протокол
• Web Service:
– ПО спроектированное для взаимодействия между совместимыми сервисами через сеть
22.04.2015 Толстиков Никита 3ASP.NET
Microsoft и .NET
• Web Server:
– Internet Information Services (IIS 8.0)
• Web Service:
– Windows Communication Foundation (WCF 4.5)
– ASP.NET (ASP.NET 4.5 -> ASP.NET vNext)
• Microsoft AZURE (Cloud)
22.04.2015 Толстиков Никита 4ASP.NET
ASP.NET Model
22.04.2015 Толстиков Никита 5ASP.NET
ASP.NET Web Forms
• Програмная модель напоминающая
разарботку по Windows Forms – controls и
events
• Каждый control инкапсулирует свой
JavaScript, CSS и HTML
• «Тяжелые контролы» включают в себя так же
таблицы, графики и AJAX
22.04.2015 Толстиков Никита 6ASP.NET
ASP.NET MVC
• Полный контроль над HTML разметкой
• Поддерживает Unit Testing, TDD и Agile
методологии
• Очень расширяемая и настраиваемая
22.04.2015 Толстиков Никита 7ASP.NET
ASP.NET Web Pages
• Одна страница для кода и разметки
• Не нужно компилировать, сохранил и
обновил
• Легко расширить до ASP.NET MVC в
будущем
22.04.2015 Толстиков Никита 8ASP.NET
ASP.NET Model
22.04.2015 Толстиков Никита 9ASP.NET
Request/Response
22.04.2015 Толстиков Никита 10ASP.NET
IIS
Response
Requesthttp://app1
http://app2
IIS
22.04.2015 Толстиков Никита 11ASP.NET
IIS
• Разработанный Microsoft WebServer
• Поддерживает HTTP, HTTPS, FTP, FTPS,
SMTP и NNTP протоколы
22.04.2015 Толстиков Никита 12ASP.NET
Путь HTTP запроса
22.04.2015 Толстиков Никита 13ASP.NET
Путь HTTP запроса
1. Браузер обращается к веб-серверу по определённому URL, на стороне
сервера запрос перехватывает драйвер HTTP.SYS.
2. HTTP.SYS стучится к WAS для получения информации из хранилища
конфигурации.
3. Служба WAS запрашивает конфигурацию из хранилища — из файла в
папке IIS (applicationHost.config).
4. Поскольку данный запрос получен по протоколу HTTP конфигурационную
информацию получает служба W3SVC (она же WWW Service на картинке),
эта информация содержит в себе данные о пуле приложений (application
pool) и прочих параметрах сайта.
5. Служба W3SVC использует эту информацию для кофигурации HTTP.SYS.
6. Служба WAS запускает процесс W3WP.exe для пула приложений, если он
ещё не был запущен.
7. В процессе W3WP.exe работает приложение веб-сайта, которое,
собственно, формирует и возвращает ответ драйверу HTTP.SYS.
8. HTTP.SYS отправляет ответ браузеру.
22.04.2015 Толстиков Никита 14ASP.NET
IIS AppPool
22.04.2015 Толстиков Никита 15ASP.NET
IIS AppPool
• Это дочерний процесс IIS (w3wp.exe)
который отвечает за обработку запросов к
своему набору URL-адресов и web-
приложений
• Такой поход помогает изолировать
приложения друг от друга
• Application pools существенно увеличивают
как надежность, так и управляемость Web
инфрструктуры
22.04.2015 Толстиков Никита 16ASP.NET
IIS Site
22.04.2015 Толстиков Никита 17ASP.NET
IIS Site
• Это контейнер для приложений и
виртуальных папок
• Адресс сайта определяется одним или
несколькими уникальными привязками(binds)
• Сайт позволяет манипулировать множеством
параметров как на уровне приложения
(сеттинги, авторизация, роли, сесии и т.д.) так
и на уровне IIS (тип аутентификации,
логирование, фильтрация, SSL и т.д.)
22.04.2015 Толстиков Никита 18ASP.NET
Приложения
• Могут быть двух типов:
– Контент
– WebService
• WebService’s могут быть двух типов:
– Unmanaged code (ISAPI и classic mode)
– Managed code and ASP.NET (integrated
mode from v6.0)
22.04.2015 Толстиков Никита 19ASP.NET
HttpApplication
• Базовый класс для ASP.NET
приложений
• Определяет методы, свойства и
события, которые являются общими для
всех объектов приложений ASP.NET
• Приложения пользователя наследуется
от него в файле Global.asax
22.04.2015 Толстиков Никита 20ASP.NET
Application LifeCicle
• Пользователь отправляет запрос
• ASP.NET создает окружение (сервис) которое может его обработать
• Запрос обрабатывается и возвращается ответ
22.04.2015 Толстиков Никита 21ASP.NET
Application LifeCicle
22.04.2015 Толстиков Никита 22ASP.NET
HttpHandler и HttpModule
22.04.2015 Толстиков Никита 23ASP.NET
• После запуска HttpApplication начинает
обрабатывать запросы
• Они проходят через 2 основные секции:
– HttpModule
– HttpHandler
HttpHandler
22.04.2015 Толстиков Никита 24ASP.NET
• Обработчик по расширению
HttpModule
22.04.2015 Толстиков Никита 25ASP.NET
• Обработчик по событиям
ASP.NET MVC
22.04.2015 Толстиков Никита 26ASP.NET
ASP.NET MVC
22.04.2015 Толстиков Никита 27ASP.NET
Application Events
22.04.2015 Толстиков Никита 28ASP.NET
Полный список
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 29ASP.NET
Routing
22.04.2015 Толстиков Никита 30ASP.NET
• Это процесс сопоставления URL запроса методу контроллера для обработки
• RouteTable – таблица сопоставления которую использует UrlRoutingModuleдля получения RouteData
• Событие приложения Start заполняет RouteTable
• Если для URL’а найдена корректная RouteData, то создается RequestContext
• Если путь не найден – то возвращается ошибка 404
Routing
22.04.2015 Толстиков Никита 31ASP.NET
public class RouteConfig{
public static void RegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home",
action = "Index", id = UrlParameter.Optional }
);}
}
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 32ASP.NET
IRouteHandler
22.04.2015 Толстиков Никита 33ASP.NET
• Интерфейс определяющий handler для запроса
• Наследник интерфейса может переопределить стандартный System.Web.Mvc.MvcRouteHandlerкоторый по умолчании вызывается для каждого запроса
public interface IRouteHandler{
IHttpHandler GetHttpHandler(RequestContext requestContext);}
IRouteHandler
22.04.2015 Толстиков Никита 34ASP.NET
• Переопределение hanbdler’а по
умолчанию:
routes.Add("MyHandler",new Route(url: "{controller}/{action}/{id}",
routeHandler: new HttpRouteHandler(),defaults: new RouteValueDictionary(new
{controller = "Home", action = "Index", id = UrlParameter.Optional
})));
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 35ASP.NET
IHttpHandler
22.04.2015 Толстиков Никита 36ASP.NET
• Обработчик запроса:
• IHttpHandler – это непосредственный
обработчик запроса
• MvcRouteHandler cоздает
MvcHttpHandler
public interface IHttpHandler{
bool IsReusable { get; }void ProcessRequest(HttpContext context);
}
MvcHttpHandler
22.04.2015 Толстиков Никита 37ASP.NET
• IHttpAsyncHandler – это интерфейс, который позволяет обрабатывать запросы не на потоках из пула приложения
• IRequireSessionState – это маркерный интерфейс, который сообщает о том, что обработчику нужны Session State переменные
public class MvcHttpHandler : UrlRoutingHandler, IHttpAsyncHandler, IHttpHandler, IRequiresSessionState
{...
}
MvcHandler
22.04.2015 Толстиков Никита 38ASP.NET
• IHttpAsyncHandler – это интерфейс, который позволяет обрабатывать запросы не на потоках из пула приложения
• IRequireSessionState – это маркерный интерфейс, который сообщает о том, что обработчику нужны Session State переменные
public class MvcHandler : UrlRoutingHandler, IHttpAsyncHandler, IHttpHandler, IRequiresSessionState
{...
}
Session State
22.04.2015 Толстиков Никита 39ASP.NET
• Session – позволяет хранить
сессионные данные для пользователя
• MVC – sessionless паттерн, по этому
лучше не пользоваться Session
• Есть множество альтернатив (application
state, cookies, view steta и т.д.)
public HttpSessionStateBase Session { get; }
...
Session["FirstName"] = HttpContext.User.Identity.Name;Session["Count"] = 0;
MvcHandler
22.04.2015 Толстиков Никита 40ASP.NET
protected internal virtual void ProcessRequest(HttpContextBase httpContext){IController controller;IControllerFactory factory;this.ProcessRequestInit(httpContext, out controller, out factory);try{controller.Execute(this.RequestContext);
}finally{factory.ReleaseController(controller);
}}
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 41ASP.NET
Controller
22.04.2015 Толстиков Никита 42ASP.NET
• Основной обработчик запроса
• Контроллер должен реализовывать
интерфейс IController
• Controller – абстрактный класс,
который реализовывает IController
• Параметры action, должны совпадать с
RouteData, чтобы
ControllerActionInvoker смог
сопоставить аргменты с URL
Controller
22.04.2015 Толстиков Никита 43ASP.NET
public class HomeController : Controller{
public ActionResult Index(){
return View("Index");}
public ActionResult User(string id){
return View("User", new UserModel{UserName = id});}
}
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 44ASP.NET
View Engine
22.04.2015 Толстиков Никита 45ASP.NET
• View – смесь кода и HTML разметки
• Движок генерации представлений делает “build” View
• ASP.NET WebForms использует ASPX View Engine
• В ASP.NET MVC принято использовать Razor View Engine
• Основным параметром View – является модель которую она использует
• View могут комбинироваться при помощи PartialView и Layout
View Engine
22.04.2015 Толстиков Никита 46ASP.NET
@model HelloWorldMVC.Models.UserModel@{
Layout = null;}<!DOCTYPE html><html><head>
<title>User Info</title></head><body>
<div><h1>@Model.UserName</h1><h2>User have roles:</h2>@foreach (var role in Model.Roles){
<p>role</p>}
</div></body></html>
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 47ASP.NET
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 48ASP.NET
The End
22.04.2015 Толстиков Никита 49ASP.NET
C Международным женским днем!...С появлением пер-вых подснежников, с первыми лучами солн-ца… Весна и
Сложностная криптография , весна 2008: Криптосистемы с открытым ключом, кодирующие один бит. Трудный