2014-12-30 12 views
5

Volevo chiamare il client specifico di notifica dal server utilizzando signalR ma non funzionava. il mio codice è stato eseguito correttamente ma la dose del client non riceve alcuna chiamata dal server.L'invio di messaggi dal server a client specifici non funziona utilizzando SignalR 2 e MVC 4.0

Tuttavia questo funziona per tutti i client.

var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProcessStatusNotifyHub>(); 
hubContext.Clients.All.notify("Got it!"); 

Ma questo non funziona per client specifico [Aggiornamento Codice] seguito il codice scritto in chat.cshtml

$(function() { 
     // Reference the auto-generated proxy for the hub. 
     var chat = $.connection.processStatusNotifyHub;//chatHub; 
     chat.client.notify = function (msg) { 
      alert(msg); 
     } 
     // Start the connection. 
     $.connection.hub.start().done(function() { 
      var myClientId = $.connection.hub.id; 
      console.log('connected: ' + myClientId); 
      $('#sendmessageToClient').click(function() { 
       //chat.server.send('imdadhusen', 'This is test text'); 
       $.ajax({ 
         url: '@Url.Action("Send", "PushNotification")', 
         type: 'POST', 
         data: { 'clientID': myClientId }, 
         dataType: 'json', 
         success: function (result) { 
          alert(result.status); 
       } 
       }); 
      }); 
     }); 
}); 

Dopo codice è scritto in controller

[HttpPost] 
public ActionResult Send(string clientID) 
     { 
      var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProcessStatusNotifyHub>(); 
      //hubContext.Clients.All.notify("Got it!"); 
      hubContext.Clients.User(clientID).notify("Got it!"); 

      responseResult result = new responseResult(); 
      result.status = "OK"; 
      result.message = "Notification sent successfully"; 
      return Json(result, JsonRequestBehavior.AllowGet); 
     } 

Ho provato a eseguire il debug del codice che mostra il valore corretto dell'ID client su .cstml o contro lloer. per esempio. clientid : 0fdf6cad-b9c1-409e-8eb7-0a57c1cfb3be

Potrebbe aiutarmi a inviare notifiche a client specifici dal server.

+0

Puoi fornire il controller completo? Il codice fornito non chiarisce se connectionId è o meno nell'ambito corretto dell'operazione che si sta tentando di eseguire. –

+0

@Steve Ho aggiornato il codice per il vostro riferimento, per favore fatemi sapere ancora che avete bisogno di maggiori dettagli per lo stesso. – imdadhusen

+0

Grazie per l'aggiornamento. Quando esegui il debug del server, il clientID è impostato sul valore che ti aspetteresti? –

risposta

0

Questa non è una risposta alla tua domanda specifica, ma piuttosto un suggerimento sul tuo codice. Perché il client non usa la connessione Signalr per chiamare il server? Basta definire un metodo nell'hub che un client può chiamare. Quindi in quel metodo usa HubCallerContext per ottenere l'id.

questa pagina trovi come chiamare il server dal client: http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client

Poi nel metodo del mozzo:

Clients.User(Context.ConnectionId).notify("Got it!"); 
1

L'operazione hubContext.Clients.User(string) si aspetta l'ID utente della richiesta HTTP corrente, non l'ID cliente di SignalR.

Se si desidera utilizzare client ID utilizzare questa operazione:

hubContext.Clients.Client( ) 

Se si desidera accedervi da parte dell'utente corrente, allora si può ottenere ID utente corrente con questa

string UserID=User.Identity.GetUserId() 
Problemi correlati