所以最近我开始进行Web开发(.NET Core 3.0 Razor Pages),并决定使用SignalR进行RPC。
唯一的问题是,当我尝试使用C#和.NET Core连接到集线器时,我只能从JavaScript连接到集线器,这引发了3个异常,即SocketException
和{{1 }}和IOException
(下面是完整的堆栈跟踪记录)
这是我的代码:
HttpRequestException
我的集线器看起来像这样:
private HubConnection _connection;
public async Task OnGet()
{
var connection = new HubConnectionBuilder().WithUrl("http://127.0.0.1:44389/Hub/FingerprintHub").Build();
// The program waits here and
// after roughly 2 minutes throws the exceptions
await _connection.Start();
}
我这样配置服务:
public class FingerprintHub : Hub
{
public async Task ScanFingerprint(string fingerprint)
{
await Clients.All.SendAsync("FoundFingerprint", fingerprint);
}
}
我正在将Microsoft.AspNetCore.SignalR.Client和Microsoft.AspNetCore.SignalR.Client.Core 3.0.0-preview5版本与.NET Core预览版5-011568一起使用
SocketException:现有连接被远程主机强行关闭。
System.Net.Sockets.SocketException(10054):现有连接被远程主机强行关闭。
IOException:无法从传输连接读取数据:现有连接被远程主机强行关闭。
System.IO.IOException:无法从传输连接中读取数据:现有连接被远程主机强制关闭。---> System.Net.Sockets.SocketException:现有连接已由远程主机强制关闭远程主机。 ---内部异常堆栈跟踪的结尾--- 在System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError错误,CancellationToken cancelToken) 在System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16令牌) 在System.Net.Http.HttpConnection.FillAsync() 在System.Net.Http.HttpConnection.ReadNextResponseHeaderLineAsync(BooleanfoldedHeadersAllowed) 在System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage请求,CancellationToken cancelleToken)
HttpRequestException:发送请求时发生错误。
System.Net.Http.HttpRequestException:发送请求时发生错误。 ---> System.IO.IOException:无法从传输连接中读取数据:远程主机强制关闭了现有连接。---> System.Net.Sockets.SocketException:现有连接被强制关闭远程主机。