【问题标题】:Making signalr generated proxy hubs url dynamic使信号器生成的代理集线器 url 动态
【发布时间】:2015-02-27 21:04:27
【问题描述】:

我有一个解决方案,需要使用 CORS 连接到信号器公开服务。 托管信号器服务的地址可能会及时更改,因此不会 适合有经典的脚本标签

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

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

【问题讨论】:

  • 为什么不让脚本标签不那么静态:&lt;script src="&lt;%= SignalRUrl %&gt;...
  • 当然它是可能的,但不是一个如此优雅和干净的方式。现在我正在页面 ScriptManager 中注册一个 clientscriptreference,但如果可以的话,我想要太多由javascript完成,所以脚本部分与代码隐藏部分没有那么耦合!

标签: javascript asp.net signalr signalr-hub


【解决方案1】:

在您的 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
    });
});

【讨论】:

  • 感谢您的回答!帮帮我!
  • 如何使这条线动态“var hub = $.connection.yourHub;”我有一个下拉菜单,并且中心在该下拉选择中发生变化,因此我的“yourHub”需要是动态的。
【解决方案2】:

你可以把你的设置放在一个配置文件中:

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

【讨论】:

  • 我还没有尝试过,乍一看它似乎可以工作,但我不能不试一试。只是一件事,为什么在 config .json 示例中您没有输入以 /hubs 结尾的地址,而是使用了信号器端点地址?
【解决方案3】:

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

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

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

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

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

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

[你的解决方案 文件夹]\packages\Microsoft.AspNet.SignalR.Utils.2.1.0\tools

输入以下命令:

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

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

此命令在与服务器相同的文件夹中创建一个名为 server.js 的文件 信号器.exe。

将 server.js 文件放在项目的适当文件夹中, 将其重命名为适合您的应用程序,并添加对 它代替“信号器/集线器”参考。

链接: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'); });

【讨论】:

    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 2012-07-04
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多