Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Async signaling library for ASP.NET to help build real-time, multi-user interactive web applications.
branch: master

This branch is 4386 commits behind SignalR:master

Failed to load latest commit information.
.nuget Made changes to build.
Build Bump version to 0.3.3
Common Bump version to 0.3.3
SignalR.Client Fix issue with hub state and null values serializing window object. I…
SignalR.Ninject Fix issue with hub state and null values serializing window object. I…
SignalR.Samples Catch and log errors that occur while raising the received event.
SignalR.ScaleOut Made some chages to InProcessMessageStore.
SignalR.Tests Exclude all properties and only exclude methods defined on Hub, IHub …
SignalR Exclude all properties and only exclude methods defined on Hub, IHub …
lib
.gitignore Made changes to build.
LICENSE.md Added missing license information
README.md Fixed formatting again...
SignalR.sln Restrict what methods can be resolved in DefaultActionResolve by sharing
build.cmd Fix issue with hub state and null values serializing window object. I…

README.md

LICENSE

MIT License http://www.opensource.org/licenses/mit-license.php

Get it on NuGet!

SignalR is broken up into a few package on NuGet:

  • SignalR - A meta package that brings in SignalR.Server and SignalR.Js (you should install this)

  • SignalR.Server - Server side components needed to build SignalR endpoints

  • SignalR.Js - Javascript client for SignalR

  • SignalR.Client - .NET client for SignalR

  • SignalR.Ninject - Ninject dependeny resolver for SignalR

To get started:

Install-Package SignalR

RAW Connection API

Server

Create a class the derives from PersistentConnection:

using SignalR;

public class MyConnection : PersistentConnection {
    protected override Task OnReceivedAsync(string clientId, string data) {
        // Broadcast data to all clients
        return Connection.Broadcast(data);
    }
}

Setup Routing

Make a route for your connection:

Global.asax

using System;
using System.Web.Routing;
using SignalR.Routing;

public class Global : System.Web.HttpApplication {
    protected void Application_Start(object sender, EventArgs e) {
        // Register the route for chat
        RouteTable.Routes.MapConnection<MyConnection>("echo", "echo/{*operation}");
    }
}

Client

Javascript

Add these scripts to your page:

<script src="Scripts/jquery-1.6.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR.min.js" type="text/javascript"></script>

HTML:

<script type="text/javascript">
$(function () {
    var connection = $.connection('echo');

    connection.received(function (data) {
        $('#messages').append('<li>' + data + '</li>');
    });

    connection.start();

    $("#broadcast").click(function () {
        connection.send($('#msg').val());
    });
});
</script>

<input type="text" id="msg" />
<input type="button" id="broadcast" />

<ul id="messages">
</ul>

C# (Events)

var connection = new Connection("http://localhost/echo");
connection.Received += data => {
    Console.WriteLine(data);
};

connection.Start().Wait();
connection.Send("From C#");

C# (IObservable)

var connection = new Connection("http://localhost/echo");
connection.AsObservable()
          .Subscribe(Console.WriteLine);

connection.Start().Wait();
connection.Send("From C#");

Higher level API

Server

public class Chat : Hub {
    public void Send(string message) {
        // Call the addMessage method on all clients
        Clients.addMessage(message);
    }
}

Client

Javascript

Import the magic script to generate the server side proxy

<script src="Scripts/jquery-1.6.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR.min.js" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>

HTML:

<script type="text/javascript">
$(function () {
    // Proxy created on the fly
    var chat = $.connection.chat;

    // Declare a function on the chat hub so the server can invoke it
    chat.addMessage = function(message) {
        $('#messages').append('<li>' + message + '</li>');
    };

    $("#broadcast").click(function () {
        // Call the chat method on the server
        chat.send($('#msg').val())
            .fail(function(e) { alert(e); }) // Supports jQuery deferred
    });

    // Start the connection
    $.connection.hub.start();
});
</script>

<input type="text" id="msg" />
<input type="button" id="broadcast" />

<ul id="messages">
</ul>
Something went wrong with that request. Please try again.