【问题标题】:How is this code being reached in SignalRSignalR 中如何达到此代码
【发布时间】:2014-05-20 03:58:15
【问题描述】:

我的 Hub 类中有以下方法:

public class NotificationHub : Hub
{
    public void SendAll(string message)
    {
        if (1 == 0)
            Clients.All.broadcastMessage(message); // this should be unreachable
    }
}

然后,我(正在尝试)从我的服务器端代码中调用该方法,如下所示:

GlobalHost.ConnectionManager.GetHubContext<NotificationHub>()
    .Clients.All.broadcastMessage("broadcastMessage was called");

方法被调用,一切正常。但是,我不希望调用 broadcastMessage(),因为它应该无法访问。

我是从文档中读到的:

您不会实例化 Hub 类或从您自己的方法调用其方法 服务器上的代码; SignalR 集线器为您完成的所有工作 管道。 SignalR 每次都会创建一个新的 Hub 类实例 它需要处理集线器操作,例如客户端连接时, 断开连接,或对服务器进行方法调用。

参考。 http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server

但它看起来根本没有使用我的方法。看起来它调用了自己的方法而忽略了我的方法。如何使用 SignalR 调用我自己的方法?

【问题讨论】:

  • 为什么不调用“SendAll”函数?显然运行broadcastMessage不会运行SendAll函数中的逻辑...
  • 是的,但似乎没有调用 SendAll 的方法。或者至少,智能感知不会接受它。我怎么称呼它?
  • @Jonesy 您发布的解决方案有效(您已删除)。但这是推荐的方式,还是黑客?我在文档中没有看到任何这样的用法,所以只是想知道。谢谢你的回答。
  • 您只想广播通过您的 SendAll() 方法的消息,并阻止在此之外访问broadcastMessage
  • 是的,就是这样使用的。我在想象一个场景,您希望限制您的开发团队只使用您的 Hub 方法。但是在服务器端,您必须获取调用集线器的上下文

标签: c# signalr signalr-hub


【解决方案1】:

当你这样做时:

GlobalHost.ConnectionManager.GetHubContext<NotificationHub>()
    .Clients.All.broadcastMessage("broadcastMessage was called");

你绕过了方法

public void SendAll(string message)

我不确定您为什么希望第一种方法被阻止。如果您希望集线器逻辑正常工作,则必须通过集线器方法(例如:public void SendAll(string message)

我喜欢这里介绍的解决方案:https://stackoverflow.com/a/17897625/693272 如果您想从外部调用集线器方法。

【讨论】:

  • 我真的只是在寻找一种方法来调用我的 Hub 方法;什么是首选方式?我在文档中找不到任何东西,就像你说的那样,完全绕过了我的方法。
  • 我明白你的意思;但这也不是理想的路线,因为它要求我基本上在两个地方重复自己。所以,我认为这不是首选用途,我应该简单地使用动态方法。
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多