.Net Framework и С#, весна 2015: WebServices Introduction
Transcript of .Net Framework и С#, весна 2015: WebServices Introduction
![Page 1: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/1.jpg)
Толстиков Никита
Долгий путь HTTP запроса
22.04.2015 1ASP.NET
![Page 2: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/2.jpg)
План лекции
• IIS
• ASP.NET
• ASP.NET MVC
22.04.2015 Толстиков Никита 2ASP.NET
![Page 3: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/3.jpg)
Терминология
• Web Server:
– ПО которое обрабатывает запросы прешедшие через HTTP протокол
• Web Service:
– ПО спроектированное для взаимодействия между совместимыми сервисами через сеть
22.04.2015 Толстиков Никита 3ASP.NET
![Page 4: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/4.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/5.jpg)
ASP.NET Model
22.04.2015 Толстиков Никита 5ASP.NET
![Page 6: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/6.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/7.jpg)
ASP.NET MVC
• Полный контроль над HTML разметкой
• Поддерживает Unit Testing, TDD и Agile
методологии
• Очень расширяемая и настраиваемая
22.04.2015 Толстиков Никита 7ASP.NET
![Page 8: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/8.jpg)
ASP.NET Web Pages
• Одна страница для кода и разметки
• Не нужно компилировать, сохранил и
обновил
• Легко расширить до ASP.NET MVC в
будущем
22.04.2015 Толстиков Никита 8ASP.NET
![Page 9: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/9.jpg)
ASP.NET Model
22.04.2015 Толстиков Никита 9ASP.NET
![Page 10: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/10.jpg)
Request/Response
22.04.2015 Толстиков Никита 10ASP.NET
IIS
Response
Requesthttp://app1
http://app2
![Page 11: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/11.jpg)
IIS
22.04.2015 Толстиков Никита 11ASP.NET
![Page 12: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/12.jpg)
IIS
• Разработанный Microsoft WebServer
• Поддерживает HTTP, HTTPS, FTP, FTPS,
SMTP и NNTP протоколы
22.04.2015 Толстиков Никита 12ASP.NET
![Page 13: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/13.jpg)
Путь HTTP запроса
22.04.2015 Толстиков Никита 13ASP.NET
![Page 14: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/14.jpg)
Путь 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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/15.jpg)
IIS AppPool
22.04.2015 Толстиков Никита 15ASP.NET
![Page 16: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/16.jpg)
IIS AppPool
• Это дочерний процесс IIS (w3wp.exe)
который отвечает за обработку запросов к
своему набору URL-адресов и web-
приложений
• Такой поход помогает изолировать
приложения друг от друга
• Application pools существенно увеличивают
как надежность, так и управляемость Web
инфрструктуры
22.04.2015 Толстиков Никита 16ASP.NET
![Page 17: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/17.jpg)
IIS Site
22.04.2015 Толстиков Никита 17ASP.NET
![Page 18: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/18.jpg)
IIS Site
• Это контейнер для приложений и
виртуальных папок
• Адресс сайта определяется одним или
несколькими уникальными привязками(binds)
• Сайт позволяет манипулировать множеством
параметров как на уровне приложения
(сеттинги, авторизация, роли, сесии и т.д.) так
и на уровне IIS (тип аутентификации,
логирование, фильтрация, SSL и т.д.)
22.04.2015 Толстиков Никита 18ASP.NET
![Page 19: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/19.jpg)
Приложения
• Могут быть двух типов:
– Контент
– 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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/20.jpg)
HttpApplication
• Базовый класс для ASP.NET
приложений
• Определяет методы, свойства и
события, которые являются общими для
всех объектов приложений ASP.NET
• Приложения пользователя наследуется
от него в файле Global.asax
22.04.2015 Толстиков Никита 20ASP.NET
![Page 21: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/21.jpg)
Application LifeCicle
• Пользователь отправляет запрос
• ASP.NET создает окружение (сервис) которое может его обработать
• Запрос обрабатывается и возвращается ответ
22.04.2015 Толстиков Никита 21ASP.NET
![Page 22: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/22.jpg)
Application LifeCicle
22.04.2015 Толстиков Никита 22ASP.NET
![Page 23: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/23.jpg)
HttpHandler и HttpModule
22.04.2015 Толстиков Никита 23ASP.NET
• После запуска HttpApplication начинает
обрабатывать запросы
• Они проходят через 2 основные секции:
– HttpModule
– HttpHandler
![Page 24: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/24.jpg)
HttpHandler
22.04.2015 Толстиков Никита 24ASP.NET
• Обработчик по расширению
![Page 25: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/25.jpg)
HttpModule
22.04.2015 Толстиков Никита 25ASP.NET
• Обработчик по событиям
![Page 26: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/26.jpg)
ASP.NET MVC
22.04.2015 Толстиков Никита 26ASP.NET
![Page 27: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/27.jpg)
ASP.NET MVC
22.04.2015 Толстиков Никита 27ASP.NET
![Page 28: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/28.jpg)
Application Events
22.04.2015 Толстиков Никита 28ASP.NET
Полный список
![Page 29: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/29.jpg)
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 29ASP.NET
![Page 30: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/30.jpg)
Routing
22.04.2015 Толстиков Никита 30ASP.NET
• Это процесс сопоставления URL запроса методу контроллера для обработки
• RouteTable – таблица сопоставления которую использует UrlRoutingModuleдля получения RouteData
• Событие приложения Start заполняет RouteTable
• Если для URL’а найдена корректная RouteData, то создается RequestContext
• Если путь не найден – то возвращается ошибка 404
![Page 31: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/31.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/32.jpg)
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 32ASP.NET
![Page 33: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/33.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/34.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/35.jpg)
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 35ASP.NET
![Page 36: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/36.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/37.jpg)
MvcHttpHandler
22.04.2015 Толстиков Никита 37ASP.NET
• IHttpAsyncHandler – это интерфейс, который позволяет обрабатывать запросы не на потоках из пула приложения
• IRequireSessionState – это маркерный интерфейс, который сообщает о том, что обработчику нужны Session State переменные
public class MvcHttpHandler : UrlRoutingHandler, IHttpAsyncHandler, IHttpHandler, IRequiresSessionState
{...
}
![Page 38: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/38.jpg)
MvcHandler
22.04.2015 Толстиков Никита 38ASP.NET
• IHttpAsyncHandler – это интерфейс, который позволяет обрабатывать запросы не на потоках из пула приложения
• IRequireSessionState – это маркерный интерфейс, который сообщает о том, что обработчику нужны Session State переменные
public class MvcHandler : UrlRoutingHandler, IHttpAsyncHandler, IHttpHandler, IRequiresSessionState
{...
}
![Page 39: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/39.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/40.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/41.jpg)
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 41ASP.NET
![Page 42: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/42.jpg)
Controller
22.04.2015 Толстиков Никита 42ASP.NET
• Основной обработчик запроса
• Контроллер должен реализовывать
интерфейс IController
• Controller – абстрактный класс,
который реализовывает IController
• Параметры action, должны совпадать с
RouteData, чтобы
ControllerActionInvoker смог
сопоставить аргменты с URL
![Page 43: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/43.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/44.jpg)
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 44ASP.NET
![Page 45: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/45.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/46.jpg)
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](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/47.jpg)
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 47ASP.NET
![Page 48: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/48.jpg)
ASP.NET MVC LifeCicle
22.04.2015 Толстиков Никита 48ASP.NET
![Page 49: .Net Framework и С#, весна 2015: WebServices Introduction](https://reader031.fdocuments.us/reader031/viewer/2022032217/55a96cca1a28ab7f358b4682/html5/thumbnails/49.jpg)
The End
22.04.2015 Толстиков Никита 49ASP.NET