我没有得到$ .connection。[hubName]

时间:2017-02-22 14:08:33

标签: websocket signalr signalr-hub

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

我有2个不同的项目 - 1:是纯服务器,包括web api: 我有一个Web方法来获取请求并呼叫集线器:

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

启动Web套接字方法调用:

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);
    }

}

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

我的客户端代码位于客户端角度项目中(也在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:加载集线器时出错。确保您的集线器引用正确,例如

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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