MVC3中的SignalR,定时和启动/连接问题?

Xer*_*ati 3 asp.net-mvc c#-4.0 asp.net-mvc-3 signalr

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

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

还有一些客户端代码;

var connection = $.connection.test;
connection.start();
connection.getStuff();
Run Code Online (Sandbox Code Playgroud)

这会引发错误;

TypeError:Object#没有方法'start'

如果我改为做

var connection = $.connection("test");
Run Code Online (Sandbox Code Playgroud)

我得到了一个不同的错误;

TypeError:Object#没有方法'getStuff'jquery-1.6.4.min.js:4

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

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

我需要注册一些特定的路线吗?其他一些我不知道的魔法?

更新 所以玩控制台 - 第一个版本确实创建了一个具有getStuff()的对象,我可以调用它.但是信号器会抛出,因为我必须首先调用start() - 它不存在!第二个创建一个具有start()的对象,但它没有getStuff()..

UPDATE 2 尝试改为$ .connection.hub.start.这似乎在控制台中工作,但不在页面上加载..可能在集线器调用之前启动还没完成?它是异步的吗?

Gar*_*y.S 7

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

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

Hub快速入门:https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs

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