コード例 #1
0
ファイル: Program.cs プロジェクト: tinsunchan/FreddiChat
        public static void Main(string[] args)
        {
            ConsoleUtils.TraceSystemInfo("{0} {1}", applicationName, applicationVersionVerboseName);

            ConsoleUtils.TraceSystemWork("Configuring server...");

            // Select server protocol
            var protocol = ConsoleUtils.ReadCommand("Select server protocol", "http", "net.pipe", "net.tcp");
            IChatServiceMode mode;

            switch (protocol)
            {
            case "net.pipe":
                mode = new NamedPipeChatServiceMode();
                break;

            case "net.tcp":
                mode = new TcpChatServiceMode();
                break;

            case "http":
            default:
                mode = new HttpChatServiceMode();
                break;
            }

            // Select server hostname (the name clients will use)
            var hostname = ConsoleUtils.ReadNonEmpty("Select server hostname");

            string url = string.Format("{0}://{1}", mode.Protocol, hostname);

            // Select server port (if required)
            if (mode.IsPortRequired)
            {
                var port = ConsoleUtils.ReadNonEmpty("Select server port");
                url = string.Format("{0}:{1}", url, port);
            }

            url = string.Format("{0}/FreddiChat", url);

            ConsoleUtils.TraceSystemWork("Server configured: {0}", url);

            ConsoleUtils.TraceSystemWork("Starting server...");
            var service = new ServiceHost(typeof(ChatService), new Uri(url));

            try {
                // Add service behavior
                service.Description.Behaviors.Add(mode.ServiceBehavior);

                // Add MEX endpoint (allowing clients to fetch metadata)
                service.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, mode.ServiceMetadataBinding, "mex");
                // Add application endpoint
                service.AddServiceEndpoint(typeof(IChatService), mode.ServiceEndpointBinding, "");

                // Open the service host to accept incoming calls
                service.Open();

                // The service can now be accessed.
                ConsoleUtils.TraceSystemWork("Server started.");

                var command = string.Empty;
                while (!exitCommands.Contains(command))
                {
                    command = Console.ReadLine();
                }

                service.Close();
            } catch (CommunicationException communicationException) {
                ConsoleUtils.TraceSystemError("Unexpected communication error: {0}", communicationException.Message);
            } catch (Exception exception) {
                ConsoleUtils.TraceSystemError("Unexpected error: {0}", exception.Message);
            } finally {
                // Close the ServiceHostBase to shutdown the service.
                service.Abort();
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: genesissupsup/FreddiChat
        public static void Main(string[] args)
        {
            ConsoleUtils.TraceSystemInfo("{0} {1}", applicationName, applicationVersionVerboseName);

            ConsoleUtils.TraceSystemWork("Configuring server...");

            // Select server protocol
            var protocol = ConsoleUtils.ReadCommand("Select server protocol", "http", "net.pipe", "net.tcp");
            IChatServiceMode mode;
            switch (protocol) {
                case "net.pipe":
                    mode = new NamedPipeChatServiceMode();
                    break;
                case "net.tcp":
                    mode = new TcpChatServiceMode();
                    break;
                case "http":
                default:
                    mode = new HttpChatServiceMode();
                    break;
            }

            // Select server hostname (the name clients will use)
            var hostname = ConsoleUtils.ReadNonEmpty("Select server hostname");

            string url = string.Format("{0}://{1}", mode.Protocol, hostname);

            // Select server port (if required)
            if (mode.IsPortRequired) {
                var port = ConsoleUtils.ReadNonEmpty("Select server port");
                url = string.Format("{0}:{1}", url, port);
            }

            url = string.Format("{0}/FreddiChat", url);

            ConsoleUtils.TraceSystemWork("Server configured: {0}", url);

            ConsoleUtils.TraceSystemWork("Starting server...");
            var service = new ServiceHost(typeof(ChatService), new Uri(url));
            try {
                // Add service behavior
                service.Description.Behaviors.Add(mode.ServiceBehavior);

                // Add MEX endpoint (allowing clients to fetch metadata)
                service.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, mode.ServiceMetadataBinding, "mex");
                // Add application endpoint
                service.AddServiceEndpoint(typeof(IChatService), mode.ServiceEndpointBinding, "");

                // Open the service host to accept incoming calls
                service.Open();

                // The service can now be accessed.
                ConsoleUtils.TraceSystemWork("Server started.");

                var command = string.Empty;
                while (!exitCommands.Contains(command)) {
                    command = Console.ReadLine();
                }

                service.Close();
            } catch (CommunicationException communicationException) {
                ConsoleUtils.TraceSystemError("Unexpected communication error: {0}", communicationException.Message);
            } catch (Exception exception) {
                ConsoleUtils.TraceSystemError("Unexpected error: {0}", exception.Message);
            } finally {
                // Close the ServiceHostBase to shutdown the service.
                service.Abort();
            }
        }