net framework и С#, весна 2015: webservices introduction

49
Толстиков Никита [email protected] Долгий путь HTTP запроса 22.04.2015 1 ASP.NET

Upload: cs-center

Post on 18-Jul-2015

214 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Net Framework и С#, весна 2015: WebServices Introduction

Толстиков Никита

[email protected]

Долгий путь HTTP запроса

22.04.2015 1ASP.NET

Page 2: Net Framework и С#, весна 2015: WebServices Introduction

План лекции

• IIS

• ASP.NET

• ASP.NET MVC

22.04.2015 Толстиков Никита 2ASP.NET

Page 3: Net Framework и С#, весна 2015: WebServices Introduction

Терминология

• Web Server:

– ПО которое обрабатывает запросы прешедшие через HTTP протокол

• Web Service:

– ПО спроектированное для взаимодействия между совместимыми сервисами через сеть

22.04.2015 Толстиков Никита 3ASP.NET

Page 4: Net Framework и С#, весна 2015: WebServices Introduction

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

Page 5: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET Model

22.04.2015 Толстиков Никита 5ASP.NET

Page 6: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET Web Forms

• Програмная модель напоминающая

разарботку по Windows Forms – controls и

events

• Каждый control инкапсулирует свой

JavaScript, CSS и HTML

• «Тяжелые контролы» включают в себя так же

таблицы, графики и AJAX

22.04.2015 Толстиков Никита 6ASP.NET

Page 7: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC

• Полный контроль над HTML разметкой

• Поддерживает Unit Testing, TDD и Agile

методологии

• Очень расширяемая и настраиваемая

22.04.2015 Толстиков Никита 7ASP.NET

Page 8: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET Web Pages

• Одна страница для кода и разметки

• Не нужно компилировать, сохранил и

обновил

• Легко расширить до ASP.NET MVC в

будущем

22.04.2015 Толстиков Никита 8ASP.NET

Page 9: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET Model

22.04.2015 Толстиков Никита 9ASP.NET

Page 10: Net Framework и С#, весна 2015: WebServices Introduction

Request/Response

22.04.2015 Толстиков Никита 10ASP.NET

IIS

Response

Requesthttp://app1

http://app2

Page 11: Net Framework и С#, весна 2015: WebServices Introduction

IIS

22.04.2015 Толстиков Никита 11ASP.NET

Page 12: Net Framework и С#, весна 2015: WebServices Introduction

IIS

• Разработанный Microsoft WebServer

• Поддерживает HTTP, HTTPS, FTP, FTPS,

SMTP и NNTP протоколы

22.04.2015 Толстиков Никита 12ASP.NET

Page 13: Net Framework и С#, весна 2015: WebServices Introduction

Путь HTTP запроса

22.04.2015 Толстиков Никита 13ASP.NET

Page 14: Net Framework и С#, весна 2015: WebServices Introduction

Путь 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

Page 15: Net Framework и С#, весна 2015: WebServices Introduction

IIS AppPool

22.04.2015 Толстиков Никита 15ASP.NET

Page 16: Net Framework и С#, весна 2015: WebServices Introduction

IIS AppPool

• Это дочерний процесс IIS (w3wp.exe)

который отвечает за обработку запросов к

своему набору URL-адресов и web-

приложений

• Такой поход помогает изолировать

приложения друг от друга

• Application pools существенно увеличивают

как надежность, так и управляемость Web

инфрструктуры

22.04.2015 Толстиков Никита 16ASP.NET

Page 17: Net Framework и С#, весна 2015: WebServices Introduction

IIS Site

22.04.2015 Толстиков Никита 17ASP.NET

Page 18: Net Framework и С#, весна 2015: WebServices Introduction

IIS Site

• Это контейнер для приложений и

виртуальных папок

• Адресс сайта определяется одним или

несколькими уникальными привязками(binds)

• Сайт позволяет манипулировать множеством

параметров как на уровне приложения

(сеттинги, авторизация, роли, сесии и т.д.) так

и на уровне IIS (тип аутентификации,

логирование, фильтрация, SSL и т.д.)

22.04.2015 Толстиков Никита 18ASP.NET

Page 19: Net Framework и С#, весна 2015: WebServices Introduction

Приложения

• Могут быть двух типов:

– Контент

– WebService

• WebService’s могут быть двух типов:

– Unmanaged code (ISAPI и classic mode)

– Managed code and ASP.NET (integrated

mode from v6.0)

22.04.2015 Толстиков Никита 19ASP.NET

Page 20: Net Framework и С#, весна 2015: WebServices Introduction

HttpApplication

• Базовый класс для ASP.NET

приложений

• Определяет методы, свойства и

события, которые являются общими для

всех объектов приложений ASP.NET

• Приложения пользователя наследуется

от него в файле Global.asax

22.04.2015 Толстиков Никита 20ASP.NET

Page 21: Net Framework и С#, весна 2015: WebServices Introduction

Application LifeCicle

• Пользователь отправляет запрос

• ASP.NET создает окружение (сервис) которое может его обработать

• Запрос обрабатывается и возвращается ответ

22.04.2015 Толстиков Никита 21ASP.NET

Page 22: Net Framework и С#, весна 2015: WebServices Introduction

Application LifeCicle

22.04.2015 Толстиков Никита 22ASP.NET

