SignalR - 在使用自动生成的集线器

时间:2016-01-12 19:21:04

标签: angularjs json html5 requirejs signalr

是否可以在与SignalR .NET后端集线器不同的服务器/域上运行客户端及其自动生成的集线器,即。将数据推向客户端的那个?

客户域名: lgi15q1026

服务器域: lgi14q1030

我想知道这是否正确。要自动生成客户端集线器,我们必须在html视图中插入一个脚本行,如下所示:

<script src="signalr/hubs" />

但这显然不会起作用,因为客户端集线器与服务器集线器位于不同的机器上。这将生成此URL:

  

http://lgi15q1026/Board.WebApp/signalr/hubs?_=1452624922877

导致404错误。所以要解决这个问题,我必须这样做:

<script src="//lgi14q1030/Board.WebApp/signalr/hubs" />

这会有用吗?

编辑:我使用RequireJS作为AngularJS的依赖管理器。

1 个答案:

答案 0 :(得分:1)

由于使用RequireJS加载了jquery.signalR.js脚本,因此您无法通过执行以下操作自动生成客户端中心脚本:<script src="signalr/hubs" />

解决方法是从html中删除<script>标记并使用RequireJS加载脚本:

require.config.json:

{
    "baseUrl": "",
    "paths": {
        "signalR": "bower_components/signalr/jquery.signalR",
        "signalRhub": "http://lgi14q1030:80/Board.WebApp/signalr/hubs?noext"
},
 "shim": {
     "signalR": {
            "deps": [ "jquery" ],
            "exports": "$.connection"
        },
        "signalRhub": {
            "deps": [ "signalR" ]
        }
}

当然你必须将javascript注入你的控制器:

angularJS控制器:

define(
    ['../app', '../services/eventDataService', 'signalRhub'],
    function (eventsApp) {
        'use strict';

        eventsApp.controller('eventController', ['$scope', '$filter',
            function ($scope, $filter) {

                var hubUrl = "http://lgi14q1030/Board.WebApp/signalr";
                $.connection.hub.url = hubUrl;
                var myHub= $.connection.myHub;