尝试通过signalR发送消息时,客户端为空

时间:2012-02-19 16:19:17

标签: javascript model-view-controller umbraco signalr

我的MVC应用程序中有以下集线器,我希望将简单消息发送到客户端代码:

using SignalR.Hubs;  

public  class Progress : Hub
        {
            public void 

Send(string message)
            {
                // Call the addMessage method on all clients
                Clients.addMessage(message);
            }

            public Progress()
            {
               Clients.addMessage("Starting to analyze image");
            }                 
        }

我视图中的以下javascript

    <script src="/Scripts/jquery.signalR.js" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>

<script type="text/javascript">
    $(document).ready(function () {

        // Proxy created on the fly
        var connection = $.connection('/signalr/hubs/progress');

        // Declare a function on the chat hub so the server can invoke it
        connection.addMessage = function (message) {
            $('#messages').append('<li>' + message.Content + '</li>');
        };


        // Start the connection
        connection.start();
    });
</script>
}

我的问题是当代码调用构造函数或者发送方法时,Clients对象为null。

调试客户端代码时,一切看起来都不错。 / signalr / hubs / route返回javascript代码,运行javascript时没有错误。

我可以补充说,后端代码运行在Umbraco 5 CMS环境之上,我不确定是否会造成任何干扰。

有关如何调试/解决此问题的任何建议吗?

2 个答案:

答案 0 :(得分:4)

听起来您正试图通过实例化集线器来从服务器端代码广播消息。不幸的是,它并没有这样的工作。您可以在此处查看如何从服务器端发送消息的示例:https://github.com/SignalR/SignalR/wiki/Hubs。看一下&#34;通过集线器外部的中心广播&#34;部分。

以下内容将用于您要从

进行广播的服务器端
using SignalR.Infrastructure;

string message = "Test Message";
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
clients.addMessage(message);

这与您的Send()方法匹配,但是如果您尝试设置进度指示器,则可能只想向调用方发送消息。在这种情况下,您需要将Progress方法更新为Caller.addMessage("Starting to analyze image");。要从集线器外部执行此操作有点棘手,因为您需要跟踪要更新的连接的客户端ID。一旦您知道以上更改为:

clients[clientId].addMessage(message);

答案 1 :(得分:0)

您需要阅读文档。样本中的所有内容都显示错误。从这里开始:

https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs