2015-12-22 2 views
0

У меня есть простой прокси SignalR с единственным клиентским методом. Javascript выглядит следующим образом:Метод SignalR Client не работает постоянно

var proxy = $.connection.orderStatusUpdateEmitter; 
proxy.client.onOrderUpdated = function(order){ 
    try { 
    //This is only hit sometimes 
    getCustomerOrders(userId) 
    } catch (e) { 

    } 
} 

proxy.connection.start().done(function(c){ 
    $log.info('Connected to order status update emitter'); 
}); 

proxy.connection.disconnected = function(data){ 
    $log.info('disconnected'); 
    setTimeout(function() { 
     proxy.connection.start(); 
    },20000); 
} 

Похоже, есть некоторый тип гонки условия или я делаю это неправильно, потому что обработчик onOrderUpdated последовательно не ударил. Что-нибудь в этом роде неправильно?

Там нет ничего особенного не случилось в моем хаба на сервере, он выглядит следующим образом:

[AuthorizeClaims] 
public class OrderStatusUpdateEmitter : Hub 
{ 
    private static string _groupIdentifier = "OrderStatusUpdate"; 


    public override Task OnConnected() 
    { 
     var identity = Context.Request.Environment["user.identity"] as AuthenticatedUserIdentity; 
     Groups.Add(Context.ConnectionId, string.Format("{0}-{1}", _groupIdentifier, identity.UserId)); 
     return base.OnConnected(); 
    } 


    public override Task OnReconnected() 
    { 
     var identity = Context.Request.Environment["user.identity"] as AuthenticatedUserIdentity; 
     Groups.Add(Context.ConnectionId, string.Format("{0}-{1}", _groupIdentifier, identity.UserId)); 
     return base.OnReconnected(); 
    } 

    public static string GetGroupIdentifier() 
    { 
     return _groupIdentifier; 
    } 

    public Order OnOrderUpdate(Order order) 
    { 
     Clients.Group(String.Format("{0}-{1}",GetGroupIdentifier(), 
               order.CustomerId)).onOrderUpdated(obj); 
    } 
} 
+0

доля ваш хаб код .. – Madhu

+0

@Madhu обновляется с кодом хаба – TheJediCowboy

+0

«обработчик для onOrderUpdated последовательно не хит» Я предполагаю, что это проблема группы. Попробуйте то же самое с 'Clients.All', а не' Clients.Group' ... в 'OnOrderUpdate', чтобы увидеть его. Отладка для каких групп событие происходит. – DDan

ответ

0

Попробуйте следующие вместо группы списка, состоящий из пользователей с «» сепараторе.

string[] group = list.Split(','); 

    for(int i=0; i < group.length; i++) 

    Clients.User(group[i]).onOrderUpdated(obj);