| Суббота, 6 июля, 2013
Метки: OWIN Комментарии: 0
Итак, давайте построим OWIN совместимый модуль.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OWINProjectClassLibrary { using AppFunc = Func<IDictionary<string, object>, Task>; public class TestLogger { private readonly AppFunc next; public TestLogger(AppFunc next) { if (next == null) { throw new ArgumentNullException("next"); } this.next = next; } public Task Invoke(IDictionary<string, object> environment) { System.Diagnostics.Trace.WriteLine( string.Format("Hitting TestLogger, path: {0}", environment["owin.RequestPath"])); return this.next(environment); } } }
В общем это все, что нужно для создания OWIN-совместимой библиотеки. На самом деле на данном этапе нам даже не нужно было подключать OWIN пакет через Nuget, но он нам понадобится дальше. Все, что делает наш модуль, это только пишет в вывод трассировки путь запроса, который был сделан серверу. Путь запроса был считан из переменной environment.
У нас уже есть модуль, но ничего нет для хостинга, то есть наш модуль некуда вставить для участия в процессе обработки веб-запросов. Нам нужен OWIN-совместимый хост, который загружает наш модуль и выполняет его код. Также нужно программно сконфигурировать это хост, чтобы включить наш модуль. Это очень похоже на то, как Internet Information Services хостит большинство приложений .NET.
Итак, мы собираемся добавить в наше решение веб-проект, который будет выступать в качестве исходной точки, позволяющей нам настроить модуль для использования его в цепочке обработки веб-запросов.
Install-Package Owin Install-Package Microsoft.Owin.Host.HttpListener -Pre(Если добавлять через окно Manage Nuget Package, то нужно не забыть, что HttpListener является предварительным релизом) После установки пакетов, соответствующие сборки появятся в проекте.
public class Startup { // Invoked once at startup to configure your application. public void Configuration(IAppBuilder builder) { builder.Use(typeof(TestLogger)); } }
Здесь можно увидеть, что мы задействовали экземпляр интерфейса IAppBuilder, который передается в качестве параметра в метод Configuration в через данный объект мы указываем хосту использовать наш компонент.
Owin-компоненты конфигурируются просто, и когда OWIN хост начитает свою работу и загружает сборки, то он использует Startup класс для вызова тех компонентов, которые указаны внутри метода Configuration.
Итак, на данный момент у нас есть OWIN-компонент и веб-проект, где мы будем строить и конфигурировать цепочку обработки HTTP-запросов. Еще нам нужен хост-процесс для загрузки этих сборок и вызова их функций с требуемой информацией.
Пришло время задействовать Проект Katana. Katana – это OWIN-хост, написанный Microsoft. Можно взять исходники Katanа, скомпилировать и запустить процесс. Но можно просто зайти в раздел Downloads проекта Katana и скачать zip-файл . Распакуйте его в любую удобную директорию.
Далее укажем веб-проекту, что запускать нужно OwinHost.exe и передать туда нашу сборку. Нажимаем правой клавишей на веб-проекте и открываем Properties. В открывшемся окне переходим на вкладку Web. Настройки нужно установить, примерно, как на рисунке ниже (пути должны быть свои).
Для ясности, поподробнее укажем параметры настроек:
D:/Katana/bin/OwinHost.exe
/p=8080 /v WebApplication.Startup
Запускаем веб-проект (один момент важный, обязательно нужно запустить студию с администраторскими правами), увидим консольное приложение:
Мы помним, что только один компонент был помещен в цепочку обработки HTTP-запросов – это наш компонент, который делает записи в логе. Еще у нас к веб-проекту подключен пакет Microsoft.Owin.Host.HttpListener, когда OwinHost запущен и ему не указан другой Http-сервер, то автоматически будет использоваться сборка Microsoft.Owin.Host.HttpListener.
Теперь запустим браузер и откроем адрес http://localhost:8080, страница, конечно же, никакая не откроется, потому что их нет, зато на консоли хоста мы увидим логи из нашего модуля, что свидетельствует о том, что он функционирует:
Copyright © CodeHint.ru 2013-2024 (v2.4.7 - работает на Angular Universal)Калькулятор инвест-портфеля