SignalR.Net客户端连接限制

本文关键字:连接 客户端 Net SignalR | 更新日期: 2023-09-27 18:01:11

我在Windows通用应用程序上有.net客户端,在localhost web api、IIS Windows 10、上有SignalR服务器

安装在windows 10上的客户端应用程序,当一个客户端连接启动时,秒客户端连接启动方法挂起,如果我断开了一个客户端的连接,秒客户端能够连接,SignalR服务器具有IIS Windows 10表、Atom处理器。

因此,对于这个和/或配置相关的问题,是否存在任何连接限制。

SignalR.Net客户端连接限制

步骤1:创建自托管SignalR服务器控制台应用程序

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using Microsoft.Owin.Cors;
using Microsoft.Owin.Hosting;
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
namespace Join8POS.SignalRServer
{
    class Program
    {
        static void Main(string[] args)
        {
            // This will *ONLY* bind to localhost, if you want to bind to all addresses
            // use http://*:8080 to bind to all addresses. 
            // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
            // for more information.
            string localComputerName = Dns.GetHostName();
            Console.WriteLine("Enter SignalR Server Host IP Address: ");
            IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
            foreach (IPAddress hostIP in localIPs)
            {
                // is localhost
                if (IPAddress.IsLoopback(hostIP))
                {
                }
                if (hostIP.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                }
                var ipp= hostIP.MapToIPv4();
            }
            var inp= Console.ReadLine();
            string url = "http://"+inp+":8080";
            using (WebApp.Start(url))
            {
                Console.WriteLine("Server running on {0}", url);
                outer:
                Console.WriteLine("'nPress 'C' to close SignalR server.");
                var ky= Console.ReadKey();
                if (ky.KeyChar != 'C')
                {
                    goto outer;
                }
            }
        }
    }
    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            HttpConfiguration config = new HttpConfiguration();
            // UnityConfig.RegisterComponents(config);
            //WebApiConfig.Register(config);
            var hubConfiguration = new HubConfiguration
            {
                // You can enable JSONP by uncommenting line below.
                // JSONP requests are insecure but some older browsers (and some
                // versions of IE) require JSONP to work cross domain
                EnableJSONP = true,
                EnableJavaScriptProxies = true,
                EnableDetailedErrors = true
            };
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
            app.Map("/signalr", map =>
            {
                // Setup the cors middleware to run before SignalR.
                // By default this will allow all origins. You can 
                // configure the set of origins and/or http verbs by
                // providing a cors options with a different policy.
                map.UseCors(CorsOptions.AllowAll);
                hubConfiguration.EnableDetailedErrors = true;
                // Run the SignalR pipeline. We're not using MapSignalR
                // since this branch is already runs under the "/signalr"
                // path.
                map.RunSignalR(hubConfiguration);
            });
        }
    }
    [HubName("shopApiHub")]
    public class ShopApiHub : Hub
    {
        /// <summary>
        /// ShopApiHub OnConnected
        /// </summary>
        /// <returns></returns>
        public override Task OnConnected()
        {
            //CustomLogging.Log("OnConnected  "+ Context.ConnectionId, LoggingType.SignalRShopHub);
            return base.OnConnected();
        }
        /// <summary>
        /// Invoked on Take Out order generated.
        /// </summary>
        public void TakeOutOrderRaise()
        {
            Clients.All.takeOutOrderRaise();
            //CustomLogging.Log("TakeOutOrderRaise ", LoggingType.SignalRShopHub);
        }
        /// <summary>
        /// invoked when got any update in runningtable.xml
        /// </summary>
        public void refreshFloorPlan()
        {
            Clients.All.refreshFloorPlan();
        }
        /// <summary>
        /// OnDisconnected
        /// </summary>
        /// <param name="bl"></param>
        /// <returns></returns>
        public override Task OnDisconnected(bool bl)
        {
            return base.OnDisconnected(bl);
        }
    }
}

步骤2:windows防火墙中允许的入站端口8080。以及能够使用IPv4地址在本地网络中连接的signaler.net客户端。类似(10.10.10.35(

SignalR服务器在10.10.10.35:8080 上运行的自托管应用程序