SignalR .Net客户端连接限制

时间:2016-08-08 06:45:32

标签: c# iis signalr windows-10-universal

我在Windows Universal App上安装.net客户端,在localhost web api,IIS Windows 10上托管SignalR Server,

安装在Windows 10上的客户端应用程序,当一个客户端连接启动时,秒客户端连接启动方法挂起,如果我断开一个客户端,则秒可以连接, SignalR服务器有IIS Windows 10表,Atom Processor。

此配置相关问题是否有任何连接限制。

1 个答案:

答案 0 :(得分:0)

第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。         和signalr .net客户端能够使用IPv4地址在本地网络中连接。喜欢(10.10.10.35)

SignalR Server Self hosted application running on 10.10.10.35:8080