我有一个解决方案需要使用CORS连接到信号器暴露的服务。 托管信号服务器的地址可能会随时间变化,因此不会 适合拥有经典脚本标签
<script src="http://server:8888/signalr/hubs" type="text/javascript"></script>
但如果有一种方法可以通过javascript动态引用上面的url而没有静态脚本标记,那就太棒了。 建议会很棒!
答案 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'); });