使信号器生成的代理集线器动态

时间:2014-04-02 11:52:20

标签: javascript asp.net signalr signalr-hub

我有一个解决方案需要使用CORS连接到信号器暴露的服务。 托管信号服务器的地址可能会随时间变化,因此不会 适合拥有经典脚本标签

<script src="http://server:8888/signalr/hubs" type="text/javascript"></script> 

但如果有一种方法可以通过javascript动态引用上面的url而没有静态脚本标记,那就太棒了。 建议会很棒!

3 个答案:

答案 0 :(得分:4)

在JS文件中执行以下操作:

$.getScript('http://server:8888/signalr/hubs', function () {
    //Set the hubs URL for the connection
    $.connection.hub.url = 'http://server:8888/signalr';
    var hub = $.connection.yourHub; //yourHub is name of hub on the server side

    //wire up SignalR

    //start hub
    $.connection.hub.start().done(function () {
        //once we're done with SignalR init we can wire up our other stuff
    });
});

答案 1 :(得分:0)

您可以将设置放在配置文件中:

<强> config.json

{
    "signalr_url": "http://server:8888/signalr"
}

然后加载配置:

$.getJSON('config.json', function(config) {
    $.getScript(config.signalr_url, function() {
        // when the script has loaded
    });
});

修改

在查看the SignalR documentation后,我认为以下情况会更合适。

首先包括所需的脚本:

<script src="Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR.min.js" type="text/javascript"></script>

现在您可以使用任何网址拨打$.connection(...);。所以应用上面的内容可能如下所示:

$.getJSON('config.json', function(config) {
    $.connection(config.signalr_url);
});

答案 2 :(得分:0)

我有同样的情况,经过一些研究,我们决定将生成的代理作为物理脚本,如下:

  

如何为SignalR生成的代理创建物理文件

     

作为动态生成代理的替代方法,您可以创建一个   具有代理代码和引用该文件的物理文件。您   可能想要这样做来控制缓存或捆绑行为,   或者在编写对服务器方法的调用时获取IntelliSense。

     

要创建代理文件,请执行以下步骤:

     

安装Microsoft.AspNet.SignalR.Utils NuGet包。

     

打开命令提示符并浏览到包含该命令的tools文件夹   SignalR.exe文件。 tools文件夹位于以下位置:

     

[你的解决方案   文件夹] \包\ Microsoft.AspNet.SignalR.Utils.2.1.0 \工具

     

输入以下命令:

     

signalr ghp / path:[包含Hub类的.dll的路径]

     

.dll的路径通常是项目中的bin文件夹   文件夹中。

     

此命令在与...相同的文件夹中创建名为server.js的文件   signalr.exe。

     

将server.js文件放在项目的相应文件夹中,   根据您的应用程序重命名它,并添加对它的引用   它取代了“信号灯/集线器”的参考。

link:How to create a physical file for the SignalR generated proxy

只要我们有代理,那么您可以像这样引用Hub URL:

$.connection.hub.url = "http://your-url/signalr;
//open connection
$.connection.hub.start()
    .done(function () {
        //do your stuff
    })
    .fail(function () { alert('unable to connect'); });