Tôi có một trung tâm như thế này:SignalR: Gửi dữ liệu sử dụng GlobalHost.ConnectionManager không làm việc
public class MessageHubBub : Hub
{
public void ServerMethod()
{
Clients.All.sayHi("hello");
GlobalHost.ConnectionManager.GetHubContext<MessageHubBub>().Clients.All.sayHi("Hello");
}
}
của tôi (relavent) javascript trông như thế này:
$.connection.MessageHubBub.client.sayHi = function (message) {
console.log("Hello");
};
$.connection.hub.start().done(function() {
$.connection.MessageHubBub.server.ServerMethod();
});
Điều thực sự lạ là " Xin chào "đang được in chỉ một lần, nơi tôi đã mong đợi nó sẽ được in hai lần (vì 'sayHello' được gọi hai lần). Nói chung, tôi đã gặp rắc rối với việc sử dụng đối tượng 'clients' thu được từ GlobalHost.ConnectionMananager để gửi tin nhắn cho khách hàng, vì vậy tôi đã chưng cất vấn đề này xuống để hiển thị những gì không hoạt động.
Tôi đã nhìn thấy rất nhiều bài đăng với những người gặp sự cố như không xem lại trình xử lý js của họ với khách hàng trước khi bắt đầu trung tâm hoặc không đưa phụ thuộc chính xác vào js, nhưng đây không phải là vấn đề của tôi. Có lý do nào khiến tôi không thể gửi tin nhắn cho khách hàng bằng GlobalHost.ConnectionManager.GetHubContext().
CHỈNH SỬA: Để phản hồi lại Lars, tôi có trình phân giải phụ thuộc tùy chỉnh để tôi có thể tích hợp Unity thành SignalR. Tôi đi theo một ví dụ tôi tìm thấy ở đây: http://www.kevgriffin.com/using-unity-for-dependency-injection-with-signalr/
Dòng duy nhất của cấu hình tôi có được như sau:
RouteTable.Routes.MapHubs(new HubConfiguration() { Resolver = new SignalRUnityDependencyResolver(unityContainer) });
Các SignalRUnityDependencyResolver trông như thế này:
public class SignalRUnityDependencyResolver : DefaultDependencyResolver
{
private IUnityContainer _container;
public SignalRUnityDependencyResolver(IUnityContainer container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
if (_container.IsRegistered(serviceType)) return _container.Resolve(serviceType);
else return base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
if (_container.IsRegistered(serviceType)) return _container.ResolveAll(serviceType);
else return base.GetServices(serviceType);
}
}
Bạn có đang sử dụng trình giải quyết phụ thuộc tùy chỉnh không? Mã cấu hình SignalR của bạn trông như thế nào? –
Tôi đã chỉnh sửa câu trả lời để cung cấp một số chi tiết bổ sung. – Kyle
Có thể trùng lặp của [SignalR + đăng thông báo lên Hub qua phương thức hành động] (http://stackoverflow.com/questions/7549179/signalr-posting-a-message-to-a-hub-via-an-action -method) – Liam