SignalR:调用Hub方法“XXX”时出错

时间:2013-10-30 16:35:26

标签: c# .net windows-8 windows-runtime signalr

服务器:

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个多小时,即使在我简化代码之后仍然无法找到撤消。

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

2 个答案:

答案 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错误的人:

Download Full Image Size

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

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

如需了解更多信息,请访问: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。