I am trying to use SignalR with cross domain but i am getting error message when calling start function. Error message is "Uncaught TypeError: Cannot call method 'start' of undefined "
I am using code Server side:
[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
EnableJSONP = true
};
map.RunSignalR(hubConfiguration);
});
}
}
}
Client side code.
<!DOCTYPE html>
<html xmlns="">
<head>
<title></title>
<script src="/Scripts/jquery-1.6.4.min.js"></script>
<script src="/Scripts/jquery.signalR-1.1.4.min.js"></script>
</head>
<body>
<div></div>
<script type="text/javascript">
var connection = $.connection.hub.url ='http://localhost:9370/signalr';
connection.hub.start()
.done(function () {
alert('Now connected, connection ID=' + connection.id);
});
</script>
</body>
</html>
I am trying to use SignalR with cross domain but i am getting error message when calling start function. Error message is "Uncaught TypeError: Cannot call method 'start' of undefined "
I am using code Server side:
[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
EnableJSONP = true
};
map.RunSignalR(hubConfiguration);
});
}
}
}
Client side code.
<!DOCTYPE html>
<html xmlns="http://www.w3/1999/xhtml">
<head>
<title></title>
<script src="/Scripts/jquery-1.6.4.min.js"></script>
<script src="/Scripts/jquery.signalR-1.1.4.min.js"></script>
</head>
<body>
<div></div>
<script type="text/javascript">
var connection = $.connection.hub.url ='http://localhost:9370/signalr';
connection.hub.start()
.done(function () {
alert('Now connected, connection ID=' + connection.id);
});
</script>
</body>
</html>
Share
Improve this question
edited Jan 31, 2014 at 15:25
Lin
15.2k4 gold badges49 silver badges49 bronze badges
asked Jan 30, 2014 at 6:52
yogesh singhyogesh singh
1051 gold badge1 silver badge10 bronze badges
2 Answers
Reset to default 12There are problems with the initialization and start of your Signalr connection, also declare a proxy to reference the hub. See below example:
<script src="/Scripts/jquery-1.6.4.min.js"></script>
<script src="/Scripts/jquery.signalR-1.1.4.min.js"></script>
<script src="http://localhost:9370/signalr/hubs"></script>
<script type="text/javascript">
$.connection.hub.url ='http://localhost:9370/signalr';
var yourHubProxy = $.connection.YourHubName;
//Do something here with yourHubProxy
$.connection.hub.start().done(function () {
alert('Now connected, connection ID=' + $.connection.hub.id);
});
</script>
Another thing, I'm not sure why you're using different versions of SignalR
in your server side and client side. To me you had SignalR 2.x
on your server side and SignalR 1.1.4
on your cient side.
Take a look at the following link, it's good an example about SignalR with cross domain. http://damienbod.wordpress./2013/11/01/signalr-messaging-with-console-server-and-client-web-client-wpf-client/
@Lin has already answered the question , but i want to inform one important point related to CROSS DOMAIN connection.
Mostly when you googled this issue , we used to find all examples using localhost for ex: http://localhost:9370
As you're binding to localhost only , so it will not work if you are trying to access from other address like http://dev-domain:9370/signalr/hubs remotely you will get HTTP Error 400 i.e the request hostname is invalid.
In order to bind all addresses on the machine ,we have to use it like this http://*:8097
If anyone found issue after this , check the firewall please :)