Page 23: Net Framework и С#, весна 2015: WebServices Introduction

HttpHandler и HttpModule

22.04.2015 Толстиков Никита 23ASP.NET

• После запуска HttpApplication начинает

обрабатывать запросы

• Они проходят через 2 основные секции:

– HttpModule

– HttpHandler

Page 24: Net Framework и С#, весна 2015: WebServices Introduction

HttpHandler

22.04.2015 Толстиков Никита 24ASP.NET

• Обработчик по расширению

Page 25: Net Framework и С#, весна 2015: WebServices Introduction

HttpModule

22.04.2015 Толстиков Никита 25ASP.NET

• Обработчик по событиям

Page 26: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC

22.04.2015 Толстиков Никита 26ASP.NET

Page 27: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC

22.04.2015 Толстиков Никита 27ASP.NET

Page 28: Net Framework и С#, весна 2015: WebServices Introduction

Application Events

22.04.2015 Толстиков Никита 28ASP.NET

Полный список

Page 29: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC LifeCicle

22.04.2015 Толстиков Никита 29ASP.NET

Page 30: Net Framework и С#, весна 2015: WebServices Introduction

Routing

22.04.2015 Толстиков Никита 30ASP.NET

• Это процесс сопоставления URL запроса методу контроллера для обработки

• RouteTable – таблица сопоставления которую использует UrlRoutingModuleдля получения RouteData

• Событие приложения Start заполняет RouteTable

• Если для URL’а найдена корректная RouteData, то создается RequestContext

• Если путь не найден – то возвращается ошибка 404

Page 31: Net Framework и С#, весна 2015: WebServices Introduction

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 }

);}

}

Page 32: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC LifeCicle

22.04.2015 Толстиков Никита 32ASP.NET

Page 33: Net Framework и С#, весна 2015: WebServices Introduction

IRouteHandler

22.04.2015 Толстиков Никита 33ASP.NET

• Интерфейс определяющий handler для запроса

• Наследник интерфейса может переопределить стандартный System.Web.Mvc.MvcRouteHandlerкоторый по умолчании вызывается для каждого запроса

public interface IRouteHandler{

IHttpHandler GetHttpHandler(RequestContext requestContext);}

Page 34: Net Framework и С#, весна 2015: WebServices Introduction

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

})));

Page 35: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC LifeCicle

22.04.2015 Толстиков Никита 35ASP.NET

Page 36: Net Framework и С#, весна 2015: WebServices Introduction

IHttpHandler

22.04.2015 Толстиков Никита 36ASP.NET

• Обработчик запроса:

• IHttpHandler – это непосредственный

обработчик запроса

• MvcRouteHandler cоздает

MvcHttpHandler

public interface IHttpHandler{

bool IsReusable { get; }void ProcessRequest(HttpContext context);

}

Page 37: Net Framework и С#, весна 2015: WebServices Introduction

MvcHttpHandler

22.04.2015 Толстиков Никита 37ASP.NET

• IHttpAsyncHandler – это интерфейс, который позволяет обрабатывать запросы не на потоках из пула приложения

• IRequireSessionState – это маркерный интерфейс, который сообщает о том, что обработчику нужны Session State переменные

public class MvcHttpHandler : UrlRoutingHandler, IHttpAsyncHandler, IHttpHandler, IRequiresSessionState

{...

}

Page 38: Net Framework и С#, весна 2015: WebServices Introduction

MvcHandler

22.04.2015 Толстиков Никита 38ASP.NET

• IHttpAsyncHandler – это интерфейс, который позволяет обрабатывать запросы не на потоках из пула приложения

• IRequireSessionState – это маркерный интерфейс, который сообщает о том, что обработчику нужны Session State переменные

public class MvcHandler : UrlRoutingHandler, IHttpAsyncHandler, IHttpHandler, IRequiresSessionState

{...

}

Page 39: Net Framework и С#, весна 2015: WebServices Introduction

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;

Page 40: Net Framework и С#, весна 2015: WebServices Introduction

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);

}}

Page 41: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC LifeCicle

22.04.2015 Толстиков Никита 41ASP.NET

Page 42: Net Framework и С#, весна 2015: WebServices Introduction

Controller

22.04.2015 Толстиков Никита 42ASP.NET

• Основной обработчик запроса

• Контроллер должен реализовывать

интерфейс IController

• Controller – абстрактный класс,

который реализовывает IController

• Параметры action, должны совпадать с

RouteData, чтобы

ControllerActionInvoker смог

сопоставить аргменты с URL

Page 43: Net Framework и С#, весна 2015: WebServices Introduction

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});}

}

Page 44: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC LifeCicle

22.04.2015 Толстиков Никита 44ASP.NET

Page 45: Net Framework и С#, весна 2015: WebServices Introduction

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

Page 46: Net Framework и С#, весна 2015: WebServices Introduction

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>

Page 47: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC LifeCicle

22.04.2015 Толстиков Никита 47ASP.NET

Page 48: Net Framework и С#, весна 2015: WebServices Introduction

ASP.NET MVC LifeCicle

22.04.2015 Толстиков Никита 48ASP.NET

Page 49: Net Framework и С#, весна 2015: WebServices Introduction

The End

22.04.2015 Толстиков Никита 49ASP.NET