[OWIN自主机连接频繁断开

问题描述 投票:1回答:1

我正在使用Microsoft.Owin.Hosting自托管signalR。在开发环境中其工作正常。当我在具有1200多个客户端的生产服务器上部署时,大多数客户端上的Connection频繁掉线。下面是我的代码

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

c# signalr signalr-hub signalr.client
1个回答
0
投票

我无法添加评论,因此发布为答案:您能否验证连接协议是否有任何区别? websocket,longpolling或服务器已发送。通常,我们面临的这种行为差异是因为未在某些计算机上启用websocket。

© www.soinside.com 2019 - 2024. All rights reserved.