1.永久连接跨域设置
服务器端
//允许永久连接跨域
app.Map("/spy",map=> {
map.UseCors(CorsOptions.AllowAll);
//启用JSONP
var config = new ConnectionConfiguration() {
EnableJSONP=true
};
map.RunSignalR<ConnectionSpy>(config);
});
客户端
<script>
$(function () {
var connection = $.connection("http://localhost:54184/spy");
connection.logging = true;
connection.received(function (data) {
$('#requests').append('<li>'+data+'</li>');
});
connection.start().done(function () {
}).fail(function (err) {
alert(err);
});
});
</script>
2.Hub集线器设置
服务器端
[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);
});
}
}
}
客户端
我试图用signalr跨域但我得到错误消息调用Start函数时。错误消息"Uncaught TypeError: Cannot call method 'start' of undefined "
有你的signalr连接初始化和启动的问题,同时宣布代理参考中心。看下面的例子:
<!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>
<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>
另一件事,我不知道你为什么要使用不同版本的SignalR在你的服务器端和客户端。对我来说你有SignalR 2.x在你的服务器端和SignalR 1.1.4在你的有效方。