2015-03-06 1 views
0

Я не могу отправить сообщение конкретному пользователю по connectionId, когда я пытаюсь отправить всех пользователей следующим образом: context.Clients.All.updateMessages (message) - этот код работает. заяц-концентраторы код:Не удается отправить сообщение конкретному пользователю. ConnectionId в SignalR

public void Send(string userToId, string userForId, string message) 
     { 
      //Get Recipent (userIdfor) connectionId 
      var signalrhelper = new HomeController(); 
      string userForconnectionId = signalrhelper.GetConnecionIdByUserId(userForId); 

      IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ChatHubs>(); 

      string messageSenderConnId= signalrhelper.GetConnecionIdByUserId(userToId); 

      //Call Receiver 
      context.Clients.Client(userForconnectionId).updateMessages(message); 
      //Call Sender 
      context.Clients.Client(messageSenderConnId).updateMessages(message); 
     } 

Заяц Мой Вид:

$(function() { 
     // Declare a proxy to reference the hub. 
     var notifications = $.connection.chatHubs; 

     // Create a function that the hub can call to broadcast messages. 
     notifications.client.updateMessages = function(data) { 

      if (window.location.href.indexOf("Messages/DetailMessage?userId") > -1) { 
       $('#timeline-messages').append('{0}'.Stringformat(data)); 
      } else { 
       ReplaceUpdateTargetIdToReturnData("Messages/GetMessages", "#header_inbox_bar", "#systemMessage"); 
      } 

     }; 
     $.connection.hub.start().done(function() { 

      var myClientId = $.connection.hub.id; 
      GetConnectionIdToSignalR("Home", "SaveConnectionIdbyUserName", "userId", @Session["UserId"], "hubConnectionId", myClientId); 


      $('#sendMessageButton').click(function() { 
       if ($('#sendMessageFiled').val().length > 1) { 
        // Call the Send method on the hub. 
        notifications.server.send(@Session["UserId"], myClientId, $('#sendMessageButton').attr("title"), $('#sendMessageFiled').val()); 
        // Clear text box and reset focus for next comment. 
        $('#sendMessageFiled').val('').focus(); 
       } else { 
        $('#sendMessageFiled').focus(); 
       } 
      }); 
     }).fail(function (e) { 
      alert(e); 
     }); 
    }); 

Может кто-нибудь знать, что происходит?

ответ

0

Пользователь, я полагаю, вы имеете в виду аутентифицированного пользователя? Если это так, сначала необходимо сопоставить подключения к пользователям. Например, пользователь может иметь 2 или более соединения signalr. Итак, первым шагом является сопоставление пользователей с подключениями, после чего вы можете отправить сообщение пользователю, и все его/ее связанные агенты получат его.

Есть несколько способов отображающих связей для пользователей, руководство здесь: http://www.google.co.uk/url?q=http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections&sa=U&ei=Tjj-VJuPMsPBOZGGgYgH&ved=0CAsQFjAA&usg=AFQjCNFXoGJOm3mzenAJbz46TUq-Lx2bvA

+0

Спасибо, я уже устранил эту проблему. Моя проблема заключалась в пробелах в конце соединения. Я прервал и все хорошо работает. –