我有一个使用SignalR的解决方案。在其中一个项目中有一个集线器,在连接到该集线器的其他项目中有一个SignalR.Client。这个解决方案托管在两个服务器上,我有一个奇怪的问题。在一台服务器中,一切正常工作,但在另一台服务器中,当我试图从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中心地图:
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();错误来源:

谢谢
发布于 2015-07-28 16:30:41
谢谢我解决了这个问题。结果是服务器出了问题。服务器本身无法识别该url (在url上抛出404 )。那个问题解决后,SignalR开始工作。
发布于 2015-07-28 07:00:35
问题可能是,当在两个服务器上承载SignalR项目时,连接到一个服务器的客户端只能连接到连接到同一服务器的其他客户端。这是因为SignalR不会通过所有服务器自动广播消息。
http://www.asp.net/signalr/overview/performance/scaleout-in-signalr
试着看看这里,我希望这对你有帮助。建议的解决方案之一是使用Redis /Sub (http://redis.io/topics/pubsub)解决方案或Azure服务总线(Azure,http://azure.microsoft.com/en-us/services/service-bus/)--两者都用作背板(当服务器接收到消息时,将消息广播给所有消息,并且需要消息的服务器可以使用消息)。
https://stackoverflow.com/questions/31659089
复制相似问题