- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个这样的集线器:
public class MessageHubBub : Hub
{
public void ServerMethod()
{
Clients.All.sayHi("hello");
GlobalHost.ConnectionManager.GetHubContext<MessageHubBub>().Clients.All.sayHi( "Hello" );
}
}
我的(相关的)javascript 看起来像这样:
$.connection.MessageHubBub.client.sayHi = function (message) {
console.log("Hello");
};
$.connection.hub.start().done(function () {
$.connection.MessageHubBub.server.ServerMethod();
});
真正奇怪的是“Hello”只打印了一次,而我本以为它会打印两次(因为“sayHello”被调用了两次)。总的来说,我在使用从 GlobalHost.ConnectionMananager 获得的“客户端”对象向客户端发送消息时遇到了麻烦,因此我将这个问题提炼出来以说明什么不起作用。
我看过很多帖子,人们遇到了一些问题,例如在启动集线器之前没有向客户端注册他们的 js 处理程序,或者没有引入正确的 js 依赖项,但这些似乎不是我的问题。有什么原因导致我无法使用 GlobalHost.ConnectionManager.GetHubContext().Clients 向客户端发送消息吗?
编辑:作为对 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 );
}
}
最佳答案
使用自定义依赖解析器时,将其传递给 HubConfiguration 是不够的。
您需要将解析器实例存储在某处并像这样使用它来访问连接管理器和您的集线器上下文:
MyDependencyResolver.Resolve<IConnectionManager>().GetHubContext<MyHub>();
或将 GlobalHost 中的默认依赖解析器设置为您的实例:
var myResolver = new SignalRUnityDependencyResolver(unityContainer);
RouteTable.Routes.MapHubs( new HubConfiguration() { Resolver = myResolver } );
GlobalHost.DependencyResolver = myResolver;
(那么你可以使用默认的GlobalHost.ConnectionManager.GetHubContext<MessageHubBub>()
)
关于c# - SignalR:使用 GlobalHost.ConnectionManager 发送数据不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20139127/
我有一个这样的集线器: public class MessageHubBub : Hub { public void ServerMethod() { Clients.
我正在尝试通过在 mvc 应用程序中使用 SignalR 向所有客户端广播消息。我遇到的问题是,当我使用这段代码时 var context = GlobalHost.ConnectionManager
我正在尝试从 .net Web API Controller 操作中调用客户端方法。 我可以这样做吗? 我能找到的唯一一篇贴近我想要做的文章是这篇文章: SignalR + posting a mes
我正在尝试在一个项目中使用 OWIN、SignalR 和 Autofac。 我正在对 signalR 进行如下设置: // Create the AutoFac container bu
我是一名优秀的程序员,十分优秀!