SignalR - 从服务器端代码调用 Hub 类方法(存在于单独的 MVC 项目中)

Posted

技术标签:

【中文标题】SignalR - 从服务器端代码调用 Hub 类方法(存在于单独的 MVC 项目中)【英文标题】:SignalR - Calling Hub class method (present in a separate MVC project) from Server side code 【发布时间】:2013-07-21 16:45:49 【问题描述】:

我已经阅读了一些 SignalR 教程。 为了在我现有的 Asp.Net 解决方案应用程序中实现 SignalR,我执行了以下操作:

我创建了一个单独的 MVC 4 项目并创建了一个 Hub 类以及一些方法,以便可以从现有解决方案中存在的任何其他 MVC 项目/客户端调用它,这意味着我只想将它用作服务。

但现在我有两个问题:

    如何从其他 MVC 项目中调用它。会不会和教程中提到的一样,例如在我的 .cshtml 页面的头部添加必要的脚本文件并使用如下的 js 脚本:

    var hub = $.connection.; //然后

    hub.server.send("一些参数");

    我也想直接从服务器端代码调用集线器代码。之前我使用 SuperSocket 的时候做过。想使用 SignalR 做同样的方法。我该怎么做?

如果您回答,请提供一些代码示例。非常感谢。

【问题讨论】:

【参考方案1】:

有从 Hub 类外部(但在应用程序内部)here 调用客户端方法的示例代码。基本上,您使用 ConnectionManager 来调用集线器的客户端。

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.myClientMethod(myValue);

要从您的应用程序外部调用它,我会使用某种公开的方法或服务并包装上述代码。

【讨论】:

var context = GlobalHost.ConnectionManager.GetHubContext();除了您实际实现 Hub 类的项目之外,是否可以从其他项目中调用它。我在 SuperSockets 中做到了这一点。想知道是否可以通过 SignalR 以类似的方式完成。实际上在某些情况下,希望将来自其他(非集线器)项目的消息直接发送到集线器的某个连接客户端。 抱歉,刚刚看到您提供的链接。优秀的答案。谢谢。 有什么方法可以调用我实际的 Hub 方法吗?这种做法似乎绕过了MyHub,直接进入Hub Context,所以我在“MyHub”上的相应方法中拥有的任何其他代码都不会运行......?也许我只是在这里遗漏了一些东西。 我在同一条船上。我想从另一个类调用我的 Hub 类中的一个方法。就我而言,在同一个项目中。我的架构由一个 Web 项目和一个服务项目组成。当我的服务中发生某种活动时,我想让 Hub 完成它的工作,并让 UpdateThings() 从服务中获取一些数据并执行一些 Clients.All 工作。到目前为止,我看到的每个解决方案都只允许我访问没有我的类方法的 IHubContext。 帮我理解一下,我也有这个问题。使用 web api 2 项目作为服务和 mvc 5 项目作为客户端应用程序,我的集线器在 web api 现在我想从客户端应用程序调用集线器方法。 #1。我无法生成自动代理可能是因为单独的项目。 #2。如果我在没有生成代理方法的情况下使用,服务器方法会被调用,我在控制台日志中收到错误,错误调用服务器方法。

以上是关于SignalR - 从服务器端代码调用 Hub 类方法(存在于单独的 MVC 项目中)的主要内容,如果未能解决你的问题,请参考以下文章

SignalR--Web客户端

Asp.Net SignalR Hub类中的操作详解

Asp.Net SignalR Hub类中的操作详解

是否可以从 Postman 调用 SignalR Hub

利用控制台承载SignalR作为服务端及第三方推送信息

从 SignalR 调用特定客户端