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

Post on 18-Jul-2015

214 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

tolstikov.n.s@gmail.com

Долгий путь 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

top related