IIS和Visual Studio的IIS Express

  • 应用程序和虚拟目录
    • 为了在一个网站/端口下部署多个应用程序
    • 应用程序
      • 如果根应用程序没什么用只是个壳子,那么可以随便指向一个空目录(免得下面列出来一堆东西),下面的实际要用的子应用程序才指向真实的网站目录
        • 如果下面有目录,最好和子应用程序的名字一样,那么会自动合成一个,认为这个就是子应用程序,不会有功能问题,子应用程序的真实路径设置的对就行
    • 虚拟目录
  • .NET全球化(.NET Globalization)
    • 可以设置request、file、response等部分的编码。
    • 如果配置的编码不对的话,有可能导致错误,如解析aspx文件时有乱码而编译或处理出错。
    • 可以在IIS中或者web.config中进行配置,两边是自动同步的。
    • 新装的站点,请求编码有可能默认会使用此时操作系统的code page(标准代码页,编码号,可在cmd中用chcp来查询,936是gb2312,437是IBM437),所以如果操作系统语言或版本不对的话,可能会编码不对,需要手动来修改(貌似不用重启)。
  • 认证
    • Windows认证
      • 通常在IIS上,设置Windows认证为Enabled,把其他都设置成Disabled(包括Anonymous匿名)
      • ASP.NET的web.config中可以配置
        • 貌似只改这个的话,visual studio的iis express并不能以Windows认证启动,还是需要修改website的属性页上的Anonymous Authentication和Windows Authentication设置
      • 开启Windows认证后,才能ASP.NET中从Page.Request.ServerVariables[“LOGON_USER”]中获取当前用户的登录名
  • 管道模式(Pipeline Mode)/托管模式(Integrated Mode)
    • 经典模式(Classic)
      • 常用于IIS 6.0以下的版本,是默认的模式。但IIS 7.0也支持,是为了向后兼容。
      • ASP.NET是一个添加到IIS中的ISAPI,ASP.NET作为一个ISAPI扩展运行,只是IIS管道中的一项组成部分。
      • 在处理ASP.NET这种动态网站的时候,它是通过一个所谓的ISAPI程序,作为插件的方式来工作的。针对不同的动态应用程序(例如ASP,PHP等),会需要不同的ISAPI。每个ISAPI程序即不同的处理Request和返回Response的程序
      • 在经典模式中,IIS拥有自身的管道,这些管道可以通过创建一个ISAPI扩展进行扩充,而ISAPI扩展是以难以开发而著称的。
      • 在这种情况下,ASP.NET似乎是一种类似于马后炮的成果,仅当IIS处理ISAPI扩展时才能够发挥作用。
      • 利用文件扩展名,可以判断使用哪个ISAPI处理程序。例如,可以将扩展名为.aspx 和.ascx的文件映射到aspnet_isapi.dll;并且将扩展名为.asp的文件映射到asp.dll,这样就可以处理传统的ASP页面;此外,将扩展名为.php的文件映射到php.dll,这样就可以处理PHP页面,前提是已经安装了php.dll。
    • 集成模式(Integrated)
      • 常用于IIS 7.0以上的版本,是默认的模式
      • 利用集成模式,可以将ASP.NET作为IIS的有机组成部分。相当于ASP.NET直接是IIS的一部分,可以使用很多功能。
      • 这种全新的模式,允许我们将ASP.NET更好地与IIS集成,甚至允许我们在ASP.NET中编写一些功能(例如Module)来改变IIS的行为(扩展)。集成的好处是,不再通过ISAPI的方式,提高了速度和稳定性。至于扩展,则可以使得我们对于IIS,以及其他类型的请求有更多的控制。(例如,我们希望静态网页也具备一些特殊的行为)
    • 其他区别
      • 经典模式缺少许多集成模式才能提供的特性
      • 经典模式下,ASP.NET中才能继承IHttpHandler并实现ProcessRequest方法,如果在集成模式中使用,会报错The HttpRuntime.ProcessRequest method is not supported by IIS integrated mode.
      • 经典模式下,ASP.NET中才能使用Page.Request,否则会报错Request is not available in this context
      • 经典模式下,在对应的asp.net程序的web.config中,httpModule模块和httpHandler处理程序节点system.web下面,否则会报错。集成模式下,在对应的asp.net程序的web.config中,httpModule模块和httpHandler处理程序节点在system.webServer下面,否则会报错HTTP Error 500.22 - Internal Server Error,An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode,让你迁移到新的节点下,或者切换到Classic模式。
  • httpModule和httpHandler
    • Spring.Net和Hibernate等第三方模块,也要配置在sectionGroup和httpModules和httpHandlers中
    • IIS上也可以设置Handler Mappings和Modules
      • 通常不需要手动设置,因为ASP.NET在安装时已经自动加上了相关配置,而Spring.Net和Hibernate等第三方模块可以配置在程序的web.config中
    • 经典模式下,在对应的asp.net程序的web.config中,httpModule模块和httpHandler处理程序节点system.web下面,否则会报错。集成模式下,在对应的asp.net程序的web.config中,httpModule模块和httpHandler处理程序节点在system.webServer下面,否则会报错HTTP Error 500.22 - Internal Server Error,An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode,让你迁移到新的节点下,或者切换到Classic模式。
  • Visual Studio和IIS Express
    • 可以在website的属性窗口上设置认证方式/管道模式/应用程序/虚拟目录/端口绑定等配置
    • 可以在IIS Express的applicationhost.config配置文件中设置认证方式/管道模式/应用程序/虚拟目录/端口绑定等配置
      • 在很多目录下都有这个applicationhost.config文件,比如项目的.vs目录下,用户目录\documents\iisexpress\config\等处。
      • 设置Sites->site->applicationDefaults的applicationPool为Clr4ClassicAppPool来设置管道模式。
      • 设置Sites->site->application的path和Sites->application>virtualDirectory的path和physicalPath来设置应用程序和虚拟目录。
      • 设置Sites->site->bindings->binding的protocol和bindingInformation来设置端口绑定
    • 可以在website的弹出属性页上设置默认启动页地址/Build基于的.NET Framework版本等配置
    • 可以在启动选项上下拉切换默认用哪个浏览器启动
    • Visual Studio中默认停止运行后,IIS Express服务其实还在,右下角任务栏展开可以看到,重新编译程序后不需要重新启动网站,就可以刷新页面看修改代码的效果
      • 可以通过关掉Debugging->Options->General->Enable Edit and Continue,来关掉这个功能
  • 其他
    • IIS的w3wp进程,如果长时间没人访问(半小时?),这个进程会消失,再次有人访问的时候,会再启动,但速度会比较慢,有个启动时间
    • IIS的网站目录下,如果文件发生变化,会自动重启网站,即使只改了web.config,所以之后第一次访问也会比较慢

posted on 2020-05-09 14:53  碎羽love星谊  阅读(432)  评论(0编辑  收藏  举报

导航