| Суббота, 6 июля, 2013
Метки: OWIN Комментарии: 0
Сейчас у нас есть все для быстрого добавления других компонентов в цепочку обработки HTTP-запросов. И теперь получим полное понимание взаимодействия различных частей построенной системы. Вспомним, что мы создали свой веб-сервер, который делает только то что, мы хотим. Концептуально это можно изобразить так:
Теперь создадим еще один компонент, но проект для него создавать не будем. Просто добавим следующий метод в классе Startup в веб-проекте.
// Invoked once per request. public Task Invoke(IDictionary<string, object> environment) { var responseBytes = System.Text.ASCIIEncoding.UTF8.GetBytes( string.Format("Serviced request on {0} at {1}", DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString())); Stream responseStream = (Stream)environment["owin.ResponseBody"]; IDictionary<string, string[]> responseHeaders = (IDictionary<string, string[]>)environment["owin.ResponseHeaders"]; responseHeaders["Content-Length"] = new string[] { responseBytes.Length.ToString(CultureInfo.InvariantCulture) }; responseHeaders["Content-Type"] = new string[] { "text/plain" }; return responseStream.WriteAsync(responseBytes, 0, responseBytes.Length); }
Затем в методе Configuration добавим одну строку кода для нового компонента:
builder.Use(new Func<AppFunc, AppFunc>(ignoredNextApp => (AppFunc)Invoke));
Запустим веб-проект, и откроем в браузере адрес http://localhost:8080. Появится ответ сервера, подобно этому:
В методе Invoke происходит следующее:
Для включения в работу кода метода Invoke в процесс обработки HTTP-запросов, добавили новый компонент в методе Configuration. Для этого просто вставили делегат новой функции. После этого концептуальная модель стала выглядеть так:
Все без каких-либо внешних зависимостей и при этом с небольшим количеством кода.
После всего приведенного выше, можно наконец увидеть, что концепция и архитектура Owin компонуема и модульна. Существует уже большое количество Owin-совместимых компонентов, таких как SignalR, FubuMVC, NancyFx. Эти компоненты могут быть включены в цепочку обработки HTTP-запросов и вся сила каждого компонента может быть использована в приложении.
И это только начало. Представьте, что вы можете строить веб-сервер только с теми возможностями, которые нужны. Открытый, компонуемый, модульный мир открыт!
Copyright © CodeHint.ru 2013-2024 (v2.4.7 - работает на Angular Universal)Калькулятор инвест-портфеля