C# 信号器:调用集线器方法时出错;XXX“;

C# 信号器:调用集线器方法时出错;XXX“;,c#,.net,windows-8,windows-runtime,signalr,C#,.net,Windows 8,Windows Runtime,Signalr,服务器: .NET客户端: public void AddLine(string line) { Clients.Others.addLine(line); } 例外情况: await rtHubProxy.Invoke("AddLine", "lineInfo"); 实际上,我正试图用复杂对象调用该方法,结果却发现了异常。因此,为了调试的目的,我更改了参数的类型,并将AddLine()主体留空,奇怪的是,它仍然抛出相同的异常 我在客户端还有另一个signer调用,就在上面几行,它响

服务器:

.NET客户端:

public void AddLine(string line)
{
    Clients.Others.addLine(line);
}
例外情况:

await rtHubProxy.Invoke("AddLine", "lineInfo");
实际上,我正试图用复杂对象调用该方法,结果却发现了异常。因此,为了调试的目的,我更改了参数的类型,并将AddLine()主体留空,奇怪的是,它仍然抛出相同的异常

我在客户端还有另一个signer调用,就在上面几行,它响应性地运行,没有错误。相应的服务器端代码如下所示:

InvalidOperationException: There was an error invoking Hub method 'xxx.AddLine'.
谁能找出我哪里做错了?我已经调试了4个多小时,即使简化了代码,仍然找不到撤销


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

好的,经过2个半小时的艰难调试,我终于发现了真相,很奇怪地意识到,尽管我更改了服务器端代码,直到我意外地重建了项目并等待IIS Express再次预热,秘密机制或功能才以某种方式得到同步

这不是信号员的错,但我认为是VisualStudio的错。每次对Hub类进行一些更改时,我都必须重建服务器端项目。就这样。我不得不说,这真的很痛苦,尽管我不知道为什么会发生这种情况——也许这是因为我的解决方案由WinRT和ASP.NET项目组成,但不能很好地相处?我不知道

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


目前的解决方法并不简单,只要重新构建即可。

显然,服务器端存在一些问题。但要找出问题所在,您需要查看详细的错误。 出于安全原因,默认情况下,Signal不会向您提供详细错误。但您可以编辑代码以获取详细错误

首先,您需要将此代码添加到Startup.cs:

public void Hello(string text)
{
    Clients.All.hello(text);
}
然后,要在客户端显示错误,需要将此代码添加到项目中:

var hubConfiguration = new HubConfiguration();
    hubConfiguration.EnableDetailedErrors = true;
    app.MapSignalR(hubConfiguration);
就这么简单,你就可以走了

有时,您甚至无法访问客户端来查看错误。但是通过执行第一部分,您将启用详细的错误,并且可以在信号器响应上看到错误。您只需要一个类似Chrome Browser Web Developer tool的工具,它为您提供操作的网络部分,其中记录了所有数据传输状态。你可以在那里检查信号错误。日志上的信息将非常详细和有用

这是一个使用Chrome浏览器进行调试的示例,适用于通过Chrome调试工具查看信号器错误的用户:

如果您在这方面有其他问题,请告诉我


有关更多信息,请转到:

您是否有内部异常?将DetailedHubExceptions打开@dfowler是的,我已经这样做了。但异步调用似乎以某种方式隐藏了内部异常。据说在.net 4.5中,异步调用的调试变得更容易了,但我不知道该怎么做。@RobG,虽然不可见。谢谢你的回答!实际上,我已经启用了该选项,但大多数时候仍然发现异常消息相当简短。我想问题在于调试信号器时,服务器端代码没有刷新,有时甚至没有运行。您能给我一条异常消息吗?如果您觉得需要,请参阅调试说明@HiredNikoo,您的图像链接已失效,您不应将其重定向到外部网站,只需将其上载到此处并共享该链接即可。@Hirad Nikoo,谢谢您的回答。我想知道为什么异常消息没有在信号器响应中显示细节。根据您的评论,我转到startup.cs类,发现“hubConfiguration.EnableDetailedErrors”设置为“false”。我只是为了调试而将其设置为“true”,然后将其设置回“false”。这救了我一天。
$.connection.hub.error(function (error) {
    console.log('SignalR error: ' + error)
});