我使用以下类为客户端信号创建自定义.net标准2.1库:
class OmsSignalRClient : IOmsSignalRClient
{
private HubConnection _hubConnection;
public OmsSignalRClient(Uri baseUri, string token)
{
_hubConnection = new HubConnectionBuilder()
.WithUrl(baseUri.ToAbsoluteUri("/signalr/clientHub").AbsoluteUri, option =>
{
option.AccessTokenProvider = () => Task.FromResult(token);
})
.Build();
_hubConnection.On<string>("SayHellow", date => OnTestData?.Invoke(this, new TestDataEventArgs(date)));
}
public event EventHandler<TestDataEventArgs> OnTestData;
public async ValueTask DisposeAsync()
{
if (_hubConnection != null)
{
await _hubConnection.DisposeAsync().ConfigureAwait(false);
}
}
public async Task StartAsync() => await _hubConnection.StartAsync();
}
然后在我的blazor .net core 3.1托管应用中创建一个组件并按以下方式使用它:
protected override async Task OnInitializedAsync()
{
var loginData = new LoginData()
{
UserName = "admin",
Password = "123@456#Pass"
};
Console.WriteLine("Start");
_omsClient = (IOmsSignalRClient)await _omsClientFactory.OpenConnectionAsync(new Uri(_navigationManager.Uri), loginData).ConfigureAwait(false);
_omsClient.OnTestData += (_, e) =>
{
_messageInput = e.Data;
StateHasChanged();
};
await _omsClient.StartAsync().ConfigureAwait(false);
}
在运行的应用程序中,我看到此错误:
Firefox无法在wss:// localhost:5001 / signalr / clientHub?id = q1wR_w0DENOM2B5qaAg0bw建立与服务器的连接。
但是在.net core 3.1控制台应用程序中使用lib时,一切正常,并建立了连接。
我认为问题与浏览器使用http / 2.0和http / 1.1而控制台应用程序仅使用http / 1.1有关。
有什么主意吗?
我的应用程序和配置的其他方面都可以,因为从服务器端应用程序的集线器类中删除[Authorize]
时,建立了连接并正确运行了应用程序。
firefox network dialog in remove Authorize attribute from hub
有什么主意吗?
谢谢。