2014-12-30 15 views
5

Tôi muốn gọi cho khách hàng cụ thể thông báo từ máy chủ bằng cách sử dụng signalR nhưng nó không hoạt động. mã của tôi đã được thực hiện thành công nhưng liều của khách hàng không nhận được bất kỳ cuộc gọi nào từ máy chủ.Gửi tin nhắn từ máy chủ đến máy khách cụ thể không hoạt động khi sử dụng SignalR 2 và MVC 4.0

Tuy nhiên, tính năng này hoạt động với tất cả khách hàng.

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

Nhưng điều này không làm việc cho khách hàng cụ thể [Cập nhật Mã] Tiếp theo mã viết bằng 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); 
       } 
       }); 
      }); 
     }); 
}); 

mã sau đây được viết bằng điều khiển

[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); 
     } 

Tôi đã thử gỡ lỗi mã nó đang hiển thị giá trị chính xác của id khách hàng trên .cstml hoặc contro lloer. ví dụ. clientid : 0fdf6cad-b9c1-409e-8eb7-0a57c1cfb3be

Bạn có thể vui lòng giúp tôi gửi thông báo cho khách hàng cụ thể từ máy chủ hay không.

+0

thể bạn cung cấp bộ điều khiển đầy đủ? Mã bạn đã cung cấp làm cho nó không rõ ràng hay không connectionId là trong phạm vi chính xác cho các hoạt động bạn đang cố gắng thực hiện. –

+0

@Steve Tôi đã cập nhật mã để bạn tham khảo, Vui lòng cho tôi biết bạn vẫn cần thêm chi tiết cho cùng. – imdadhusen

+0

Cảm ơn bạn đã cập nhật. Khi bạn gỡ lỗi máy chủ, clientID có được đặt thành giá trị bạn mong muốn không? –

Trả lời

0

Đây không phải là câu trả lời cho câu hỏi cụ thể của bạn, mà là một đề xuất về mã của bạn. Tại sao không có khách hàng sử dụng kết nối Signalr để gọi cho máy chủ? Chỉ cần định nghĩa một phương thức trong hub mà một client có thể gọi. Sau đó, trong phương thức đó, hãy sử dụng HubCallerContext để lấy id.

trang này cho bạn thấy làm thế nào để gọi máy chủ từ khách hàng: http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client

Sau đó, trong phương pháp của trung tâm:

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

Các hoạt động hubContext.Clients.User(string) dự kiến ​​User ID của yêu cầu HTTP hiện nay, không phải là ID khách hàng của SignalR.

Nếu bạn muốn sử dụng ID khách hàng sử dụng hoạt động này:

hubContext.Clients.Client( ) 

Nếu bạn muốn truy cập nó bằng cách cho người dùng hiện tại, sau đó bạn có thể nhận được ID người dùng hiện tại với điều này

string UserID=User.Identity.GetUserId() 
Các vấn đề liên quan