Подтвердить что ты не робот

SignalR: произошла ошибка, вызывающая метод Hub "XXX"

Сервер:

public void AddLine(string line)
{
    Clients.Others.addLine(line);
}

Клиент .NET:

await rtHubProxy.Invoke("AddLine", "lineInfo");

Исключение:

InvalidOperationException: There was an error invoking Hub method 'xxx.AddLine'.

Собственно, я пытался вызвать метод со сложным объектом, только чтобы найти исключение. Поэтому я изменил тип параметра и оставил пустой элемент AddLine() пустым для целей отладки, что довольно странно, оно все равно бросает одно и то же исключение.

У меня также есть другой вызов SignalR на стороне клиента, всего несколько строк выше, который работает без ошибок. Соответствующий серверный код выглядит следующим образом:

public void Hello(string text)
{
    Clients.All.hello(text);
}

Может ли кто-нибудь узнать, где я ошибся? Я отлаживал более 4 часов и до сих пор не могу найти отмену даже после того, как упростил код.

(орфография строго проверена, нет рассогласования.)

4b9b3361

Ответ 1

Очевидно, что у вас есть некоторые проблемы на стороне сервера. Но чтобы выяснить, в чем проблема, вам нужно увидеть подробную ошибку. По соображениям безопасности SignalR по умолчанию не дает вам подробной ошибки. Но вы можете изменить свой код, чтобы получить подробную ошибку.

Сначала вам нужно добавить этот код в Startup.cs:

var hubConfiguration = new HubConfiguration();
    hubConfiguration.EnableDetailedErrors = true;
    app.MapSignalR(hubConfiguration);

Затем, чтобы показать ошибку на стороне клиента, вам необходимо добавить этот код в свой проект:

$.connection.hub.error(function (error) {
    console.log('SignalR error: ' + error)
});

Так просто, как и вам хорошо.

Иногда вы даже не попадаете на клиентскую часть, чтобы увидеть ошибку. Но, выполнив первую часть, вы включите подробную ошибку, и вы увидите ошибки в сигнале SignalR. Вам просто нужен инструмент, например, Chrome Browser Web Developer Tool, который дает вам сетевую часть операции, в которой регистрируется весь статус передачи данных. вы можете проверить там ошибки SignalR. Информация о журнале будет очень подробной и полезной.

Это пример отладки с браузером Chrome для тех, кто видит ошибки SignalR с помощью инструмента отладки Chrome:

Загрузить размер полного изображения

This is for people who want to debug the ajax response through Chrome Browser

Сообщите мне, есть ли у вас другие проблемы.

За дополнительной информацией перейдите по ссылке: Ошибки SignalR

Ответ 2

ОК, через 2 часа и половину скалистой отладки, я, наконец, узнал правду, осознав это, однако, я изменил свой код на стороне сервера, механизм или функции тайного обмена каким-то образом не синхронизировались, пока я случайно не восстановил проект и ждал, что IIS Express снова разогреется.

Это не ошибка SignalR, но Visual Studio я думаю. Каждый раз, когда я вношу некоторые изменения в класс Hub, мне приходится перестраивать серверный проект. Это. Я должен сказать, что это действительно болит, хотя я не знаю, почему это должно произойти. Может быть, потому что мое решение состоит из проекта WinRT и ASP.NET, который хорошо ладит? Я не знаю.

FYI, я приложу ссылку на сообщение, в котором аналогичная проблема "перестроить" произошла с кем-то еще.

http://forum.kooboo.com/yaf_postst2250_How-to-use-SignalR-in-a-Module.aspx

И обходной путь на данный момент более чем прост - просто перейдите и REBUILD.