服务器:
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个多小时了,即使我简化了代码,仍然找不到撤消的地方。
(拼写严格检查,无错别。)
显然你在服务器端遇到了一些问题。但要找出问题所在,您需要查看详细的错误。 出于安全原因,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 错误的人使用:
如果您还有其他问题,请告诉我。
有关更多信息,请访问:SignalR 错误
好吧,经过两个半小时的艰难调试,我终于发现了真相,奇怪的是,无论我更改了服务器端代码,卧底机制或功能都没有以某种方式同步,直到我不小心重建了项目并等待IIS Express 再次预热。
这不是 SignalR 的错,我认为是 Visual Studio 的错。每次我对 Hub 类进行一些更改时,我都必须重建服务器端项目。就是这样。我不得不说,这真的很痛苦,尽管我不知道为什么会发生这种情况 - 也许这是因为我的解决方案由 WinRT 和 ASP.NET 项目组成,两者相处得不好?我不知道。
仅供参考,我将附上一个帖子的链接,其中其他人确实发生了类似的“重建”问题。
http://forum.kooboo.com/yaf_postst2250_How-to-use-SignalR-in-a-Module.aspx
现在的解决方法非常简单 - 只需去重建即可。
此错误通常是当您的后端代码中有逻辑错误时引起的。在下面的帖子中,我完成了如何在 localhost 或 Azure(任何云) 上解决该问题的步骤。在解决方案的最后有一个关于
HubException
的重要说明,您很可能需要注意这一点。
https://stackoverflow.com/a/78937267/3944285
祝你好运。