IIS Express可以说是.NET web开发者必用的服务器,日日夜夜都和它打交道。一直以来,除了遇到什么点什么问题,很少会去关注过它。
今天看到以前转载的一篇博客,就再次温故下,主要包含IIS Express的简介与安装、配置、命令行使用。
一、介绍
1.安装
如果不是在开发环境,需要手动如安装,现在最新的版本已经是10.0.
IIS 7.5 Express下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=1038
IIS 8.0 Express下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=34679
IIS 10.0 Express下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=48264
使用 IIS 10.0 Express 的好处包括:
•在生产服务器上运行的同一 web 服务器现在可用于开发计算机。
•无需管理权限,即可执行大多数任务。
•IIS Express 可在 Windows 7 Service Pack 1 及所有更高版本的 Windows 上运行。
•很多用户可在同一台计算机上独立作业。
2.简介
IIS Express是为开发人员优化的轻量级、自包含版本的IIS。IIS Express使使用当前最新版本的IIS来开发和测试网站变得容易。它具有IIS 7及以上的所有核心功能,以及为简化网站开发而设计的附加功能。
3.IIS Express和IIS
IIS Express源于IIS 7及以上,支持IIS的核心特性,但有一些关键区别。一个重要的区别是工作进程的管理。在IIS,Windows进程激活服务(Windows Process Activation Service【WAS】)是静默激活和停用的Web应用程序,用户没有直接控制。在IIS Express中,不存在WAS,用户可完全控制应用程序的激活和停用。启动后在系统托盘中显示,已经运行的网站可以手动去启用和停止。Hostable Web Core (HWC)是一个IIS API,可用来编写独立的Web服务器,但不被WAS管理。IIS Express被设计为在HWC上的一个壳。
以下表格主要展示了IIS and IIS Express的主要区别:
Area |
IIS |
IIS Express |
---|---|---|
发布机制 |
与操作系统一起发布 |
可独立发布,内含与WebMatrix,但可分开安装 |
支持的Windows版本 |
Windows Vista and Windows 7的特定版本,Windows Server 2003, 2008 and 2008 R2及以上的大多数操作系统 |
Windows XP, Vista, Windows 7所有版本,Windows Server 2008 and 2008 R2及以上所有版本 |
支持的.NET Framework |
v2.0 SP1以上 |
v2.0 SP1 以上或更新版本(需要.NET 4.0). |
支持的程序设计语言 |
传统ASP, ASP.NET和PHP |
传统ASP, ASP.NET和PHP |
进程模型 |
Windows Process Activation Service (WAS) 自动管理已设置的网站 |
由用户加载或终止网站 |
Hosted WebCore (或Hostable Web Core) 支持 |
支持 |
支持. IIS Express已实现为HWC的上层应用. |
支持的协议 |
HTTP, FTP, WebDAV, HTTPS, 与WCF (包括基于TCP, Named Pipes和MSMQ) |
HTTP, HTTPS, 与基于 HTTP的WCF |
支持非系统管理员模式 |
WAS必须以系统管理员权限运行 |
标准用户即可执行大多数工作. |
支持多开发者 |
不支持 |
Yes. 配置文件、设置、Web content都是基于每用户自己维护 |
Visual Studio 支持 |
Yes |
VS 2010 SP1以上,VS 2008 可手动配置 |
运行时的扩展 |
|
URL Rewrite 与FastCGI。 IIS Express已内置 |
管理工具 |
IIS Manager, appcmd.exe |
Appcmd.exe |
系统托盘 |
None |
Yes |
内建的IIS 模块(验证、授权、压缩等功能) |
Yes |
Yes |
官方英文原版:https://docs.microsoft.com/zh-cn/iis/extensions/introduction-to-iis-express/iis-express-overview
二、使用和配置
iis express早期的时候,需要使用到WebMatrix,现在WebMatrix这个可怜的娃已经被软妹子抛弃了,看来还是功夫不够好 ,呵呵,现在也不多介绍
1.启动和命令行
在vs中web项目运行时,自动启用IIS express,以系统托盘的方式展现,在图标上右键,即可查看在运行的网站,可手动停止运行;另外,还可以通过命令行的方式运行。
示例:win7 vs2013
打开方式: 开始=》所有程序=》Visual Studio 2013 =>Visual Studio Tools=>VS2013 开发人员命令提示
也可在该目录下找到:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts
常用命令行:
1.查看网站列表
C:\Program Files (x86)\Microsoft Visual Studio 12.0>"C:\Program Files\IIS Express\appcmd.exe" list site
2.启动网站
C:\Program Files (x86)\Microsoft Visual Studio 12.0>"C:\Program Files\IIS Express\iisexpress.exe" /siteid:96
窗口中可看到浏览网站的开始、结束、调用网址、HTTP状态
注:可将“C:\Program Files\IIS Express”加入“系统变量”Path中,就可以直接执行iisexpress.exe和appcmd.exe。
3.启动一个临时网站
有些情况下,我们需要启动一个临时的网站(比如快速创建一个临时服务器等),便可以用类似的命令行来创建:
iisexpress /path:<网站目录> /port:<端口> /clr:<CLR版本,V2.0|V4.0>
iis express会复制一份配置文件到临时目录,并变更其中的站点信息后再启动,因此不会影响到本机已经配置的网站。
C:\Program Files (x86)\Microsoft Visual Studio 12.0>"C:\Program Files\IIS Express\iisexpress.exe" /path:"G:\01code\04MVC\01bamin\Code\BaminSolution\BM.Admin" /port:8899 /clr:v4.0 /systray:true
2.配置文件
默认情况下IIS Express使用的配置文件位于“我的文档”中,路径如下:“我的文档\IIS Express\Config”。其中,applicationhost.config 是核心的配置文件,它用于承载站点的定义、应用程序和应用程序池以及整个WEB服务器的配置。由于是放在我的文档中的,所以修改它不需要管理员权限,意味着可以直接修改。在修改后,下次启动应用程序就会起效。
在applicationhost.config内容中,<system.applicationHost> 用于定义网站和应用程序池。默认情况下,其内容如下:
<system.applicationHost> <applicationPools> <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" /> <applicationPoolDefaults managedRuntimeLoader="v4.0"> <processModel /> </applicationPoolDefaults> </applicationPools> <!-- The <listenerAdapters> section defines the protocols with which the Windows Process Activation Service (WAS) binds. --> <listenerAdapters> <add name="http" /> </listenerAdapters> <sites> <site name="WebSite1" id="1" serverAutoStart="true"> <application path="/"> <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /> </application> <bindings> <binding protocol="http" bindingInformation=":8080:localhost" /> </bindings> </site> <applicationDefaults applicationPool="Clr4IntegratedAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites> <webLimits /> </system.applicationHost>
IIS Express 内建了五个应用程序池,分别对应.Net 2.0/4.0的集成/经典模式、以及一个非托管程序池。默认的程序池版本有 <spplicationPoolDefaults> 节来配置。<sites> 节用于配置网站。网站的默认应用程序池和虚拟目录默认配置由 <applicationDefaults> 和 <virtualDirectoryDefaults> 节点配置。以上的节点默认情况下我们并不需要太多关注,因为大多数情况下我们需要关注的只有 <sites> 下的 <site> 节点,这里保存了网站、应用程序的定义,才是我们需要真正关心的。
【1】.每个 <site> 就是一个网站。
serverAutoStart 设置了是否随着 IIS Express的启动而自动启动。如果设置为true,那么每次 IIS Express 启动都会自动加载(如果没有指定网站的话),否则只有以指定特定网站的模式运行时才会加载。
使用IIS Express加载特定网站的语法一: IISExpress.exe /site:<站点名>
使用IIS Express加载特定网站的语法二: IISExpress.exe /siteid:<id>
【2】.<site> 下的<bindings>设置了这个站点的绑定信息。
节点下的每个<binding>都是一个端口绑定信息。典型的绑定配置如下:<binding protocol="http" bindingInformation="*:8080:localhost" />
protocol 指定了绑定的协议类型(IIS Express内建了 HTTP 和 HTTPS两种协议支持),而“*:8080:localhost”则指定的绑定的具体信息,它有三个部分组成:“绑定的IP:端口:主机名”。
默认情况下,绑定到任何本地IP、非保留端口、绑定到localhost。
IIS Express 默认只支持本地连接,不能用ip去访问。
注意,修改配置文件后,在命令行窗口输入q退出,然后重新加载才生效。【在同一机器测试】
另外,在书上看到另外一种局域网访问的配置,这里仅记录下
开启外部连接 netsh http add urlacl url=http://*:{端口号}/ user=everyone 关闭外部连接 netsh http delete urlacl url=http://*:{端口号}/
【3】 <application> 这个节设置了网站的应用程序
每个网站都需要至少一个映射路径为“/”应用程序(它映射到根目录)。除此之外,你可以继续添加并行的不同路径的 <application> ,这就类似于IIS中的网站里配置的应用程序。
例如,我需要添加一个单独的应用程序 - 论坛,映射到根目录下的bbs目录,那么我就可以这样配置:
<site name="BM.Admin(1)" id="96"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="G:\01code\04MVC\01bamin\Code\BaminSolution\BM.Admin" /> </application> <application path="/bbs" applicationPool="Clr2IntegratedAppPool"> <virtualDirectory path="/" physicalPath="<此应用程序的根目录>" /> <virtualDirectory path="/content/" physicalPath="</bbs/content/目录对应的虚拟目录>" /> </application> <bindings> <binding protocol="http" bindingInformation="*:44545:localhost" /> </bindings> </site>
【4】<virtualDirectory> 设置了目录的映射信息
参见上面展示的代码。在每个<application>节下,必须至少存在一个 path="/" 的 virtualDirectory,它代表了这个目录映射的位置。除此之外,可以手动添加多个映射的路径不同的虚拟目录。
一份关于site详细配置放在文章尾部,作为附录以便以后使用
3.关于管理员身份启动
IIS Express设计是为了避免需要管理员权限就能完成大部分操作的,但是个别情况下它会要需要管理员权限才能运行。这类的限制包括:
绑定到了保留的端口(通常位于1024以下的端口,如80、88、443等);
没有绑定localhost,而是绑定了域名或其它内容;
使用了HTTPS,但是端口不在44300-44399范围内;
使用了自己的SSL证书的HTTPS。
【1】使用了保留的端口
通常操作系统的HTTP.sys(网络内核)将1024以下的端口设计为保留端口,如果IIS Express需要绑定到这些端口,则需要它拥有管理员权限,否则就会失败。错误类似这样:
反映到系统的日志中,就是这样的错误:
要解决这个问题,很简单,只要将端口绑定到非保留端口即可(大于1024),或使用管理员身份启动它备注1。
【2】绑定了其它域名
默认情况下,IIS Express只能绑定到 localhost。如果需要绑定到具体的域名供外部访问而又没有解决方案,那么就会遭遇到失败的问题。
要解决,也很简单——就是使用管理员身份启动它备注1。
【3】使用了HTTPS,但是端口不在 44300-44399之内
IIS Express用于承载HTTPS站点测试时,端口会限制在44300-44399之内,这同样是操作系统的限制。如果超过了这个范围,则需要以管理员身份启动它才能正常工作备注1。
【4】使用了自己的SSL证书的HTTPS
IIS Express默认会安装一个测试的自签名证书用于开发,这允许开发人员在没有SSL证书的情况下进行开发。但是如果站点使用了自己的SSL证书,则会导致IIS Express需要管理员身份才能启动备注1。
Site详细配置
<sites> <!-- site 站点 如果启动了右击托盘IISExpress就能看到,可以在sites下面添加多个site节点 serverAutoStart=true 是指定站点是否随服务器启动,但是这个属性我并没有看到作用,不管是否设置都是启动第一个站点 --> <site name="WebSite1" id="1" serverAutoStart="true" > <!-- application应用程序 和在iis中添加的应用程序一样的--> <application path="/"> <!-- virtualDirectory虚拟目录 %IIS_SITES_HOME%是C:\Program Files\IIS Express\ --> <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /> </application> <!-- 可以添加多个path不重复的application 下面applicationDefaults会默认应用程序池,但是也可以指定应用程序池--> <!-- 这里有个问题如果applicationPool是Clr2IntegratedAppPool 但sites的applicationDefaults是Clr4IntegratedAppPool,则这个虚拟目录就不能被启动访问 目前我只能通过将applicationDefaults设置为Clr2IntegratedAppPool才可以启动,并不清楚怎么给不同网站 指定不一样的程序池并启动--> <application path="/test" applicationPool="Clr2IntegratedAppPool"> <!-- 可以添加多个虚拟目录 和iis中添加虚拟目录一样--> <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /> <virtualDirectory path="/testvir" physicalPath="%IIS_SITES_HOME%\WebSite1" /> </application> <bindings> <!-- binding站点绑定信息 protocol有http和https两种 bindingInformation指定绑定具体信息 :8080:localhost=>:端口:主机名" --> <binding protocol="http" bindingInformation=":8080:localhost" /> <!-- 同一个网站绑定多个端口 --> <binding protocol="http" bindingInformation=":8899:localhost" /> <!-- 通常在IIS发布的网站 用localhost 也一定可以用127.0.01访问 但是这里不行,必须手工绑定 --> <binding protocol="http" bindingInformation=":8080:127.0.0.1" /> <!-- 局域网对应的IP地址也是需要自己绑定的 局域网其他用户才能通过ip访问--> <binding protocol="http" bindingInformation=":8080:192.168.230.128" /> </bindings> </site> <!-- 可以添加多个site节点 但是必须是name和id 都不重复的--> <site name="WebSite2" id="2" serverAutoStart="true" > <application path="/test"> <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /> </application> <bindings> <binding protocol="http" bindingInformation=":8080:localhost" /> </bindings> </site> <siteDefaults> <!-- %IIS_USER_HOME%是"我的文档"的路径 Logs下是访问站点的记录 --> <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" /> <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" /> </siteDefaults> <!--applicationDefaults 指定站点的默认应用程序池 在sites上面有applicationPools节点,可以在那看到有五个应用程序池,分别是.Net2.0/4.0的集成/经典模式、以及一个非托管程序池--> <applicationDefaults applicationPool="Clr4IntegratedAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites>
三、常见问题
1.VS2015 IIS Express 无法启动 解决办法
来自http://blog.csdn.net/wei123456/article/details/53470399
在VS2015启动调试时,总是提示“IIS Web Express 无法启动”的错误,一直都好好的,突然就不行了.
用记事本或者其他什么文本编辑器,打开项目的.csproj文件,定位到<WebProjectProperties>,把关于IIS的配置<DevelopmentServerPort>、<DevelopmentServerVPath>、<IISUrl>属性都清空,<AutoAssignPort>为True,保存,重新用VS2015打开项目,然后Ctrl+F5,成功!
原理就是让VS2015重置一下启动配置。
2.运行打开IIS
输入 inetmgr