Run different frameworks side-by-side with OWIN
.net, owin
Solution
Although the use case sounds a bit absurd, you're absolutely right that OWIN enables this. You can compose your pipeline in all kinds of crazy ways.
Straight Pipeline
A typical "straight" pipeline would look something like this:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseWebApi(new MyHttpConfiguration());
app.MapSignalR();
app.UseNancy();
}
}
This will work as follows (given you're hosting on `http://localhost/`)
- WebAPI - `http://localhost/api/*` (default routing)
- SignalR - `http://localhost/signalr` (default route)
- Nancy - `http://localhost/*` (will handle everything else)
Branched Pipeline
You can also create branches in your pipeline:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseWebApi(new MyHttpConfiguration());
app.Map("/newSite", site =>
{
site.MapSignalR();
site.UseNancy();
});
}
}
This will work as follows (given you're hosting on `http://localhost/`)
- WebAPI - `http://localhost/api/*` (default routing)
- SignalR - `http://localhost/newSite/signalr` (default route)
- Nancy - `http://localhost/newSite/*` (will handle everything else)
Problem
My impression of one of the big benefits of Owin is that it makes it easy to run different web frameworks side-by-side without IIS's `IHttpHandler`. (This would be huge for distributing vertical functionality slices as nuget features.) However every tutorial and article I find talks of things like self-host and a single framework. This is not what I'm interested in, I'm interested in running mvc, nancy, web api, maybe even webforms in the same application. Am I wrong about OWIN enabling this? Say I want - Mvc to handle most requests - Webforms to handle requests which have a version=legacy header - Nancy to handle requests to /Nancy/... How would I configure my `Startup` class to enable this?