从 SignalR .NET 客户端连接到工作中心时出现 HttpClientException
HttpClientException when connecting to working hub from SignalR .NET 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);
}
}
事实证明这是一个微不足道的错误,但错误消息是如此无用我相信其他人也会被同样的问题难倒。集线器的名称错误。当我应该使用 "ChatHub".
时,我使用了 "Chat"
如果异常是 404,或 "Hub not found" 或类似的东西,那将是一个简单的修复,而不是浪费几个小时!
真正的问题已解决但是我认为重要的是要认识到 SignalR 服务器返回状态 500(内部服务器错误)(确实不是非常有用的错误)是 安全功能。
如果您需要有关服务器错误的更多信息,您可以执行以下操作:
and\or
2) 启用发送到客户端的详细异常消息(不要在生产中这样做!):
信号R 1.x:
RouteTable.Routes.MapHubs(new HubConfiguration { EnableDetailedErrors = true });
信号R 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 的回答中的评论被证明是我问题的解决方案,所以我认为将其作为自己的回答是公平的:
将集线器 class 更改为 public
解决了我的问题。我按照一个例子,错过了说要创建一个继承自 Hub
的 PUBLIC class 的文本,当在 Visual Studio 中添加一个新的 class 时,通过默认将其创建为
class TestHub
{
}
...这在技术上是 internal
(参见 here)。就我而言,更仔细的阅读可以避免这种情况,但万一其他人像我一样匆忙......:)
我犯了类似的小错误,花了几个小时才弄明白。
[HubName("Hostsync")] // Missed to add this attribute in Hub of SignalR Self Host
public class ChatHub : Hub
{
}
但我试图通过在客户端中定义代理名称来连接。
HostProxyName = "Hostsync";
只要确保没有此类错误即可。因为在连接建立期间您不会得到确切的详细异常。
以下 link 帮助我解决了一些问题
计算器 Question Answer Link
希望对您有所帮助。,
我遇到了同样的问题。我发现 SignalR Jquery 扩展版本比引用的 SignalR 库旧。我更正了脚本版本并解决了问题。如果您最近将 SignalR 升级到更新版本,您可能会遇到与我相同的问题。
我有一个可用的 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);
}
}
事实证明这是一个微不足道的错误,但错误消息是如此无用我相信其他人也会被同样的问题难倒。集线器的名称错误。当我应该使用 "ChatHub".
时,我使用了 "Chat"如果异常是 404,或 "Hub not found" 或类似的东西,那将是一个简单的修复,而不是浪费几个小时!
真正的问题已解决但是我认为重要的是要认识到 SignalR 服务器返回状态 500(内部服务器错误)(确实不是非常有用的错误)是 安全功能。
如果您需要有关服务器错误的更多信息,您可以执行以下操作:
and\or
2) 启用发送到客户端的详细异常消息(不要在生产中这样做!):
信号R 1.x:
RouteTable.Routes.MapHubs(new HubConfiguration { EnableDetailedErrors = true });
信号R 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 的回答中的评论被证明是我问题的解决方案,所以我认为将其作为自己的回答是公平的:
将集线器 class 更改为 public
解决了我的问题。我按照一个例子,错过了说要创建一个继承自 Hub
的 PUBLIC class 的文本,当在 Visual Studio 中添加一个新的 class 时,通过默认将其创建为
class TestHub
{
}
...这在技术上是 internal
(参见 here)。就我而言,更仔细的阅读可以避免这种情况,但万一其他人像我一样匆忙......:)
我犯了类似的小错误,花了几个小时才弄明白。
[HubName("Hostsync")] // Missed to add this attribute in Hub of SignalR Self Host
public class ChatHub : Hub
{
}
但我试图通过在客户端中定义代理名称来连接。
HostProxyName = "Hostsync";
只要确保没有此类错误即可。因为在连接建立期间您不会得到确切的详细异常。
以下 link 帮助我解决了一些问题
计算器 Question Answer Link
希望对您有所帮助。,
我遇到了同样的问题。我发现 SignalR Jquery 扩展版本比引用的 SignalR 库旧。我更正了脚本版本并解决了问题。如果您最近将 SignalR 升级到更新版本,您可能会遇到与我相同的问题。