2015-02-12 13 views
5

Tôi có một câu hỏi trong đầu về phương thức CallR của SignalR. Trong phương thức hub chúng ta có thể gọi một hàm phía máy khách như thế này.gọi phương thức Caller trong trung tâm SignalR bên ngoài bối cảnh hub

Clients.Caller.addContosoChatMessageToPage(name, message); 

nhưng khi tôi sử dụng để gọi nó từ bên ngoài ngữ cảnh trung tâm, không tìm thấy hoặc không được triển khai ?? như thế này ..

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
context.Clients.Caller.reportProgress(recordCount,totalCount); 

Ai đó có thể soi sáng cho tôi trong phần này hoặc là có cách nào khác để thực hiện nó .. bởi bây giờ tôi sử dụng để thực hiện điều này

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
context.Clients.User(CurrentUser.Usernm).reportProgress(recordCount,totalCount); 

nhưng bây giờ chúng tôi không yêu cầu bồi thường dựa xác thực vì vậy nó sẽ là một vấn đề nếu cùng một usernm được đăng nhập ..

Trả lời

5

Bên ngoài trung tâm, rõ ràng là không có người gọi vì máy chủ là người khởi xướng.

Nếu bạn lo lắng về tên người dùng duy nhất, bạn cần phải implement a custom IUserIdProvider hoặc bạn cần manage connection ids per user theo cách khác. Sau đó, bạn có thể gọi

context.Clients.Client(connectionId).reportProgress(); 

sẽ là duy nhất.

+0

ánh xạ danh tính người dùng đến xác thực trung tâm là tôi đoán cách tốt nhất nhưng chúng tôi đã triển khai Iprincipal tùy chỉnh. Hãy xem qua các liên kết .. –

+0

giải quyết vấn đề của tôi .. Yep IUserIdProvider map với Iprincipal của tôi giải quyết ánh xạ kết nối –

Các vấn đề liên quan