2016-08-29 3 views
0

У меня есть запрос от клиента на сервер с использованием SignalR-2.2.1. После этого запроса сервер отправит результаты обратно вызывающему абоненту. Вот мой JavaScript код:C# MVC - отправить сообщение с SignalR с сервера на вызывающий

$(document).ready(function() { 
    var myHub = $.connection.signalHub; 
    myHub.client.receive = function (tmp) { 
     var obj = $.parseJSON(tmp); 
     //do something 
    }; 
    $.connection.hub.start().done(function() { 
     $('#xxxxx').click(function() { 
      var form = $("form"); 
      form.submit(); 
      myHub.server.sendSomething(); 
     }); 
    }).fail(function (reason) { 
     //do something 
    }); 
}); 

А вот код с моей стороны сервера

public partial class SignalHub : Hub 
{ 
    public void SendSomething() 
    { 
     Clients.All.receive(MyJson); 
    } 
} 

Когда я использую Clients.All функцию, она отлично работает. Но я хочу, чтобы сервер только отправил результат обратно вызывающему абоненту (тот, который отправил запрос). Так что я меняю Clients.All.receive(MyJson) на Clients.Caller.receive(MyJson). После того, как я его изменил, теперь клиент не обновляет контент. Нужно ли мне указывать свою функцию приема на стороне клиента, чтобы она получала что-то другое?

+0

Нет, это должно сработать. Что-нибудь в консоли браузера? –

+0

@Mark проверить мой ответ –

+0

@SamiKuhmonen его как функция не вызывается в javascript. Нет ничего в консоли/журнале. – Mark

ответ

1

Я предполагаю, что, поскольку вы звоните form.submit();, вы, вероятно, перемещаетесь от страницы или, возможно, перезагружаете его, в этом смысле новое соединение с другим «connectionId» устанавливается между новой/перезагруженной страницей, таким образом, сообщение предназначенный для Client.Caller, потерян, так как он связан с соединением, установленным на странице, на которой вы перемещались или обновлялись.

Возможно, вы захотите рассмотреть отправку своих данных формы с помощью AJAX вместо полной формы submit.

+0

Я также попытался отправить идентификатор соединения после отправки формы и отправить его обратно с сервера с помощью 'Clients.Client (connectionID) .receive (MyJson)', но он все тот же. Я попробую использовать AJAX и обновить результат – Mark

+0

, теперь он отлично работает. поэтому проблема была в 'form.submit()'. После того, как я изменил его на 'AJAX call' и отобразил страницу с результатом, SignalR работает нормально. Большое спасибо, – Mark

Смежные вопросы