服务器:
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个多小时,即使在我简化代码之后仍然无法找到撤消。
(严格检查拼写,没有不匹配。)
答案 0 :(得分:59)
显然,您在服务器端遇到了一些问题。但要找出问题所在,您需要查看详细错误。 出于安全原因,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 Errors
答案 1 :(得分:2)
好的,经过2个半小时的调试后,我终于找到了真相,意识到我们已经改变了我的服务器端代码,秘密机制或功能并没有以某种方式得到同步,直到我意外重建项目并等待IIS Express再次热身。
这不是SignalR的错,但我认为是Visual Studio。每次我对Hub类进行一些更改时,我都必须重建服务器端项目。而已。我不得不说,它真的很疼,虽然我不知道为什么会发生这种情况 - 也许这是因为我的解决方案包括WinRT和ASP.NET项目不能相处得很好?我不知道。
仅供参考,我会附上一个帖子的链接,其中一个类似的“重建”问题确实发生在其他人身上。
http://forum.kooboo.com/yaf_postst2250_How-to-use-SignalR-in-a-Module.aspx
现在的解决方法不仅仅是简单 - 只需去和REBUILD。