实例介绍
【实例截图】
最终浏览器运行的效果如下:
下为程序代码:
【核心代码】
// /* ********************************************************************************** // * // * Copyright (c) Sky Sanders. All rights reserved. // * // * This source code is subject to terms and conditions of the Microsoft Public // * License (Ms-PL). A copy of the license can be found in the license.htm file // * included in this distribution. // * // * You must not remove this notice, or any other, from this software. // * // * **********************************************************************************/ using System; using System.Threading; using System.Windows.Forms; using Cassini.CommandLine; namespace CassiniDev { /// <summary> /// 12/29/09 sky: Implemented more robust command line argument parser (CommandLineParser.cs) /// 12/29/09 sky: Implemented hosts file modification mode allowing this executable to be run in an elevated process /// to add/remove hosts file entry corresponding to specified hostname, if desired. /// 12/29/09 sky: Implemented a MVP pattern with service locator and abstract factory for testing and to simplify /// gui and console with same codebase /// 01/07/10 sky: removed console view, it was only there to provide a start and stop mechanism. very stupid design flaw /// /// Issues: /// FormView.Stop() doesn't seem to kill the server host? works in console. /// Is not a critical issue yet - starting another server on same port works just fine. /// I think it may have to do with vshost.exe persistance as killing vs stops it. /// /// /// /a:"E:\Projects\cassinidev\trunk\TestWebApp" /v:"/" /h:mycomputer /ah /im:Specific /i:192.168.1.102 /v6- /pm:Specific /p:8082 /prs:0 /pre:0 /// /a:"E:\Projects\cassinidev\trunk\TestWebApp" /// </summary> public class Program { [STAThread] private static void Main(string[] args) { CommandLineArguments sargs = new CommandLineArguments(); #if GUI if (!Parser.ParseArguments(args, sargs)) { string usage = Parser.ArgumentsUsage(typeof (CommandLineArguments), 120); MessageBox.Show(usage); Environment.Exit(-1); return; } switch (sargs.RunMode) { case RunMode.Server: Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); using (IPresenter presenter = ServiceFactory.CreatePresenter()) { IView view = ServiceFactory.CreateFormsView(); presenter.InitializeView(view, sargs); Application.Run((Form) view); } break; case RunMode.Hostsfile: SetHostsFile(sargs); break; } #endif #if CONSOLE if (!Parser.ParseArgumentsWithUsage(args, sargs)) { Environment.Exit(-1); } else { switch (sargs.RunMode) { case RunMode.Server: using (IPresenter presenter = ServiceFactory.CreatePresenter()) { try { if (string.IsNullOrEmpty(sargs.ApplicationPath)) { throw new CassiniException( "ApplicationPath is null.\r\n" Parser.ArgumentsUsage(typeof (CommandLineArguments)), ErrorField.ApplicationPath); } #region Listen to presenter events if (!sargs.Quiet) { // since we don't need to unhook it just use anonymous delegate presenter.RequestComplete = (s, e) => Console.WriteLine("RequestComplete:" e.Request.ToString(true)); presenter.RequestBegin = (s, e) => Console.WriteLine("RequestBegin:" e.Request.ToString(true)); } presenter.ServerStarted = ((s, e) => { Console.WriteLine("started: {0}", e.RootUrl); Console.WriteLine("Press Enter key to exit...."); }); bool stopped = false; presenter.ServerStopped = ((s, e) => { stopped = true; }); #endregion presenter.Start(sargs); //TODO: refine this - sleep is not optimal if (sargs.Headless) { while (!stopped) { Thread.Sleep(10); } } else { while (!stopped && !Console.KeyAvailable) { Thread.Sleep(10); } if (!stopped) { Console.ReadKey(); presenter.Stop(); } } Console.WriteLine("stopped:"); } catch (CassiniException ex) { Console.WriteLine("error:{0} {1}", ex.Field == ErrorField.None ? ex.GetType().Name : ex.Field.ToString(), ex.Message); } catch (Exception ex2) { Console.WriteLine("error:{0}", ex2.Message); Console.WriteLine(Parser.ArgumentsUsage(typeof (CommandLineArguments))); } } break; case RunMode.Hostsfile: SetHostsFile(sargs); break; } } #endif } private static void SetHostsFile(CommandLineArguments sargs) { try { if (sargs.AddHost) { ServiceFactory.Rules.AddHostEntry(sargs.IPAddress, sargs.HostName); } else { ServiceFactory.Rules.RemoveHostEntry(sargs.IPAddress, sargs.HostName); } } catch (UnauthorizedAccessException) { Environment.Exit(-1); } catch { Environment.Exit(-2); } } } }
标签: webservice iis web服务器
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论