connect to signalr hub

c#, javascript, jquery, signalr

Solution

Change

$(function ()
    {
    var connection = $.hubConnection("http://localhost:1968");
    connection.start()
        .done(function () {
            console.log('connected');
            connection.send("success?");
        })
        .fail(function (a) {
            console.log('not connected'+a);
        });
});

to

$(function ()
{
var connection = $.hubConnection("http://localhost:1968");
var hub = connection.createHubProxy("echo");
hub.on("AddMessage", Method);
connection.start({ jsonp: true })
            .done(function () {
            console.log('connected');
            hub.say("success?");
        })
        .fail(function (a) {
            console.log('not connected'+a);
        });
});

function Method(messageFromHub)
{
alert(messageFromHub);
}

and

class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
        app.MapSignalR();
    } 
} 

to

class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
        app.MapSignalR(new HubConfiguration() { EnableJSONP = true });} 
} 

It should do.

app.MapSignalR(new HubConfiguration() { EnableJSONP = true });} 

and

connection.start({ jsonp: true })

Will allow cross site request

Problem

I have created a simple SignalR hub inside a console application: ``` class Program { static void Main(string[] args) { using (WebApp.Start<Startup>("http://localhost:1968")) { Console.WriteLine("Server running!"); Console.ReadLine(); } } } public static class UserHandler { public static HashSet<string> ConnectedIds = new HashSet<string>(); } [HubName("echo")] public class EchoHub : Hub { public void Say(string message) { Trace.WriteLine("hub: "+message); Clients.All.AddMessage(message); } public override Task OnConnected() { UserHandler.ConnectedIds.Add(Context.ConnectionId); return base.OnConnected(); } public override Task OnDisconnected() { UserHandler.ConnectedIds.Remove(Context.ConnectionId); return base.OnDisconnected(); } } class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } ``` When I try to connect this from a Silverlight App, it succeeds: ``` static Microsoft.AspNet.SignalR.Client.HubConnection signalR { get; set; } public static Microsoft.AspNet.SignalR.Client.IHubProxy signalRhub { get; set; } public static void StartSignalR() { var url = "http://localhost:1968"; signalR = new Microsoft.AspNet.SignalR.Client.HubConnection(url); signalR.Received += signalR_Received; signalRhub = signalR.CreateHubProxy("echo"); signalR.Start().Wait(); signalRhub.Invoke("Say", "hub invoked"); } ``` My next step is to connect the SignalR hub from jquery: ``` <script src="../Scripts/jquery-1.6.4.js"></script> <script src="../Scripts/jquery.signalR-2.1.0.js"></script> <script> $(function () { var connection = $.hubConnection("http://localhost:1968"); connection.start() .done(function () { console.log('connected'); connection.send("success?"); }) .fail(function (a) { console.log('not connected'+a); }); }); </script> ``` When I try to run this script, it gives the error: ``` "XMLHttpRequest cannot load localhost:1968/signalr/negotiate?clientProtocol=1.4&_=1404978593482. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin <code>http://localhost:55282</code> is therefore not allowed access." ``` Why can I connect to the hub from my Silverlight page (hosted in localhost:3926) and fails it when I run the jquery script (hosted in localhost:55282)? What can I do to get a working connection between my jQuery and SignalR hub?

Original source