我是SignalR的新手。我读过这篇文章http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client 并试图做一些测试。当它们不是跨域时,测试是成功的。但是,如果我跨域,它似乎没有连接,我不知道为什么。我在这个网站上看到了一些类似问题,但我的问题似乎并没有落在讨论的场景中。
这是我的简单创业:
using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Microsoft.Owin.Cors;
using Owin;
[assembly: OwinStartup(typeof(HandleTransientState.Startup))]
namespace HandleTransientState
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
map.RunSignalR();
});
}
}
}
我的简单中心:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace HandleTransientState
{
[HubName("echo")]
public class EchoHub : Hub
{
public string sayhello()
{
return "Hello from server!";
}
}
}
最后我的客户:(我检查并确保端口与"服务器"的端口匹配,基本上客户端和服务器在同一台机器上,因此不应该有任何网络或防火墙问题。当客户端启动时,我只收到了来自客户端的消息,而不是来自服务器的消息'来自服务器'在进一步调查后,它似乎是$ .connection.hub .start()没有成功。请帮忙。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Scripts/jquery-1.6.4.js"></script>
<script src="Scripts/jquery.signalR-2.2.0.js"></script>
<script src="http://localhost:55825/signalr/hubs"></script>
<script>
$(function () {
var echo = $.connection.echo;
$.connection.hub.url = "http://localhost:55825/signalr";
echo.client.greetings = function (m) {
$('#messages').append($('<li/>').html(m));
};
echo.client.greetings('Hello from client...');
$.connection.hub
.start()
.done(
function () {
echo.greetings('Trying to connect to the server...');
echo.server.sayhello()
.done(function (m) {
$('#messages').append($('<li/>').html(m));
});
});
});
</script>
</head>
<body>
<ul id="messages"></ul>
</body>
</html>
更新
在$ .connection.hub.start()完成后调用echo.client.greetings,执行了调用。刚刚跳过启动集线器,没有错误,没有失败......