【发布时间】:2012-11-08 21:30:05
【问题描述】:
我有以下 SignalR 集线器类(仅显示顶部):
[HubName("DataServiceHub")]
public class DataServiceHub : Hub, IDataServiceHub, IDisconnect, IConnected
{
.
.
然后,我在主函数中使用以下代码在控制台应用程序中自行托管集线器:
string hubsUrl = appSettingsReader.GetValue("hubsUrl", typeof(string)).ToString();
var hubsServer = new Server(hubsUrl);
hubsServer.Configuration.DisconnectTimeout = TimeSpan.Zero;
hubsServer.MapHubs();
hubsServer.Start();
hubsUrl 的值为“http://localhost:4322/”
运行控制台应用程序后,如果我在 Chrome 中浏览“http://localhost:4322/signalr/hubs”,我可以在底部看到 SignalR javascript 和我的集线器:
signalR.dataServiceHub = {
_: {
hubName: 'dataServiceHub',
我正在尝试从在 HTTPS/SSL 设置上运行的 MVC3 应用程序连接到此集线器(即站点 url 前缀是“https://localhost/”
在我的 Razor 页面中,我肯定包含 SignalR js:
<script src="/Website/Scripts/kendo/2012.2.710/jquery.min.js" type="text/javascript"></script>
<script src="/Website/Scripts/jquery.signalR-0.5.3.min.js" type="text/javascript"></script>
<script src="http://localhost:4322/signalr/hubs" type="text/javascript"></script>
请注意,我们使用的是 Kendo,因此 jquery js 包含通过它。
然后在 $(document).ready(function () { 我有以下内容:
jQuery.support.cors = true;
var connection = $.hubConnection('http://localhost:4322');
var hub = connection.dataServiceHub;
但“集线器”总是“未定义”。
我在这里错过了什么?
如果这是跨域问题 - 我该如何解决?
【问题讨论】:
-
我的理解是 HubName 参数应该以小写开头,以匹配客户端名称:“dataServiceHub”,而不是“DataServiceHub”。 (但后来我遇到了与上面类似的问题,所以我当然没有权威。)
-
This page 是相关的,因为由于 NuGet 包不匹配,它会导致 MapSignalR 失败,从而产生“无法导出中心名称”症状。 (这原来是我的问题。)
标签: .net asp.net-mvc-3 ssl https signalr