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

jhkqcmku  于 2022-12-14  发布在  .NET
关注(0)|答案(2)|浏览(145)

服务器:

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个多小时,即使在我简化了代码后,仍然找不到解决方法。
(严格检查拼写,无不匹配。)

nwlqm0z1

nwlqm0z11#

显然你在服务器端有一些问题。但是要找出问题所在,你需要看到详细的错误信息。出于安全原因,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错误的人:
Download Full Image Size

如果你有其他问题请告诉我。
有关更多信息,请访问:信号R错误

myzjeezk

myzjeezk2#

好吧,经过2个半小时的艰难调试,我终于发现了真相,意识到奇怪的是,无论我如何更改服务器端代码,隐藏的机制或功能都没有以某种方式同步,直到我意外地重新构建了项目,并等待IIS Express再次预热。
这不是SignalR的错,我认为是Visual Studio的错。每次我对Hub类做一些修改,我都必须重新构建服务器端项目。就是这样。我不得不说,这真的很痛苦,尽管我不知道为什么会发生这种情况--也许这是因为我的解决方案由WinRT和ASP.NET项目组成,它们沿着得不好?我不知道。
顺便说一句,我会附上一个链接到一个职位,其中类似的“重建”问题确实发生在别人身上。
http://forum.kooboo.com/yaf_postst2250_How-to-use-SignalR-in-a-Module.aspx
现在的解决方案不仅仅是简单的--只是去重建。

相关问题