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

时间:2015-05-28 09:25:10

标签: 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
}

要删除尽可能多的变量,我将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);
    }
}

5 个答案:

答案 0 :(得分:14)

这结果是一个微不足道的错误,但错误信息是如此无用我确定其他人会被同样的问题困扰。集线器的名称是错误的。我用了#34;聊天"当我应该使用" ChatHub"。

如果异常是404,或者#34; Hub未找到"或类似的东西,这将是一个简单的解决方案,而不是几个浪费的时间!

答案 1 :(得分:5)

@Michael Tiller在@ Darren的回答中的评论结果证明是我问题的解决方案,所以我觉得把它变成自己的答案是公平的:

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

class TestHub
{
}

......技术上internal(见here)。更谨慎的阅读本身就可以防止这种情况发生,但万一其他人像我一样匆匆忙忙......:)

答案 2 :(得分:1)

真正的问题已解决我认为重要的是要意识到SignalR服务器返回状态500(内部服务器错误)(确实不是非常有用的错误)是安全功能

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

1)Enable tracing on server

和\或

2)启用发送给客户端的详细异常消息(不要在生产中执行此操作!):<​​/ p>

SignalR 1.x: RouteTable.Routes.MapHubs(new HubConfiguration { EnableDetailedErrors = true });

SignalR 2.x

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

        app.MapSignalR(hubConfiguration);
}

答案 3 :(得分:0)

我做了类似的琐碎错误花了几个小时来搞清楚。

    Route::group([ 'middleware' => 'auth'] , function() {

        Route::get('admin', function() {
         return view('master'); 
        });

        Route::get('admin/categories','CategoryController@index')->name('categories.index');
        Route::get('admin/categories/create','CategoryController@create')->name('categories.create');
        Route::post('admin/categories/store','CategoryController@store')->name('categories.store');
        Route::get('admin/categories/edit/{id}','CategoryController@edit')->name('categories.edit');
        Route::post('admin/categories/update/{id}','CategoryController@update')->name('categories.update');
        Route::delete('admin/categories/delete/{id}','CategoryController@destroy')->name('categories.destroy');
    });

但我试图通过在Client中定义代理名称来进行连接。

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

}

确保没有这样的错误。由于在建立连接期间不会得到确切的详细异常。

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

Stackoverflow Question Answer Link

希望这会有所帮助。

答案 4 :(得分:0)

我有同样的问题。我发现SignalR Jquery扩展版本早于所引用的SignalR库。我更正了脚本版本并解决了问题。如果您最近将SignalR升级到了较新的版本,则可能会遇到与我相同的问题。