集成微软IIS Express到Winform应用程序中

      我们的winform开发系统的内置服务一直都是使用CassiniDev(http://cassinidev.codeplex.com/)这个小型的IIS服务器作为内置服务.但是最近需求变了,要求内置的IIS服务器支持多个虚拟目录,因为CassiniDev服务器只能建一个目录,不支持多个虚拟目录,这下只能换内置服务了.于是,我在google上疯狂搜了半天,但是除了微软的iis express  (http://www.iis.net/learn/extensions/introduction-to-iis-express/iis-express-overview),没有发现其他满足我们需求的IIS服务器.最后没辙了,研究了一下微软的iis express,发现其还是可以集成到我们的开发系统中的.下面我们来看看今天的主角:iis express.仔细看了一下官网的一些例子和代码,再加上从网上搜出来的一些资料,我就自己开始动手尝试写个Demo了.

       1.如果机器上没有装iis express的,可以从官网上下载一个(http://www.iis.net/downloads),如果本机已经安装.net 4.0,会自动安装iis express,大家可以在自己的C:\Program Files (x86)或者C:\Program Files目录找到"IIS Express"这个文件夹,可以把这个文件夹直接拷出来就可以使用了.

       2.打开IIS Express目录,发现有个"iisexpresstray.exe"可执行文件,双击运行后,发现桌面任务栏中有个图标,证明已经启动了IIS Express.但是,有一个问题,IIS Express是启动了,它启动的是哪个网站呢?这个配置文件在哪里呢?上网搜索以后发现,其默认的配置文件是放到"C:\Users\当前用户名(User)\Documents\IISExpress\config"中的,打开"applicationhost.config"文件,找到<sites></sites>节点,在这里我们可以配置网站的虚拟目录端口号等.我的配置是这样的.

<sites>
<site name="MyWeb" id="12" serverAutoStart="true" >
<application path="/" >
<virtualDirectory path="/" physicalPath="D:\webtools" />
</application>
<application path="/resourcemanage" >
<virtualDirectory path="/" physicalPath="C:\ResourceManage" />
</application>
<application path="/priview">
<virtualDirectory path="/" physicalPath="C:\Preview" />
</application>
<application path="/smartclient">
<virtualDirectory path="/" physicalPath="D:\SmartClient" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":9917:127.0.0.1" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4ClassicAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
View Code

这样,一个虚拟目录就配置好了,然后点击"iisexpresstray.exe",发现运行成功:

       前面说了我这个IIS服务是嵌入到winform应用程序中的,下面我给大家看看我是怎么样嵌入到winform应用程序中的.这里我使用到了CMD命令,以前试了好多次,直接使用Process输出有问题,再加上我对dos命令不是太熟悉,暂时存放到一个文件中了(StartService.bat),命令内容是:

cd IISService
iisexpress /site:HyWeb /config:"C:\Program Files\HYIIS\applicationhost.config" /systray:false
View Code

 

这里不一一介绍了,不明白的可以看官网的api文档.

对应的C#代码是:

 string dir = Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "MyIIS");
            DirectoryInfo dirInfo = new DirectoryInfo(dir);
            if (dirInfo.Exists == false)
                dirInfo.Create();
            string configPath = Path.Combine(dir, "applicationhost.config");
            string batFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "IISService\\StartService.bat");
            InitIISConfig(port, configPath, batFilePath, dir);
            if (File.Exists(batFilePath) == false) return;
            Process.Start(new ProcessStartInfo() { CreateNoWindow = true, FileName = batFilePath, UseShellExecute = false });
View Code

,然后直接就搞定了,第一次发表博客,如有错误的地方望多多指教!

 

 

posted @ 2014-02-10 12:55  设计湿  阅读(1671)  评论(1编辑  收藏  举报