41

服务器:

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

(拼写严格检查,没有不匹配。)

4

2 回答 2

75

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

下载完整图像大小

这适用于想要通过 Chrome 浏览器调试 ajax 响应的人

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

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

于 2013-12-21T05:32:27.443 回答
3

好的,经过2个半小时的艰难调试,我终于找到了真相,奇怪的是,我改变了我的服务器端代码,卧底机制或功能并没有同步,直到我不小心重建了项目并等待IIS Express 再次预热。

我认为这不是 SignalR 的错,而是 Visual Studio 的错。每次对 Hub 类进行一些更改时,我都必须重新构建服务器端项目。就是这样。我不得不说,真的很痛,虽然我不知道为什么会这样——也许是因为我的解决方案由 WinRT 和 ASP.NET 项目组成,相处得不好?我不知道。

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

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

现在的解决方法不仅仅是简单的 - 只需去重建。

于 2013-10-31T12:10:59.927 回答