SignalR .Net 客户端无法建立连接(404 未找到)
SignalR .Net Client can't establish conection (404 not found)
我有一个使用 SignalR 的解决方案。在其中一个项目中有一个 Hub,在连接到该 Hub 的其他项目中有 SignalR.Client。
该解决方案托管在两台服务器上,我遇到了一个奇怪的问题。在一台服务器上一切正常,但在另一台服务器上,当我尝试从 SignalR.Client.
建立连接时出现 404 not found 错误
集线器代码:
public class GlobalHub : Hub
{
public void Hello()
{
Clients.All.hello();
}
public void Notify(string user,NotificationViewModel model)
{
Clients.Group(user).notify(model);
}
public override System.Threading.Tasks.Task OnConnected()
{
string name = Env.UserId().ToString();
Groups.Add(Context.ConnectionId, name);
return base.OnConnected();
}
}
Global.asax 枢纽地图:
var hubConfiguration = new HubConfiguration
{
EnableDetailedErrors = true,
EnableJavaScriptProxies = true
};
RouteTable.Routes.MapHubs("/signalr",hubConfiguration);
连接尝试:
string portal = CommonHelper.GetPortalUrl("user");
if(portal.Contains(":50150"))
{
portal = portal.Replace(":50150", "");
}
var connection = new HubConnection(portal+"signalr",false);
IHubProxy myHub = connection.CreateHubProxy("GlobalHub");
connection.Start().Wait();
myHub.Invoke("Notify", userID.ToString(), result2);
我很确定我的连接 url 是正确的,我检查了 50 次。
这一行出现错误:
onnection.Start().Wait();
SS 错误:
谢谢
问题可能是在两台服务器上托管 SignalR 项目时,连接到其中一台的客户端只能连接到连接到同一台服务器的其他客户端。这是因为 SignalR 不会自动通过所有服务器广播消息。
http://www.asp.net/signalr/overview/performance/scaleout-in-signalr
试试看这里,希望对你有所帮助。建议的解决方案之一是使用 Redis Pub/Sub (http://redis.io/topics/pubsub) solution, or Azure Service Bus (http://azure.microsoft.com/en-us/services/service-bus/) - 两者都用作背板(当服务器收到一条消息时,它会广播给所有的人和那个需要的可以用)。
谢谢我解决了问题。原来是服务器的问题。服务器本身无法识别 url(在 url 上抛出 404)。
问题解决后,SignalR 开始工作
我有一个使用 SignalR 的解决方案。在其中一个项目中有一个 Hub,在连接到该 Hub 的其他项目中有 SignalR.Client。 该解决方案托管在两台服务器上,我遇到了一个奇怪的问题。在一台服务器上一切正常,但在另一台服务器上,当我尝试从 SignalR.Client.
建立连接时出现 404 not found 错误集线器代码:
public class GlobalHub : Hub
{
public void Hello()
{
Clients.All.hello();
}
public void Notify(string user,NotificationViewModel model)
{
Clients.Group(user).notify(model);
}
public override System.Threading.Tasks.Task OnConnected()
{
string name = Env.UserId().ToString();
Groups.Add(Context.ConnectionId, name);
return base.OnConnected();
}
}
Global.asax 枢纽地图:
var hubConfiguration = new HubConfiguration
{
EnableDetailedErrors = true,
EnableJavaScriptProxies = true
};
RouteTable.Routes.MapHubs("/signalr",hubConfiguration);
连接尝试:
string portal = CommonHelper.GetPortalUrl("user");
if(portal.Contains(":50150"))
{
portal = portal.Replace(":50150", "");
}
var connection = new HubConnection(portal+"signalr",false);
IHubProxy myHub = connection.CreateHubProxy("GlobalHub");
connection.Start().Wait();
myHub.Invoke("Notify", userID.ToString(), result2);
我很确定我的连接 url 是正确的,我检查了 50 次。
这一行出现错误:
onnection.Start().Wait();
SS 错误:
谢谢
问题可能是在两台服务器上托管 SignalR 项目时,连接到其中一台的客户端只能连接到连接到同一台服务器的其他客户端。这是因为 SignalR 不会自动通过所有服务器广播消息。
http://www.asp.net/signalr/overview/performance/scaleout-in-signalr
试试看这里,希望对你有所帮助。建议的解决方案之一是使用 Redis Pub/Sub (http://redis.io/topics/pubsub) solution, or Azure Service Bus (http://azure.microsoft.com/en-us/services/service-bus/) - 两者都用作背板(当服务器收到一条消息时,它会广播给所有的人和那个需要的可以用)。
谢谢我解决了问题。原来是服务器的问题。服务器本身无法识别 url(在 url 上抛出 404)。 问题解决后,SignalR 开始工作