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

Dar*_*ren 9 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, 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
}
Run Code Online (Sandbox Code Playgroud)

为了删除尽可能多的变量,我将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
Run Code Online (Sandbox Code Playgroud)

这是控制台输出:

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
Run Code Online (Sandbox Code Playgroud)

这是我的集线器代码:

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

Dar*_*ren 17

这结果是一个微不足道的错误,但错误信息是如此无用我相信其他人将被同样的问题困扰.集线器的名称是错误的.我应该使用"ChatHub"时使用"聊天".

如果异常是404,或"找不到Hub"或类似的东西,那将是一个简单的修复,而不是浪费几个小时!

  • 如果名称正确但"Hub"类不公开,也会发生这种情况. (8认同)
  • 我花了一半的时间才发现它是由CreateHubProxy中的拼写引起的!我讨厌后期绑定和非强类型. (2认同)

小智 6

@Michael Tiller在@Darren的答案中的评论原来是我的问题的解决方案,所以我认为将其变成自己的答案是公平的:

更改Hub类以public解决我的问题。我遵循了一个示例,并错过了说要创建从继承的PUBLIC类的文本Hub,并且在Visual Studio中添加新类时,默认情况下,它将创建为

class TestHub
{
}
Run Code Online (Sandbox Code Playgroud)

...从技术上讲internal(请参阅此处)。就我而言,更仔细的阅读本可以防止这种情况的发生,但是如果其他人像我一样急于忙... :)