#c# #xamarin #server #signalr #signalr-hub
Вопрос:
Я пытаюсь создать сервер SignalR с помощью клиента Xamarin. Каждый раз, когда я пытаюсь подключиться к серверу, статус просто «подключается» без изменений. Попытался обойти сертификат с помощью кода, который я нашел в Интернете, но это не решает проблему. И когда я пытаюсь зайти на сайт-концентратор (ip:порт/уведомитель), я получаю сообщение «Требуется идентификатор подключения».
Сторона клиента:
public class SignalRService : ISignalRService
{
private readonly HubConnection hubConnection;
public SignalRService()
{
hubConnection = new HubConnectionBuilder()
.WithUrl("https://ip:5001/notifier", options => {
options.HttpMessageHandlerFactory = factory => new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }
};
})
.WithAutomaticReconnect()
.Build();
}
public void /*async Task*/ Connect()
{
hubConnection.StartAsync();
var a = hubConnection.State;
while (hubConnection.State == HubConnectionState.Connecting) //for debug purposes
{
continue;
}
a = hubConnection.State;
}
На стороне сервера
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapHub<NotifyHub>("/notifier");
});
}
Thanks for any help!
Комментарии:
1. вы проверили, что сервер доступен с вашего устройства/эмулятора? Есть ли какие-либо брандмауэры, блокирующие этот порт?
2. @Джейсон, Это достижимо. когда я пытаюсь связаться с ним с помощью браузера на эмуляторе, он показывает, что соединение не является частным, но оно доступно.
3. @Jason и добавлено правило для порта в брандмауэре (надеюсь, правильно)
Ответ №1:
Итак, наконец-то я нашел решение!
проблема заключалась в том, что эмулятор не мог подключиться к локальному хосту через http://localhost:port но с ip «10.0.2.2:порт»
и по какой-то причине реализовать SignalR для клиента как сервис не сработало…