Introduction To ASP.Net SignalR Self Hosting


This article explains the self hosting of ASP.NET SignalR. Generally an ASP.NET SignalR application is hosted in the IIS, but you can also self-host your application using the self-host library. OWIN is the base of the SignalR library. You also know that OWIN is used to do a decoupled architecture between web server and web application, from this great feature OWIN is the ideal feature to self-host a SignalR application.

The following are reasons to not host in IIS:

  • The availability of IIS. You can also use an existing server.
  • The IIS performance.
  • The functionality of SignalR is to be added to an existing application that runs on a Windows Service or any other process.

Let's proceed with the following sections:

  • Self Hosting Application
  • Accessing Hosting Application

Self Hosting Application

In this section we will create a console application for self hosting. Use the following procedure.

Step 1: Open Visual Studio and create a console application.


Step 2: Open the Package Manager Console from the Tools/Library Package Manager.


Step 3: Write the following command:

install-package Microsoft.AspNet.SignalR.SelfHost -pre


Step 4: Now paste the following code in the Progran.cs file:

using System;

using Microsoft.AspNet.SignalR;

using Microsoft.Owin.Hosting;

using Owin;


namespace SignalRHostApp


    class Program


        static void Main(string[] args)


            string url = "http://localhost:6118";

            using (WebApp.Start<Startup>(url))


                Console.WriteLine("The Server URL is: {0}", url);






    class Startup


        public void Configuration(IAppBuilder MyApp)






    public class ChatHub : Hub


        public void LetsChat(string Cl_Name, string Cl_Message)


            Clients.All.NewMessage(Cl_Name, Cl_Message);





Step 5: Run your application.




Step 6: If you get an exception named System.Reflection.TargetInvocationException that was unhandled then it might be possible that you did not open Visual Studio as an Administrator.


Step 7: Stop the execution.


Accessing Hosting Application


In this section I am developing an ASP.NET SignalR application as I described in my previous article, but the only difference is that the URL is provided explicitly. Proceed with the following procedure.


Step 1: Add a new project by right-clicking on your solution.






Step 2: Select an Empty project template.




Step 3: Set the Client App project as a Startup project. Open the Package Manager Console and write the following command:


Install-Package Microsoft.AspNet.SignalR -pre


Step 4: Add an HTML page to your project.




Step 5: Copy the following code into your HTML file:


<!DOCTYPE html>

<html xmlns="">


    <title>ASP.NET SignalR Chat</title>


    <style type="text/css">

        .wrapper {

            background-color: #99CCFF;

            border: thick solid #808080;

            padding: 20px;

            margin: 20px;






    <div class="container">

        <input type="text" id="TxtMessage" />

        <input type="button" id="BtnSend" value="Send" />

        <input type="hidden" id="UserName" />

        <ul id="Chats"></ul>




    <script src="Scripts/jquery-1.6.4.min.js"></script>

    <script src="Scripts/jquery.signalR-2.0.0-rc1.min.js"></script>

    <script src="http://localhost:6118/signalr/hubs"></script>


    <script type="text/javascript">


        $(function () {


            $.connection.hub.url = "http://localhost:6118/signalr";


            var chat = $.connection.chatHub;

            chat.client.NewMessage = function (Cl_Name, Cl_Message) {


                var User = $('<div />').text(Cl_Name).html();

                var UserChat = $('<div />').text(Cl_Message).html();


                $('#Chats').append('<li><strong>' + User

                    + '</strong>: ' + UserChat + '</li>');


            $('#UserName').val(prompt('Please Enter Your Name:', ''));


            $.connection.hub.start().done(function () {

                $('#BtnSend').click(function () {

                    chat.server.LetsChat($('#UserName').val(), $('#TxtMessage').val());











Step 6: In your Solution Explorer, select your solution and choose "Set Startup Projects" by right-clicking.


Step 7: Do as directed below:


Step 8: Set HtmlPage as a Start Page and run your application. It will run as described in my previous article.


This article will help you to self-host your application and use a SignalR application with OWIN. You will create a server and a client using a console and web application. Thanks for reading.