Хостинг SignalR выдает ошибку согласования между клиентом .net core signalr и .net console C# signalr server
У меня есть ядро asp.net, работающее на raspberry pi buster с использованием nginx. Я размещал Signar Hub в этом основном веб-приложении asp.net. Все это сработало.
По разным причинам я решил перенести этот хаб на внешнее консольное приложение C# с использованием.Net Framework и Mono.
Я проработал образец кода, представленный онлайн. Но это не работает. Я предполагаю, что это как-то связано с тем, что ядро .net использует разные библиотеки signalr js? Только догадываешься?
Мой клиент js:
$(function () {
$.connection.hub.url = "./NotificationUserHub";
var chat = $.connection.myHub;
$.connection.hub.start().done(function () {
$("#divConnectionStatus").html("Connected");
});
});
мое консольное приложение С #:
public class Program
{
static void Main(string[] args)
{
Hub();
Console.ReadKey();
}
public static void Hub()
{
HostFactory.Run(serviceConfig =>
{
serviceConfig.Service<SignalRServiceChat>(serviceInstance =>
{
serviceConfig.UseNLog();
serviceInstance.ConstructUsing(
() => new SignalRServiceChat());
serviceInstance.WhenStarted(
execute => execute.OnStart(null));
serviceInstance.WhenStopped(
execute => execute.OnStop());
});
TimeSpan delay = new TimeSpan(0, 0, 0, 60);
serviceConfig.EnableServiceRecovery(recoveryOption =>
{
recoveryOption.RestartService(delay);
recoveryOption.RestartService(delay);
recoveryOption.RestartComputer(delay,
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name +
" computer reboot"); // All subsequent failures
});
serviceConfig.SetServiceName
(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
serviceConfig.SetDisplayName
(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
serviceConfig.SetDescription
(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name +
" is a simple web chat application.");
serviceConfig.StartAutomatically();
});
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
Logger.LogVerbose(LoggerName.Debug, "SIGNAL"); //not being called for some reason!!!
//app.UseCors(CorsOptions.AllowAll); //not using cors
app.MapSignalR();
}
}
public partial class SignalRServiceChat : IDisposable
{
public static readonly LogWriter Log = HostLogger.Get<SignalRServiceChat>();
public SignalRServiceChat()
{
}
public void OnStart(string[] args)
{
Log.InfoFormat("SignalRServiceChat: In OnStart");
string url = "http://localhost:5000";
WebApp.Start(url);
}
public void OnStop()
{
Log.InfoFormat("SignalRServiceChat: In OnStop");
}
public void Dispose()
{
}
}
Я получаю сообщение об ошибке:
**Uncaught TypeError: Cannot read property 'hub' of undefined**
Заметки:
Я установил:
Microsoft.AspNet.SignalR.JS on the asp.net core web app
Если я использую свой существующий клиент js (который, как я знаю, работает, когда я размещаю signalR внутри основного приложения.net)
var connection = new signalR.HubConnectionBuilder().withUrl("./NotificationUserHub").build();
connection.serverTimeoutInMilliseconds = 100000;
async function start() {
$("#divConnectionStatus").html("Connecting");
}
я получаю сообщение об ошибке:
**Error: Failed to complete negotiation with the server: Error**