Skip to content

bbaia/connect-owin

Repository files navigation

Implement node.js connect middleware in .NET using OWIN.

Versions are incremented according to semver.

This is a fork of Tomasz Janczuk's original code; thanks go to him for getting this thing started!

Introduction

OWIN itself is not a technology, just a specification to decouple Web applications from the Web server. The goal of connect-owin is to implement this specification to use node.js, through connect framework, as the Web Server.

The connect-owin exports a function that returns a connect middleware. The function takes the path of the OWIN .NET assembly file as a parameter. The following code shows how to use connect-owin with express.js, a Web framework built on connect:

var owin = require('connect-owin'),
    express = require('express');

var app = express();
app.all('/net', owin('MyAssembly.dll'));
// ...
app.listen(3000);

.NET OWIN middlewares can be implemented in two ways with connect-owin:

  • By implementing the OWIN primary interface Func<IDictionary<string, object>, Task>:
public class Startup
{
  public Task Invoke(IDictionary<string, object> env) 
  {
    // ...
  }
}
  • By using the IAppBuilder interface that acts as the glue for any .NET OWIN middleware, exactly how connect in node.js works:
public class Startup
{
  public void Configuration(IAppBuilder builder)
  {
    // ...
  }
}

The connect-owin function uses <assembly name>.Startup as default type name, and Configuration as default method name. Custom type and method name can be provided via an options object:

owin({
    assemblyFile: 'MyAssembly.dll',
    typeName: 'MyNamespace.MyType',
    methodName: 'MyMethodName'
});

Requirements

Building

Grunt is used to build, test and preview the sample on all platforms.

First, install connect-owin dependencies:

$ npm install

Then, you'll need to install Grunt's command line interface (CLI) globally:

$ npm install -g grunt-cli

You can build sources, run tests and preview the sample by using the default Grunt task:

$ grunt

Building sources

$ grunt build

The build creates the lib\clr\Connect.Owin.dll file required by the lib\connect-owin.js library.

Running the sample

Using Grunt

The following command uses the grunt-contrib-connect task to start a connect web server with the .NET OWIN application plugged in as a middleware and open the page in your default browser:

$ grunt hello

Using express.js

An express.js sample is also provided to run the .NET OWIN application:

$ cd examples\hello
$ npm install express
$ node server.js

Then go to http://localhost:3000/node. This should display a message from an express middleware in node.js.

If you go to http://localhost:3000/net, you should see a similar message from the .NET OWIN application in Owin.Connect.Examples.Hello.dll plugged in as a middleware to the express pipeline.

Using webpack-dev-server

A webpack sample is also provided to allow the webpack development server to serve your .NET OWIN application:

$ npm install -g webpack
$ npm install -g webpack-dev-server
$ webpack-dev-server --config webpack.config.js

Then go to http://localhost:8080/net. This should display a message from the .NET OWIN application.

More samples available @ connect-owin-samples

Running tests

$ grunt test

mocha is used to run tests.