C# 如何在Signal中实现仅限服务器的功能
我想使用signar将数据推送到web客户端C# 如何在Signal中实现仅限服务器的功能,c#,signalr,C#,Signalr,我想使用signar将数据推送到web客户端 public class PushHub : Hub { public void Push(string data) { Clients.push(data); } } public class DataGenerator { private readonly PushHub pushHub; public void DataGenerator(PushHub pushHub) {
public class PushHub : Hub
{
public void Push(string data)
{
Clients.push(data);
}
}
public class DataGenerator
{
private readonly PushHub pushHub;
public void DataGenerator(PushHub pushHub)
{
this.pushHub = pushHub;
}
public void Tick()
{
pushHub.Push("Ping");
}
}
但是,我不希望客户端能够调用此函数
我只打算从服务器上调用Hub对象本身的函数(除非这是个坏主意?)
但我不希望客户端能够调用推送
信号器是否为此提供了方法(例如,仅服务器功能的属性)
如果我必须自己实施某件事,那么我有一些想法,但我不确定它们有多好:
- 让另一个类访问Clients属性,该属性将调用Push
- 在集线器中存储某种只有服务器知道的Nonce,并将该Nonce作为额外参数传递给Push李>
- 检查上下文中的客户端id是什么。我想当函数从随机线程调用时,它不在那里
public class Notifier
{
public static void Say(string message)
{
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.say(message);
}
}
}
公共类通知程序
{
公共静态void Say(字符串消息)
{
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.say(message);
}
}
}
查看集线器上的SignalR wiki:抱歉,但我不明白,如果“推送”方法仅由服务器使用,为什么要将其创建为公共方法?将此方法设为私有,并仅在服务器端代码中需要时使用。它是公共的,因为我希望服务器上的另一个类调用它。我将更新问题。客户是否需要提供
PushHub
?如果不是,这可能不是问题。如果PushHub
不是一个客户端类,那么简单地阻止客户端访问它就能解决所有问题。谢谢,我错过了这一点。看来这就是我想要的。我想这有点像我的第一个选择。当我开始工作的时候,我会接受你的答案。太棒了,我正在挖信号机^^