gpt4 book ai didi

SignalR 无法调用非委托(delegate)类型

转载 作者:行者123 更新时间:2023-12-03 18:25:50 25 4
gpt4 key购买 nike

我正在尝试通过编写一个非常简单的应用程序来学习 SignalR……它基本上定期发送“Hello”(如 Stock Ticker,但要简单得多)。
这是我的中心:

public class StockTickerHub : Hub
{
public void Hello()
{
var s = StockTicker.stockTicker;

Clients.All.hello();
}
}
...这是应该定期发送消息的代码:
public class StockTicker
{
public static StockTicker stockTicker = new StockTicker();
private Thread thread;

public StockTicker()
{
var stockTickerHub = GlobalHost.ConnectionManager.GetHubContext<StockTickerHub>();

this.thread = new Thread(() =>
{
while (true)
{
stockTickerHub.Clients.All().hello();
Thread.Sleep(1000);
}
}
);

this.thread.Start();
}
}
我收到了 RuntimeBinderExceptionstockTickerHub.Clients.All().hello(); .它说:

An unhandled exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll

Additional information: Cannot invoke a non-delegate type


我究竟做错了什么?
下面是客户端 JavaScript,以防万一您需要复制它。
<script type="text/javascript">
$(function () {

var chat = $.connection.stockTickerHub;

chat.client.hello = function () {
$("#log").append("Hello");
}

$.connection.hub.start().done(function () {

chat.server.hello();
});
});
</script>

最佳答案

简单地改变:

stockTickerHub.Clients.All().hello();

到:
stockTickerHub.Clients.All.hello();

调试器应该已经告诉你这个错误。我在更新后尝试了您的代码。这是工作。

关于代码设计的备注:

我不会在 hello 中启动新的发送线程事件,每次任何客户端调用此方法时都会启动一个。我不认为那是你想要做的。作为一个更流畅的示例,您可以在 Startup 中启动代码。类(class)。 (如果您想要每个连接覆盖 OnConnected 的代码,请获取客户端的连接 ID 并给它们单独的代码......)

关于SignalR 无法调用非委托(delegate)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31903620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com