2012-04-16 6 views
8

Nếu có nhiều hơn một yêu cầu xảy ra từ các máy khách khác nhau cùng lúc thì giá trị của thay đổi Hub.Context.ConnectionId trong quá trình thực thi trình xử lý.Trong SignalR là chủ đề Hub.Context có an toàn không?

Giả sử tôi có 2 khách hàng được kết nối với Id khách hàng A và B và tôi có phương thức trên Hub của tôi có tên là foo(). Tôi gửi một yêu cầu từ A đến Server gọi foo(), sau đó trong khi yêu cầu từ A đang được xử lý, tôi gửi một yêu cầu từ B gọi foo(). Khi bắt đầu xử lý yêu cầu A của Hub.Context.ConnectionId == A nhưng ở cuối phương thức, hãy gọi Hub.Context.ConnectionId == B.

Tôi có nên sao chép Hub.Context không? Tại thời điểm nào tôi nên làm điều này?

Trả lời

7

Nó không cần phải là chủ đề an toàn vì các phiên bản Trung tâm không tĩnh nên bạn không cần sao chép bất kỳ thứ gì.

Chúng được tạo cho mỗi cuộc gọi. Vì vậy, mỗi cuộc gọi từ máy khách sẽ tạo một thể hiện Hub mới và HubContext.

+0

Tôi thấy cảm ơn, tôi đã trở lại cùng một Trung tâm từ IHubActivator, giờ đây tôi đã thay đổi nó để trả lại một Trung tâm mới mỗi lần. –

0

Điều này không trực tiếp trả lời câu hỏi của bạn, nhưng luồng công việc thông thường của tôi là đặt giá trị trên người gọi khi họ kết nối lần đầu tiên, điều này có thể thực hiện những gì bạn cần?

Caller.clientId = Guid.NewGuid();