2016-08-08 170 views
1

我已经.NET客户端在Windows上通用的应用程序和服务器SignalR托管在本地主机的网络API,IIS安装在Windows 10,当一个客户端连接,然后开始秒客户端窗口10,SignalR .NET客户端连接限制

客户端应用程序连接启动方法挂起,如果我断开一个客户端,然后秒连接, SignalR服务器有IIS Windows 10表,Atom处理器。

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

回答

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地址在本地网络中进行连接。 like(10.10.10.35)

SignalR Server Self hosted application running on 10.10.10.35:8080