【问题标题】:invoking client script from server - SignalR从服务器调用客户端脚本 - SignalR
【发布时间】:2012-11-10 14:33:04
【问题描述】:

我在我的 mvc4 Web 应用程序中使用 SignalR。 我有一个继承自 HUB 的类

[HubName("Chat")]
public class ChatHub : Hub ,IDisconnect  
{
      private void CallMessage(string message)
      {
               Clients.MessagesRecieved(message);
      }
      .... 

在我写的客户端 js 文件中 $(函数(){ globalChatHub = $.connection.chat;

$.extend(globalChatHub, { MessagesRecieved: function (data) {
    alert(data);
}
});

问题是, 是否可以从我的 HomeController.cs 中的代码调用客户端脚本“MessagesRecieved 函数”

让我们这么说吧:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        // this is a test
        ChatHub  h = new ChatHub();
        h.CallMessage("hellow");

    }

【问题讨论】:

    标签: signalr


    【解决方案1】:

    当然, 你可以像调用客户端代码一样调用它:

    //Define the client method:
    globalChatHub.hello = function {alert('hello');}
    

    在服务器代码中只写:

    ChatHub  h = new ChatHub();
            h.Client.hello();
    

    方法名区分大小写。

    更多信息在这个链接SignalR quick start

    【讨论】:

      【解决方案2】:

      您可以使用以下代码为您的ChatHub 提供Hub 上下文:

      var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
      

      然后你可以在ChatHub 上调用任何你想要的方法,或者你可以直接调用客户端方法。例如:

      context.Clients.All.MessagesRecieved("test");
      

      试一试。希望这会有所帮助。

      【讨论】:

      • 你真是个救命恩人!非常感谢,正是我想要的。 :)
      【解决方案3】:

      在 mvc 控制器中,我使用以下代码调用集线器中的方法

      DefaultHubManager hd = new DefaultHubManager(GlobalHost.DependencyResolver);
      var hub = hd.ResolveHub("ChatHub") as ChatHub;
      hub.Echo(HttpContext.Session.SessionID, "Hello Echo");  
      

      在集线器实现中,我更喜欢在集线器中保持调用客户端的实现,以使代码具有凝聚力。

      public void Echo(string sessionId, dynamic data)
      {
          var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
          context.Clients.All.ClientSideMethod(..)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多