Ошибка на стороне клиента SignalR: соединение началось переподключение до получения результата вызова - PullRequest
0 голосов
/ 11 января 2019

Я предвожу вопрос, используя полный клиент и сервер asp.net SignalR 2.3.0.0, а не версию ядра .net core.

JavaScript-код на стороне клиента

 var pxyHub = $.connection.myHub; 

 $.connection.hub.start();

 pxyHub.server.myServerSideMethod(val1, val2)
    .done( (rntVal) => {
        //do stuff on success...
        })
    .fail( (err) => {
        //do stuff on error...
        })

На стороне сервера я установил точку останова внутри myServerSideMethod (); Если я потрачу время на пошаговое выполнение этого серверного кода, сработает обратный вызов сбоя в браузере, err = "Соединение началось переподключение до получения результата вызова"

Q1. Как я могу продлить тайм-аут на стороне клиента, чтобы это стало возможным, если вызов JS ждет более длительный период (или бесконечно), прежде чем произойдет сбой?

Q2. Как только соединение разорвано, я понимаю, что метод на стороне сервера может продолжаться нормально ... но клиент не узнает об этом .. Как обычно обходить этот сценарий? (т.е. уведомить клиента о результате метода на стороне сервера?)

1 Ответ

0 голосов
/ 11 января 2019

Вот что я делаю ... Клиент JS:

return myHubProxy.server.getUsers();

В моем Хабе у меня есть:

public async Task GetUsers()
{
    try{
         //do stuff to get list of users from database
       }
    catch(Exception ex)
    {

    }
    await Clients.All.usersonline((new JavaScriptSerializer()).Serialize(userlist));
}

Вы можете в «catch» добавить вызов функции JS на стороне клиента для вызова и информирования о результатах в случае сбоя. Что-то вроде: await Clients.Caller.errorMessage("There was an error processing your request."); Примечание. Я использую здесь Clients.Caller, поскольку я предполагаю, что вы захотите вернуть ошибку только запрашивающей стороне. То же самое для вашего результата, есть метод для вызова, который возвращает вызывающему.

...