SignalR生成多个执行

时间:2013-11-19 09:47:52

标签: signalr

我使用SignalR建立一个搜索引擎,实时向客户提供部分回复。

第一次搜索未结束时会出现问题,客户端会修改文本框的值(txtTab)并再次单击按钮(btnSearch)。两个查询的结果是混合的,因为服务器保留了两个并发执行。

我需要在客户点击搜索按钮时取消上一次执行。

尝试使用hub.stop()和hub.disconnect(),但我不能。

抱歉,我的英文不好:)

        var busca = $.connection.hubBusca;

        busca.client.atualizaResultados = function (arr) {
            oTable.fnAddData(arr);
        };

        $.connection.hub.start().done(function () {
            $('#btnSearch').click(function () {
                if ($('#txtTab').val() != '') {
                    busca.server.iniciar($('#txtTab').val());
                }                    
            });
        });

谢谢! 路易斯费尔南多

1 个答案:

答案 0 :(得分:0)

我建议创建一个额外的服务器和客户端方法来处理最终搜索(在点击#btnSearch时会发生这种情况)。

而不是调用busca.server.iniciar来调用类似busca.server.terminar的内容。

我还建议在调用busca.server.terminar之前设置某种布尔标志以禁用busca.client.atualizaResultados,这样初步搜索结果就不会影响最终的搜索结果。

然后在HubBusca.Terminar中,您可以拨打Clients.Caller.finalesResultados,这与Clients.Caller.atualizaResultados不同,不会被禁用。

通过这种方式,您可以确保发送到finalesResultados方法的最终搜索结果不会被发送到atualizaResultados客户端方法的结果替换。

抱歉我的西班牙方法名称不好。我使用谷歌翻译。