3

我对 MVC3 和信号器有一个非常奇怪的问题。我有一个简单的集线器;

[HubName("test")]
public class Test: Hub
{
    public object GetStuff()
    {
        return new { dummy = "Test" };
    }
}

还有一些客户端代码;

var connection = $.connection.test;
connection.start();
connection.getStuff();

这会引发错误;

TypeError: Object # has no method 'start'

如果我改为

var connection = $.connection("test");

我得到一个不同的错误;

TypeError: Object # has no method 'getStuff' jquery-1.6.4.min.js:4

POST http://localhost:63021/Controller/test/negotiate 405(不允许的方法)

注意它出于某种原因试图在控制器下进行协商?

我需要注册一些特定的路线吗?还有什么我不知道的魔法?

更新 所以玩了一下控制台——第一个版本实际上创建了一个我可以调用的具有 getStuff() 的对象。但是 signalr 抛出了,因为我必须先调用 start() - 这不存在!第二个创建了一个对象,它有 start(),但它没有 getStuff()..

更新 2 尝试做 $.connection.hub.start 代替。这似乎在控制台中有效,但在页面 onload 中无效。在进行集线器调用之前可能启动没有完成?是异步的吗?

4

3 回答 3

7

启动 SignalR 连接不是即时的。connection.GetStuff();如果连接尚未建立,您调用可能会失败。如果您希望在建立与集线器的连接后运行此代码,则应使用回调函数。

var connection = $.connection.test;
$.connection.hub.start(function(){        
    // By convention all exposed hub methods start with lowercase
    connection.getStuff();
});

集线器快速入门:https ://github.com/SignalR/SignalR/wiki/QuickStart-Hubs

深入了解 SignalR javascript 客户端:https ://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs

于 2012-04-07T20:21:11.907 回答
1

您必须添加集线器部分:

$.connection.hub.start();
于 2012-09-20T19:20:06.407 回答
0

尝试这个:

var connection = $.connection("@Url.Content("~/echo")");

于 2012-04-09T03:53:49.597 回答