从SignalR.NET客户端连接到工作集线器时出现HttpClientException

从SignalR.NET客户端连接到工作集线器时出现HttpClientException,signalr,signalr.client,Signalr,Signalr.client,我有一个工作的SignalR应用程序,它允许我连接多个JavaScript客户端并交换数据。当我尝试连接.NET客户端时,出现以下错误: An exception of type 'Microsoft.AspNet.SignalR.Client.HttpClientException' occurred in mscorlib.dll but was not handled in user code Additional information: StatusCode: 500, Reason

我有一个工作的SignalR应用程序,它允许我连接多个JavaScript客户端并交换数据。当我尝试连接.NET客户端时,出现以下错误:

An exception of type 'Microsoft.AspNet.SignalR.Client.HttpClientException' occurred in mscorlib.dll but was not handled in user code

Additional information: StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:

{
  Transfer-Encoding: chunked
  X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcRGFycmVuXERlc2t0b3BcQ29uc29sZUFwcGxpY2F0aW9uMVxXZWJBcHBsaWNhdGlvbjFcc2lnbmFsclxuZWdvdGlhdGU=?=
  Cache-Control: private
  Date: Thu, 28 May 2015 09:13:06 GMT
  Server: Microsoft-IIS/8.0
  X-AspNet-Version: 4.0.30319
  X-Powered-By: ASP.NET
  Content-Type: text/html; charset=utf-8
}
为了尽可能多地删除变量,我将Hub复制到一个全新的web应用程序中,并将.NET客户端代码复制到一个控制台应用程序中。我仍然得到同样的例外。这是我的客户代码:

Dim hubConnection As HubConnection
Dim chatHubProxy As IHubProxy

Public Async Sub RunTest()
    System.Net.ServicePointManager.DefaultConnectionLimit = 10

    hubConnection = New HubConnection("http://localhost:64400")
    hubConnection.Credentials = Net.CredentialCache.DefaultCredentials
    hubConnection.TraceLevel = TraceLevels.All
    hubConnection.TraceWriter = Console.Out

    chatHubProxy = hubConnection.CreateHubProxy("Chat")

    AddHandler hubConnection.StateChanged, Sub(stateChange) Console.WriteLine("[" & DateTime.Now & "]: " & stateChange.OldState.ToString() & " =>  " & stateChange.NewState.ToString() & " " & hubConnection.ConnectionId)

    chatHubProxy.On(Of String, String)("ReceiveMessage", Sub(from, message) Console.WriteLine(message))
    Await hubConnection.Start()
End Sub
以下是控制台输出:

09:21:54.3952161 - null - ChangeState(Disconnected, Connecting)
[28/05/2015 10:21:54]: Disconnected =>  Connecting
[28/05/2015 10:21:56]: Connecting =>  Disconnected
09:21:56.8448452 - null - Disconnected
09:21:56.8458461 - null - Transport.Dispose()
09:21:56.8468465 - null - Closed
这是我的中心代码:

public class ChatHub : Hub
{
    public void SendMessage(string name, string message)
    {
        Clients.All.ReceiveMessage(name, message);
    }
}

这原来是一个微不足道的错误,但错误消息是如此无用,我相信其他人也会被同样的问题难倒。中心的名称是错误的。当我应该使用“聊天中心”时,我使用了“聊天”


如果异常是404,或者“找不到集线器”或者类似的东西,那么它将是一个简单的修复,而不是浪费几个小时

真正的问题已解决,但我认为重要的是要认识到,信号服务器返回状态500(内部服务器错误)(事实上不是非常信息性错误)是安全功能

如果需要有关服务器错误的更多信息,可以执行以下操作:

(一)

和/或

2) 启用发送到客户端的详细异常消息(不要在生产中这样做!):

信号机1.x:
RouteTable.Routes.MapHubs(新的HubConfiguration{EnableDetailedErrors=true})

信号机2.x

public void Configuration(IAppBuilder app)
{
        var hubConfiguration = new HubConfiguration
        {
#if DEBUG
            EnableDetailedErrors = true
#else
            EnableDetailedErrors = false
#endif
        };

        app.MapSignalR(hubConfiguration);
}

@Michael Tiller在@Darren的答案中的评论最终成为了我问题的解决方案,因此我认为将此作为自己的答案是公平的:

将Hub类更改为
public
解决了我的问题。我遵循了一个示例,但没有看到上面提到的创建从
Hub
继承的公共类的文本,在VisualStudio中添加新类时,默认情况下会将其创建为

class TestHub
{
}

…这在技术上是内部的(请参阅)。如果我能更仔细地阅读,就不会发生这种情况,但万一有人像我一样匆忙行事……:)

我也犯了类似的小错误,花了几个小时才弄清楚

[HubName("Hostsync")] // Missed to add this attribute in Hub of SignalR Self Host
public class ChatHub : Hub
{

}
但我试图通过在客户端中定义代理名称来连接

HostProxyName = "Hostsync";
只要确保没有这样的错误。因为在建立连接的过程中,您不会得到确切的详细异常

下面的链接帮助我解决了一些问题

堆栈溢出


希望这有帮助。

我也有同样的问题。我发现signarjquery扩展版本比引用的signarlibrary旧。我更正了脚本版本,问题解决了。如果您最近将SignalR升级到了新版本,您可能会遇到与我相同的问题。

请尝试。希望SignalR会记录错误…如果名称正确,但
Hub
类不是公共类,也可能发生这种情况。我花了半天时间才发现这是由CreateHubProxy中的输入错误引起的!我讨厌后期绑定和非强打印。谢谢,这节省了时间day@MichaelTiller-非常感谢,这就是我的问题所在。@Darren干得好!请将此标记为最佳答案。