發送數據我有這樣一箇中心:SignalR:使用GlobalHost.ConnectionManager不工作
public class MessageHubBub : Hub
{
public void ServerMethod()
{
Clients.All.sayHi("hello");
GlobalHost.ConnectionManager.GetHubContext<MessageHubBub>().Clients.All.sayHi("Hello");
}
}
我(relavent)的JavaScript看起來像這樣:
$.connection.MessageHubBub.client.sayHi = function (message) {
console.log("Hello");
};
$.connection.hub.start().done(function() {
$.connection.MessageHubBub.server.ServerMethod();
});
真正奇怪的是,「你好「只打印一次,在那裏我會預料它會被打印兩次(因爲'sayHello'被稱爲兩次)。一般來說,我一直在使用從GlobalHost.ConnectionMananager獲得的'clients'對象向客戶端發送消息時遇到麻煩,所以我將這個問題提煉出來以顯示哪些不起作用。
我看過很多帖子,有人在開始集線器或沒有引入正確的js依賴關係時沒有註冊他們的js處理程序,但這些似乎不是我的問題。有什麼理由不能使用GlobalHost.ConnectionManager.GetHubContext()發送消息給客戶端。客戶端?
編輯: 作爲對Lars的迴應,我確實有一個自定義的依賴關係解析器,以便我可以將Unity集成到SignalR中。我跟着一個例子,我在這裏找到:http://www.kevgriffin.com/using-unity-for-dependency-injection-with-signalr/
配置的唯一行我有如下:
RouteTable.Routes.MapHubs(new HubConfiguration() { Resolver = new SignalRUnityDependencyResolver(unityContainer) });
的SignalRUnityDependencyResolver看起來是這樣的:
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);
}
}
您是否使用了自定義的依賴解析器?你的SignalR配置代碼是什麼樣的? –
我編輯了答案以提供一些額外的細節。 – Kyle
[SignalR +通過操作方法將消息發佈到集線器]的可能重複(http://stackoverflow.com/questions/7549179/signalr-posting-a-message-to-a-hub-via-an-action -method) – Liam