2015-07-27 5 views
0

У меня есть решение, в котором я использую SignalR. В одном из проектов есть концентратор и SignalR.Client в других, которые подключаются к этому концентратору. Это решение размещено на двух серверах, и у меня есть странная проблема. На одном сервере все работает нормально, но в другом случае я получаю ошибку 404, которая не найдена, когда я пытаюсь установить соединение с SignalR.Client.SignalR .Net Клиент не может установить соединение (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:

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 ошибки: 404 not found error

Благодарности

+0

Просто дикое предположение: вам не нужна косая черта: 'new HubConnection (portal +"/signalr ", false);' – DDan

ответ

1

Спасибо, я решил проблему. Оказалось, что это проблема с сервером. Сам сервер не смог распознать этот URL (выбрасывает 404 на URL). После того, как проблема была исправлена, SignalR начал работать

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/) - оба из которых используются в качестве объединительной платы (когда сервер получает сообщение, он передается всем из них и тот, который в ней нуждается, может использовать его).

+0

Tnx для ответа очень хороший один, но это не решает мою проблему, так как я не хочу транслировать на обоих серверах в паралели. Im использует SignalR на сервер, и он не вступает в сговор с другим сервером. –

Смежные вопросы