SignalR:调用集线器方法“XXX”时出错

问题描述 投票:0回答:3

服务器:

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个多小时了,即使我简化了代码,仍然找不到撤消的地方。

(拼写严格检查,无错别。)

c# .net windows-8 windows-runtime signalr
3个回答
82
投票

显然你在服务器端遇到了一些问题。但要找出问题所在,您需要查看详细的错误。 出于安全原因,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 浏览器 Web 开发人员工具这样的工具,它为您提供操作的网络部分,其中记录所有数据传输状态。您可以在那里检查 SignalR 错误。日志上的信息会非常详细且有帮助。

这是一个使用 Chrome 浏览器进行调试的示例,供那些通过 Chrome 调试工具查看 SignalR 错误的人使用:

下载完整图像尺寸

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

如果您还有其他问题,请告诉我。

有关更多信息,请访问:SignalR 错误


4
投票

好吧,经过两个半小时的艰难调试,我终于发现了真相,奇怪的是,无论我更改了服务器端代码,卧底机制或功能都没有以某种方式同步,直到我不小心重建了项目并等待IIS Express 再次预热。

这不是 SignalR 的错,我认为是 Visual Studio 的错。每次我对 Hub 类进行一些更改时,我都必须重建服务器端项目。就是这样。我不得不说,这真的很痛苦,尽管我不知道为什么会发生这种情况 - 也许这是因为我的解决方案由 WinRT 和 ASP.NET 项目组成,两者相处得不好?我不知道。

仅供参考,我将附上一个帖子的链接,其中其他人确实发生了类似的“重建”问题。

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

现在的解决方法非常简单 - 只需去重建即可。


0
投票

此错误通常是当您的后端代码中有逻辑错误时引起的。在下面的帖子中,我完成了如何在 localhostAzure(任何云) 上解决该问题的步骤。在解决方案的最后有一个关于

HubException
的重要说明,您很可能需要注意这一点。

https://stackoverflow.com/a/78937267/3944285

祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.