Created
November 30, 2013 18:31
-
-
Save darrelmiller/7722664 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
using System.Web.Http; | |
using System.Web.Http.Owin; | |
using Microsoft.Owin; | |
using Microsoft.Owin.BuilderProperties; | |
using Microsoft.Owin.Host.HttpListener; | |
namespace SampleServer | |
{ | |
public static class OwinHttpListenerHelper | |
{ | |
public static IDisposable CreateHttpListenerServer(Uri baseAddress, OwinMiddleware middleware) | |
{ | |
var props = new Dictionary<string, object>(); | |
var address = Address.Create(); | |
address.Host = baseAddress.Host; | |
address.Port = baseAddress.Port.ToString(); | |
address.Scheme = baseAddress.Scheme; | |
address.Path = baseAddress.AbsolutePath; | |
props["host.Addresses"] = new List<IDictionary<string, object>> { address.Dictionary }; | |
OwinServerFactory.Initialize(props); | |
var server = OwinServerFactory.Create((env) => middleware.Invoke(new OwinContext(env)), props); | |
return server; | |
} | |
} | |
public class OwinPipelineBuilder | |
{ | |
private readonly List<Func<OwinMiddleware, OwinMiddleware>> _list = new List<Func<OwinMiddleware, OwinMiddleware>>(); | |
public OwinPipelineBuilder Add(Func<OwinMiddleware, OwinMiddleware> owinMiddlewareFactory) | |
{ | |
_list.Add(owinMiddlewareFactory); | |
return this; | |
} | |
public OwinMiddleware Build() | |
{ | |
OwinMiddleware next = null; | |
foreach (var factory in Enumerable.Reverse(_list)) | |
{ | |
next = factory(next); | |
} | |
return next; | |
} | |
} | |
public class WebApiOwinMiddleware : OwinMiddleware | |
{ | |
private readonly HttpMessageHandlerAdapter _handler; | |
public WebApiOwinMiddleware(HttpConfiguration config, OwinMiddleware next) | |
: base(next) | |
{ | |
var app = new HttpServer(config); | |
_handler = new HttpMessageHandlerAdapter(next, app, new OwinBufferPolicySelector()); | |
} | |
public override Task Invoke(IOwinContext context) | |
{ | |
return _handler.Invoke(context); | |
} | |
} | |
} | |
+ var baseAddress = new Uri("http://birch:1001/"); | |
+ | |
+ | |
+ var app = new OwinPipelineBuilder() | |
+ .Add((next) => new OwinMiddleware1(next)) | |
+ .Add((next) => new OwinMiddleware2(next)) | |
+ .Add((next) => | |
+ { | |
+ var config = new HttpSelfHostConfiguration(baseAddress); | |
+ Configure(config); | |
+ return new WebApiOwinMiddleware(config, next); | |
+ }) | |
+ .Build(); | |
+ | |
+ | |
+ var server = OwinHttpListenerHelper.CreateHttpListenerServer(baseAddress, app); | |
+ | |
+ Console.WriteLine("Started"); | |
+ Console.ReadKey(); | |
+ Console.WriteLine("Stopped"); | |
+ | |
+ server.Dispose(); | |
+ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment