6

我有以下 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>

请注意,我们使用的是剑道,所以 jquery js 包含是通过它。

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

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

但是“集线器”始终是“未定义的”。

我在这里想念什么?

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

4

4 回答 4

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

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

于 2012-11-21T10:04:03.900 回答
0

确保您引用的是 jquery 1.6.4

于 2012-11-20T20:41:34.337 回答
0

检查您的global.asax文件,如果该行routes.Clear();存在,请删除该行,因为它会清除信号路径。

于 2013-06-25T09:47:43.673 回答
-1

如果您使用 https,则既不要通过参数也不要通过 'url'-property 指定 url,以防您的集线器在同一个 url 上工作。否则,您的集线器将是未定义的。

UPD

我搞砸了伙计们。我很急于发布我刚刚检测到的特定行为,所以我没有检查任何可能的版本。

但是,应用程序中存在一个错误,它向集线器提供了错误的 url,而另一个端口超出了所需的端口。因此关闭集线器代理的属性设置 url 使我的客户端工作正常。

注意您的应用程序提供的链接...

于 2020-02-14T12:26:32.020 回答