OWIN Self Host Connections часто сбрасываются - PullRequest
1 голос
/ 06 ноября 2019

Я использую собственный хостинг signalR с помощью Microsoft.Owin.Hosting. Хорошо работает в среде разработки. Когда я развертывался на производственном сервере, имеющем более 1200 клиентов, соединение на большинстве клиентов часто прерывалось. Ниже мой код

public void Configuration(IAppBuilder app)
        {
            try
            {
                Trace.WriteLine("Server starting", "Configuration");
                SqlDataAccess dataAccess = new SqlDataAccess();
                string sqlConnectionString = "Data Source=" + SqlDataAccess.dbServerName + "; Initial Catalog= " + ConfigurationManager.AppSettings["BackPlaneDb"] + ";user id =" + SqlDataAccess.dbUsername + ";password=" + SqlDataAccess.dbPassword; //ConfigurationManager.ConnectionStrings["BackPlaneConnectionString"].ConnectionString;//.AppSettings["BackPlaneConnectionString"];//
                GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
                app.UseCors(CorsOptions.AllowAll);
                GlobalHost.HubPipeline.AddModule(new ErrorPipeline());
                var hubConfiguration = new HubConfiguration
                {
                    EnableDetailedErrors = true,
                };
                app.MapSignalR(hubConfiguration).MaxConcurrentRequests(2000);
                dataAccess.Dispose();
                Trace.WriteLine("Server started", "Configuration");
            }
            catch (Exception ex)
            {
                Logs.Add(ex, 0, "Configuration");
            }
        }

Это файл SignalRWinService.cs

public partial class SignalRWinService : ServiceBase
    {
        private IDisposable SignalR { get; set; }
        public string ServerURI = ConfigurationManager.AppSettings["ServerURI"];
        public SignalRWinService()
        {
            InitializeComponent();
        }

        public void Start()
        {
            this.OnStart(null);
        }

        protected override void OnStart(string[] args)
        {
            Task.Run(() => StartServer()).Wait();
        }
        private void StartServer()
        {
            try
            {
                SignalR = WebApp.Start(ServerURI);
            }
            catch (Exception ex)
            {
                Logs.Add(ex, 0, "StartServer");
                throw ex;
            }
        }

        protected override void OnStop()
        {
            if (SignalR != null)
            {
                SignalR.Dispose();
            }
        }

    }

Этот код предназначен для работы с сервером singalR

public class ClientConnectionHub : Hub
    {
        private static object lockObj = new object();
        private static Dictionary<string, List<string>> _connections = new Dictionary<string, List<string>>();
        private BackgroundWorker bgwSendNonExportedOrders;
        ClsDbOperations clsDbOperations = new ClsDbOperations();

        #region Overrides SignalR Methods

        public override Task OnConnected()
        {
            return base.OnConnected();
        }
        public override Task OnDisconnected(bool stopCalled)
        {
            var keyPair = _connections.Where(x => x.Value.Contains(Context.ConnectionId)).FirstOrDefault();
            if (keyPair.Key != null)
            {
                keyPair.Value.Remove(Context.ConnectionId);
                clsDbOperations.UpdateConnectionIds(keyPair.Key, Context.ConnectionId, false);
            }
            return base.OnDisconnected(stopCalled);
        }

        #endregion

Ниже приведен скриншотклиентских логов

enter image description here

1 Ответ

0 голосов
/ 09 ноября 2019

Я не могу добавить комментарий, поэтому отправляю ответ: Не могли бы вы проверить, есть ли разница в подключении к протоколу? websocket, longpolling или сервер отправлен. Чаще всего мы сталкиваемся с таким поведением, потому что websocket не включен на некоторых машинах.

...