2012-11-16 63 views
0

我正在将一个非常基本的带有SignalR的“hello world”应用程序放在一起,它有自我托管的小问题,它引入了一两个额外的皱纹。基本上,我试图找出正确的方式从服务器上调用我的客户端上的方法。为SignalR服务器调用客户端的正确语法

在我的客户,比如,我有一个看起来像这样的方法:

roomHub.onEcho = function (msg) { 
     console.log("onEcho called: " + msg); 
    }; 

我可以成功地从我的服务器侧的集线器,像这样称呼它:

public class RoomHub : Hub 
{ 
    public void Echo(string echo) 
    { 
     Clients.onEcho(echo); 
    } 
} 

它的工作原理,但当然,它不仅仅是一个,而是所有10。而各种样品中,我在网上看到(例如,https://github.com/SignalR/SignalR/blob/master/samples/Microsoft.AspNet.SignalR.Hosting.AspNet.Samples/Hubs/Benchmark/HubBench.cs,我看到,使它看起来像我应该能够指定谁被调用,如命令的种种:

public void Echo(string echo) 
{ 
    Clients.Caller.onEcho(echo); 
    Clients.Caller(Context.ConnectionId).onEcho(echo); 
    Clients.All.onEcho(echo); 
} 

但我不能得到任何上述语法的工作。对于Clients.All.onEcho()Clients.Caller.onEcho(),绝对没有任何反应。对于Clients.Caller(Context.ConnectionId).onEcho(),萤火告诉我,它其实是想呼吁我的JavaScript roomHub实例Caller()方法,这当然是不存在的。

不过这里有点奇怪,如果我看一下Hub类,我可以看到为什么这些工作都不起作用 - 因为Hub的构造函数覆盖了一堆prope它的“客户”对象的rties与NullClientProxies:

protected Hub() 
{ 
    Clients = new HubConnectionContext(); 
    Clients.All = new NullClientProxy(); 
    Clients.Others = new NullClientProxy(); 
    Clients.Caller = new NullClientProxy(); 
} 

但我,为什么它是有点儿迷惑 - 为什么样品看起来反正工作 - 或者是什么预期的做法应该是。

有什么想法?我在这里做错了什么?

回答

1

我们最近一直在更新文档,所以您可能已经在这个地方看到了很多不一致的数据。 SignalR的最新版本是1.0 alpha2(http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx)。所有文档已更新为显示新语法,因此如果您使用的是旧版本,请升级。查看wiki的例子https://github.com/SignalR/SignalR/wiki/Hubs

+0

谢谢,大卫。我在NuGet上看不到的一件事是自托管库。我错过了那些吗?或者我只需要自己构建它们? –

+1

自我托管正在为post 1.0版本进行改进。我们基于OWIN,并不会改进目前的。你可以始终从源代码构建它(这就是为什么我们将它留在那里)。 – davidfowl

相关问题