【问题标题】:I don't get the $.connection.[hubName]我没有得到 $.connection.[hubName]
【发布时间】:2017-02-23 02:17:21
【问题描述】:

我尝试使用 signalR 添加 Web 套接字功能,基于: chat example

我有 2 个不同的项目 - 1:是纯服务器,包含web api: 我有一个网络方法来获取请求并调用集线器:

[HttpGet]
    [Route("api/GetData")]
    public IHttpActionResult GetCorpDataApi()
    {
        return Ok(getResponse());
        **startWebSocket();**
    }

start web socket方法调用:

private void startWebSocket()
    {
        MonitorHub hub = new MonitorHub();
        Timer myTimer = new Timer();
        myTimer.Elapsed += new ElapsedEventHandler(hub.DisplayTimeEvent);
        myTimer.Interval = 3000;
        myTimer.Start();
    }

调用我的集线器中的方法:

public class MonitorHub : Hub
{

    public void DisplayTimeEvent(object source, ElapsedEventArgs e)
    {
        var response = MonitorUtils.GetCorpData();
        Clients.All.broadcastMessage(response);
    }

}

(都在同一个项目中,编译没有错误)。

我的客户端代码位于客户端 Angular 项目中(也在 VS 下), 我在控制器中添加了所需的功能:

function initWebSocket() {
          self.chatHub = null; // holds the reference to hub
          self.chatHub = $.connection.MonitorHub; // **I dont have MonitorHub**
          $.connection.hub.start(); 
          self.chatHub.client.broadcastMessage = function (response) {
              //bla bla
          };              
      }

我想提一下,我在 index.html 中包含了这些文件:

<script src="scripts/Vendor/jquery/jquery-2.2.1.js"></script>                                                              
<script src="scripts/Vendor/jquery/jquery.signalR-2.2.1.js"></script>
<script src="scripts/signalr/hubs"></script>
<script src="assets/global/plugins/angularjs/angular.min.js" type="text/javascript"></script>

$.connection.MonitorHub 什么也得不到 - 未定义。

我真的相信这与服务器端的事实有关 与客户端在不同的项目中。当我运行一个像聊天示例这样的简单示例时,它可以工作 - 都在同一个项目中。

我在控制台中收到此错误: 错误:SignalR:加载集线器时出错。确保您的集线器参考正确,例如.

有什么想法吗?

【问题讨论】:

    标签: websocket signalr signalr-hub


    【解决方案1】:

    我不是 100% 确定,但这可能是 JQuery 版本不匹配的情况。尝试使用较低的 jquery 版本,例如jquery-1.6.4.js

    【讨论】:

    • 谢谢,但事实并非如此。我仍然在控制台中收到错误:错误:SignalR:加载集线器时出错。确保您的集线器参考正确,例如.
    • 好的。检查js文件是否存在资源路径不匹配问题。
    • 这是一个 SignalR 生成的文件。您可以通过将“signalr/hubs”附加到您的本地主机路径来检查它是否可用?
    • 它不存在 :-(
    • 您的导入语句可能是这样的:
    【解决方案2】:

    您似乎没有将 SignalR 服务器添加到您的项目中。您似乎正在启动一个 WebSocket 并创建一个集线器实例并抛出一些 Web API。这不是 SignalR 的工作方式。您需要将 SignalR 服务器包安装到您的服务器,然后 SignalR 将负责处理您的呼叫、实例化您的集线器等。只需按照您发布链接的教程(设置项目部分)或this one.

    【讨论】:

    • 您好帕维尔,感谢您的回复。我浏览了我添加的帖子,并使用 nuget 将 SignalR 添加到服务器端。服务器运行良好且初始化良好。顺便说一句,我有一个工作示例,其中客户端和服务器在同一个项目中。这里的区别在于服务器在一个项目中,而客户端在另一个项目中。还有其他想法吗?谢谢!
    • 如果您的 javascript 来自与 SignalR 运行的服务器不同的服务器,您需要启用 CORS。 Here 是一个教程,他们在其中做类似的事情 - signalR 服务器是自托管的,但包含 javascript 文件的 html 由单独的服务器提供。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多