SignalR - connection.hubName未定义

tre*_*003 5 .net ssl https asp.net-mvc-3 signalr

我有以下SignalR集线器类(仅显示顶部):

[HubName("DataServiceHub")]
public class DataServiceHub : Hub, IDataServiceHub, IDisconnect, IConnected
{
.
.      
Run Code Online (Sandbox Code Playgroud)

然后,我使用Main函数中的以下代码在Console App中自托管集线器:

string hubsUrl = appSettingsReader.GetValue("hubsUrl", typeof(string)).ToString();
var hubsServer = new Server(hubsUrl);
hubsServer.Configuration.DisconnectTimeout = TimeSpan.Zero;
hubsServer.MapHubs();
hubsServer.Start();
Run Code Online (Sandbox Code Playgroud)

hubsUrl的值是"http:// localhost:4322 /"

一旦我运行了控制台应用程序如果我在Chrome浏览器"http:// localhost:4322/signalsr/hubs"中浏览,我可以在底部看到SignalR javascript和我的集线器:

signalR.dataServiceHub = {
    _: {
        hubName: 'dataServiceHub',
Run Code Online (Sandbox Code Playgroud)

我正在尝试从运行在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>
Run Code Online (Sandbox Code Playgroud)

请注意,我们正在使用Kendo,因此jquery js include是通过它.

然后在$(document).ready(function(){我有以下内容:

jQuery.support.cors = true;
var connection = $.hubConnection('http://localhost:4322');
var hub = connection.dataServiceHub;
Run Code Online (Sandbox Code Playgroud)

但'hub'总是'未定义'.

我在这里错过了什么?

如果这是跨域问题 - 我该如何解决?

dav*_*owl 5

集线器有 2 种编程模型,您正在混合它们:

  1. http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client
  2. http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client

如果您滚动到这些页面的底部,有一个示例向您展示了在每个模型中使用跨域所需的操作。


小智 0

确保您引用的是 jquery 1.6.4