static void Main(string[] args)
        {
            PrintLogo();

            var settings = ConfigurationManager.GetSection("portBridge") as PortBridgeSection;

            if (settings != null)
            {
                serviceNamespace = settings.ServiceNamespace;
                accessRuleName   = settings.AccessRuleName;
                accessRuleKey    = settings.AccessRuleKey;
                if (!string.IsNullOrEmpty(settings.LocalHostName))
                {
                    localHostName = settings.LocalHostName;
                }
            }

            if (!ParseCommandLine(args))
            {
                PrintUsage();
                return;
            }

            PortBridgeServiceForwarderHost host = new PortBridgeServiceForwarderHost();

            if (settings != null && settings.HostMappings.Count > 0)
            {
                foreach (HostMappingElement hostMapping in settings.HostMappings)
                {
                    string targetHostAlias = hostMapping.TargetHost;
                    if (string.Equals(targetHostAlias, "localhost", StringComparison.OrdinalIgnoreCase))
                    {
                        targetHostAlias = localHostName;
                    }
                    host.Forwarders.Add(
                        new ServiceConnectionForwarder(
                            serviceNamespace,
                            accessRuleName,
                            accessRuleKey,
                            hostMapping.TargetHost,
                            targetHostAlias,
                            hostMapping.AllowedPorts,
                            hostMapping.AllowedPipes));
                }
            }
            else
            {
                string targetHostAlias = localHostName;
                if (string.Equals(targetHostAlias, "localhost", StringComparison.OrdinalIgnoreCase))
                {
                    targetHostAlias = localHostName;
                }
                host.Forwarders.Add(
                    new ServiceConnectionForwarder(
                        serviceNamespace,
                        accessRuleName,
                        accessRuleKey,
                        "localhost",
                        targetHostAlias,
                        permittedPorts,
                        string.Empty));
            }


            if (!runOnConsole)
            {
                ServiceController sc = new ServiceController("PortBridgeService");
                try
                {
                    var status = sc.Status;
                }
                catch (SystemException)
                {
                    runOnConsole = true;
                }
            }

            if (runOnConsole)
            {
                host.Open();
                Console.WriteLine("Press [ENTER] to exit.");
                Console.ReadLine();
                host.Close();
            }
            else
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[]
                {
                    new PortBridgeService(host)
                };
                ServiceBase.Run(ServicesToRun);
            }
        }
 protected override void OnStop()
 {
     host.Close();
 }