从Generic Handler,SignalR中的C#代码调用客户端方法

时间:2014-04-25 17:52:12

标签: jquery asp.net signalr signalr-hub signalr.client

我有以下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');
    });
});

但是,我需要不是从客户端调用该函数,而是需要从服务器端调用客户端函数。

我该怎么做?

谢谢大家。

1 个答案:

答案 0 :(得分:3)

您必须在第二个代码段中启动连接,以便能够发送和接收消息。

$.connection.hub.start()
    .done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); })
    .fail(function(){ console.log('Could not Connect!'); });
});