【问题标题】:SignalR. HubConnection The client method is not invoked from server信号R。 HubConnection 客户端方法不是从服务器调用的
【发布时间】:2012-07-12 00:44:14
【问题描述】:

谁能帮我理解

以下代码中的错误是,客户端方法不是使用 SignalR 从服务器方法调用的。

单击广播按钮时,我可以调用客户端方法。 当我从控制台应用程序运行 selfInvoke 代码时,也会触发该事件。

服务器类驻留在不同程序集中的 CustomEvent 处理程序中。

Chat Hub 的代码如下:

namespace MySample.Handler
{
    [HubName("chat")] 
    public class Chat: Hub
    {
        public void Send(string message)
        {
            Clients.addMessage(message);
            // I tried this code as well:
            // IHubContext context = GlobalHost.ConnectionManager.GetHubContext<Chat>();
           // context.Clients.addMessage("Hello world");
        }
    }
}

调用聊天中心的源码如下:

namespace MySample.Handler
{
    public static class SelfInvoke
    {
        public static void OnEvent()
        {
            var hubConnection = new HubConnection("http://localhost:48994");
            var chat = hubConnection.CreateProxy("chat");
            hubConnection.Start().Wait();
            string message1 = "Hai from OnEvent Handler!!!";
            chat.Invoke("Send", message1).Wait();
        }
    }
}

索引.aspx

    <script src="Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
    <script src="Scripts/jquery.signalR-0.5.2.min.js" type="text/javascript"></script>
    <script src="/signalr/hubs" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
          var chat = $.connection.chat;

          chat.addMessage = function (message) {
              $('#messages').append('<li>' + message + '</li>');
          };

          $("#broadcast").click(function () {
              chat.send($('#msg').val());
          });
          $.connection.hub.start();
        });
    </script>
  <input type="text" id="msg" />
  <input type="button" id="broadcast" value="broadcast" />
  <ul id="messages">
  </ul>

index.aspx.cs [代码背后的代码..]

   protected void Page_Load(object sender, EventArgs e)
   {
        SelfInvoke.OnEvent();
   }

非常感谢任何帮助。

问候 文斯

【问题讨论】:

  • 需要运行并加载 javascript 才能接收消息。您是否在页面完全加载并连接到集线器后发送消息?

标签: c# signalr


【解决方案1】:

更改您的 JavaScript 客户端函数定义,使它们:

chat.client.XXX = function ...

代替:

chat.XXX = function ...

另外,将您对服务器的调用更改为:

chat.server.send($('#msg').val());

代替:

chat.send($('#msg').val());

【讨论】:

    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多