Kri*_*der 5 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");
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来以下 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>
Run Code Online (Sandbox Code Playgroud)
我的问题是,当代码调用构造函数或 Send 方法时,Clients 对象为 null。
当我调试客户端代码时,一切看起来都正常。/signalr/hubs/ 路由返回 javascript 代码,并且运行 javascript 时没有错误。
我可以补充一点,后端代码在 Umbraco 5 CMS 环境之上运行,我不确定这是否会造成任何干扰。
关于如何调试/解决这个问题有什么建议吗?
听起来您正在尝试通过实例化集线器来从服务器端代码广播消息。不幸的是它不是那样工作的。您可以在此处查看如何从服务器端发送消息的示例: https: //github.com/SignalR/SignalR/wiki/Hubs。查看“从集线器外部通过集线器广播”部分。
以下内容将用在您想要进行广播的服务器端
using SignalR.Infrastructure;
string message = "Test Message";
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
clients.addMessage(message);
Run Code Online (Sandbox Code Playgroud)
这与您的Send()方法匹配,但是如果您尝试设置进度指示器,您可能只想向调用者发送消息。在这种情况下,您需要将 Progress 方法更新为Caller.addMessage("Starting to analyze image");。要从集线器外部执行此操作有点棘手,因为您需要跟踪要更新的连接的客户端 ID。一旦您知道上述内容更改为:
clients[clientId].addMessage(message);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5529 次 |
| 最近记录: |