我有以下Hub
:
public class ImageHub : Hub {
public void LoadTheImage(String id, String imageUrl) {
Clients.All.loadReadyImage(id, imageUrl);
}
}
以下是客户端的JavaScript代码。
$(function () {
var loadImage = $.connection.imageHub;
loadImage.client.loadReadyImage = function (id, imageUrl) {
alert(id + " is ready. Url: " + imageUrl); //this will be much more than an alert.
};
});
在.ashx.cs文件中获得以下代码,该文件是一个通用处理程序:
public void ProcessRequest(HttpContext context) {
//do some stuff here
var imageContext = GlobalHost.ConnectionManager.GetHubContext<ImageHub>();
imageContext.Clients.All.loadReadyImage("imageOne", imageUrl);
}
整个过程旨在在Generic Handler完成其过程时调用客户端代码。 但它没有用。处理程序完成其工作后,浏览器上不会显示警报。
但是当我将客户端代码更改为以下内容时,警报就会显示出来。
$(function () {
var loadImage = $.connection.imageHub;
loadImage.client.loadReadyImage = function (id, imageUrl) {
alert(id + " is ready. Url: " + imageUrl);
};
$.connection.hub.start().done(function () {
loadImage.server.loadTheImage('my_id', 'image_url');
});
});
但是,我需要不是从客户端调用该函数,而是需要从服务器端调用客户端函数。
我该怎么做?
谢谢大家。
答案 0 :(得分:3)
您必须在第二个代码段中启动连接,以便能够发送和接收消息。
$.connection.hub.start()
.done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); })
.fail(function(){ console.log('Could not Connect!'); });
});