我有一个使用SignalR的解决方案。其中一个项目中有一个Hub,而其他项目中的SignalR.Client连接到该Hub。 这个解决方案托管在两台服务器上,我有一个奇怪的问题。在一个服务器中一切正常,但在另一个我尝试从SignalR.Client建立连接时,我得到404未找到错误。
中心代码:
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 Hub Map:
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);
我很确定我的连接网址是正确的,我检查了50次。
此行发生错误:
onnection.Start().Wait();
由于
答案 0 :(得分:1)
问题可能是在两台服务器上托管SignalR项目时,连接到一台服务器的客户端只能连接到连接到同一服务器的其他客户端。这是因为SignalR不会自动通过所有服务器广播消息。
http://www.asp.net/signalr/overview/performance/scaleout-in-signalr
试试看看这里,我希望它对你有所帮助。建议的解决方案之一是使用Redis Pub / Sub(http://redis.io/topics/pubsub)解决方案或Azure Service Bus(http://azure.microsoft.com/en-us/services/service-bus/) - 两者都用作背板(当服务器收到消息时,它被广播给所有人,而需要它的人可以使用它。)
答案 1 :(得分:1)
Thanks I solved the problem. It turned out that it was a problem with the server. The server itself couldnt recognize that url (throws 404 on the url). After that problem was fixed, SignalR started working