集成微软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>节点,在这里我们可以配置网站的虚拟目录端口号等.我的配置是这样的.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<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>
这样,一个虚拟目录就配置好了,然后点击"iisexpresstray.exe",发现运行成功:
前面说了我这个IIS服务是嵌入到winform应用程序中的,下面我给大家看看我是怎么样嵌入到winform应用程序中的.这里我使用到了CMD命令,以前试了好多次,直接使用Process输出有问题,再加上我对dos命令不是太熟悉,暂时存放到一个文件中了(StartService.bat),命令内容是:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
cd IISService
iisexpress /site:HyWeb /config:"C:\Program Files\HYIIS\applicationhost.config" /systray:false
这里不一一介绍了,不明白的可以看官网的api文档.
对应的C#代码是:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 });
,然后直接就搞定了,第一次发表博客,如有错误的地方望多多指教!