我正在使用SignalR 2,我无法弄清楚如何使用我的Hub方法,例如在控制器动作中.
我知道我可以做到以下几点:
var hub = GlobalHost.ConnectionManager.GetHubContext<T>();
hub.Clients.All.clientSideMethod(param);
Run Code Online (Sandbox Code Playgroud)
但是直接在客户端执行该方法.
如果我的服务器端ClientSideMethod(param)方法中有业务逻辑,我想从我的控制器调用,就像从客户端调用它一样?
目前我public static void ClientSideMethod(param)在我的集线器中使用,在那个方法中我使用了IHubContext来自ConnectionManager.
这样做有没有更好的方法?
以下是行不通的(在SignalR 2中?):
var hubManager = new DefaultHubManager(GlobalHost.DependencyResolver);
instance = hubManager.ResolveHub(typeof(T).Name) as T;
instance.ClientSideMethod(param);
Run Code Online (Sandbox Code Playgroud)
在访问客户端时,我得到"不通过Hub管道创建的集线器不受支持"异常.
我正在学习Signal-R,这是我一直在想的事情.
据我所知,IIS旨在处理请求 - 响应方案.一个请求命中IIS,它找到AppDomain,激活它,然后将请求传递给它.在空闲时间之后,关闭AppDomain.如果请求过长,则抛出超时异常.
现在让我们假设我有另一个通过TCP套接字广播信息的应用程序.我希望我的javascript客户端能够实时获取该信息,因此我创建了一个Signal-R Web应用程序.我可以在应用程序启动时创建一个TCP客户端,但是什么能保证IIS在一段时间不活动后不会关闭整个事件?
我可以自己在一个窗口服务中托管Signal-R应用程序,但后来我将不得不使用不同的端口,启用跨域等...部署的许多问题.但是,我担心使用ASP.NET MVC应用程序,因为它看起来像是在摩托车中安装驱动轮.
干杯.