在非MVC项目中从客户端调用SignalR Server方法

时间:2017-02-20 09:51:52

标签: c# jquery asp.net asp.net-mvc signalr

我熟悉WebMethods和PageMethods,无需刷新页面即可从客户端调用服务器端方法。

我正在实现调用服务器端方法(存在于index.aspx.cs中)。

以下是我正在尝试的内容:

服务器端创建的集线器类:

public class MyHub : Hub
{
    public void RefreshData(string imessage)
    {

        Clients.All.displayData(imessage);

    }
}

客户端:

<script>
    var isconnected = false;
    (function () {

        $.connection.myHub.client.displayData = function (thisdata) {
            $('ul').append('<li>' + thisdata + '</li>');
        };

        $("#btnadd").click(function () {
            if (isconnected) {
                $.connection.myHub.server.refreshData($("#txtval").val());
            }
        });

        $.connection.hub.start()
            .done(function () {

                isconnected = true;
            })
            .fail(function () {
                isconnected = false;
            });


    })();

</script>

以上情况正常,客户端正在调用服务器端的RefreshData方法,而Server正在将消息传递给客户端的displayData方法。

我的问题是:与AJAX WebMethod()相同..是否可以调用index.aspx.cs的任何方法(不在MyHub类中)?

如果我谈论从index.aspx.cs调用客户端方法,那么我们可以尝试:

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.displayData(imessage);

但是,如果我从任何page.aspx.cs搜索关于侦听客户端方法的调用,我没有得到任何东西..

我希望我已经解释了这个问题,如果没有......请原谅..

1 个答案:

答案 0 :(得分:0)

不,你不能使用SignalR连接调用aspx.cs方法(在Hub之外)。什么是需要使用SignalR调用aspx.cs方法的extact场景?正如您所提到的,使用ajax来调用aspx.cs方法。

对于上面提到的代码片段,ajax最适合(不是 SignalR)。

SignalR主要用于需要客户端和服务器之间的开放连接时(使用websocket,其中一个是SignalR的传输选项支持)。如果您需要将消息从服​​务器推送到客户端而没有客户端请求它,则更合适。

// Invoke this from server when server want to push some information to client without client requesting this information
$.connection.myHub.client.updateData = function (thisdata) {
        $('ul').append('<li>' + thisdata + '</li>');
    };