nig*_*awk 5 c# service self-hosting signalr
有没有办法阻止SignalR服务器?我有自己托管的SignalR服务器作为Windows服务,但我找不到任何方法来停止服务器/服务.
我试过这个但它不起作用 - 服务器一直在监听并阻止服务停止.
或者,如何完全停止服务,强制SignalR关闭?
[编辑]:
大多数来源我不能分享(版权/安全)但我会尽我所能:
SignalR服务器初始化
Task signalRTask = null;
IDisposable SignalR;
#region SignalR server init
// Kreiraj SignalR server
try
{
cancelTokenSrc = new CancellationTokenSource();
signalRTask = Task.Factory.StartNew(RunSignalR, TaskCreationOptions.LongRunning, cancelTokenSrc.Token);
logfile.Info("Starting notifications pool thread...");
//Console.WriteLine(DateTime.Now.ToString("dd.MM.yyyy. HH:mm:ss ") + "Starting notifications pool thread...");
senderThread = new Thread(delegate()
{
sender.poolEvents();
});
senderThread.Start();
}
catch (Exception ex)
{
// greška u startanju SignalR servera
ServiceEngine.logfile.Info("Error starting SignalR on " + signalr_bind + " with error:" + ex.ToString());
//Console.WriteLine(DateTime.Now.ToString("dd.MM.yyyy. HH:mm:ss ") + "Error starting SignalR @ {1} with error {0}", ex.ToString(), signalr_bind);
}
#endregion
#region SignalR start
// pokre?e signalR server
public void RunSignalR(object task)
{
try
{
logfile.Info("Starting SignalR server on " + signalRBindAddr);
SignalR = WebApp.Start(signalRBindAddr);
logfile.Info("SignalR server running on " + signalRBindAddr);
}
catch (Exception ex)
{
ServiceEngine.logfile.Info("Error starting SignalR: " + ex.ToString());
}
//Console.WriteLine(DateTime.Now.ToString("dd.MM.yyyy. HH:mm:ss ") + "SignalR server running on {0}", signalRBindAddr);
}
#endregion
public class Startup
{
public void Configuration(IAppBuilder app)
{
var hubConfiguration = new HubConfiguration { };
hubConfiguration.EnableDetailedErrors = true;
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR(hubConfiguration);
}
}
public void Stop()
{
try
{
logfile.Info("Stop called...");
SignalR.Dispose();
cancelTokenSrc.Cancel();
//signalRTask.Dispose();
logfile.Info("SignalR down, exit...");
//Console.WriteLine(DateTime.Now.ToString("dd.MM.yyyy. HH:mm:ss ") + "SignalR down, exit...");
}
catch (Exception ex)
{
ServiceEngine.logfile.Info(ex.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用Stop()时,SignalR继续监听(客户端可以连接,端口状态为"LISTEN"...),我无法停止服务.
PS抱歉格式错误,英文不好
显然不是一个完整的答案,但我设法在我的古老服务中实现了暂停,而不是停止,如Windows 服务中的自托管 SignalR中所述。
然而,我随后将它们全部重构为微服务,将必须停止的集线器放置在单独的微服务中。该解决方案允许您通过 SCM 或通过直接调用(如果您在容器上运行)手动启动和停止服务。
从架构上来说,后一种解决方案具有一定的开销,因为您添加了一个需要身份验证、联合和数据 IO 的新层。根据具体情况,您可能已经拥有支持该功能的基础架构。
归档时间: |
|
查看次数: |
960 次 |
最近记录: |