我正在尝试使用带有跨域的SignalR但是在调用start函数时我收到错误消息。错误讯息为"Uncaught TypeError: Cannot call method 'start' of undefined "
我正在使用代码 服务器端:
[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.org/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>
答案 0 :(得分:1)
我很晚但只是浏览了一下SignalR,现在才发现这个问题,现在就回答它。
connection.hub.start()
.done(function () {
alert('Now connected, connection ID=' + connection.id);
});
错误的是你正在启动集线器 connection.hub.start()
..但实际上你需要启动连接而不是集线器 connection.start()
。
connection.start()
.done(function () {
alert('Now connected, connection ID=' + connection.id);
});
如果您尝试跨域SignalR,这是我项目的工作代码..
var con = $.hubConnection('http://localhost:50000/signalR');
var hub = con.createHubProxy('DataExchangeHub');
hub.on('OnMsgReceiveAll', function (message) {
$('#message1').append('<li>' + message + '</li>');
});
hub.on('OnMsgReceiveClient', function (message) {
$('#message2').append('<li>' + message + '</li>');
});
hub.on('OnMsgReceiveServer', function (message) {
$('#message3').append('<li>' + message + '</li>');
});
con.start({ jsonp: true}).done(function () {
$('#sendToAll').click(function () {
hub.invoke('BroadcastToAll', $('#msg').val());
});
$('#sendToClient').click(function () {
hub.invoke('BroadcastToClient', $('#msg').val());
});
$('#sendToServer').click(function () {
hub.invoke('BroadcastToServer', $('#msg').val());
});
});
});
答案 1 :(得分:0)
我相信你应该为这样的服务器启用跨域,用于SignalR 1.x
var config = new HubConfiguration
{
EnableCrossDomain = true
};
对于singalR 2.x外观here