• Nodejs in Visual Studio Code 08.IIS


    1.开始

      本文部分内容均转载自文章:

    http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx

    https://github.com/tjanczuk/iisnode

      作者:SCOTT HANSELMAN

      标题:Installing and Running node.js applications within IIS on Windows - Are you mad?

      发布日期:2011.08.28

    2.为什么我要在Windows IIS上运行Node.js

      首先,我主要编写的是Asp.Net应用程序,对windows和iis很熟悉,如果在使用Node.js生产的应用如果能部署在IIS上,那么我想很快就能将Node.js开发的应用发布在生产环境中。

      虽然在IIS运行Node.js上并不是最优选择,但是我主要开发企业级应用,单机并发访问量3K、4K足矣并不如大型互联网企业那样会遇到极大的并发、调优压力。

      最后微软有一帮人正在IIS上玩转Node.js,我表示跟着入坑试一试。

    • 进程管理:iisnode模块将会对node.exe进行简单而暴力的全生命周期的进程管理来增强其可靠性。你不必担心何时开启、结束node.exe,或者开着软件监控node.exe的运行状态。
    • 多核服务器的可扩展性:node.exe是一个单进程运行的程序,你需要额外编写基础设施代码来扩展其支持多核服务器,如果使用iisnode,你无须编写代码,将可以配置打开多个进程的node.exe,同时将HTTP请求均衡的负载到多个node.exe上。
    • 自动更新:iisnode将会监视js文件,如果有任何更新将会自动回收并重启node.exe加载新的js代码,你不必担心正在执行的http请求,因为这些请求将会仍然使用旧版本的js直至执行完毕。
    • HTTP访问日志:iisnode将会把HTTP请求中调用console.log输出的内存存储在output中,这些输出内容对于调试远程服务器来说是很重要的资源。
    • 混合开发:iisnode是IIS的一个模块而已,你在一个站点中可以包含node.js、php、asp.net等多个应用程序。
    • 少量的代码修改:为了将node.js程序部署在IIS中你还是需要修改一下node.js代码的,比如process.env.PORT
    • 集成管理经验:iisnode是IIS的一个模块,你可以用到IIS的一些特点如下
      • 端口共享,你可以在80端口下部署多个不同的应用asp.net、node.js、php啊,爱谁谁。
      • HTTPS支持
      • Url rewriting
      • 压缩
      • 缓存
      • 日志

    3.如何在IIS上运行Node.js

    • 环境要求
      • Windows Vista, Windows 7, Windows 8, Windows Server 2008, or Windows Server 2012
      • IIS 7.x with IIS Management Tools and ASP.NET
      • WebSocket functionality requires IIS 8.x on Windows 8 or Windows Server 2012
      • URL rewrite module for IIS
        • (Win10:https://www.microsoft.com/en-us/download/details.aspx?id=47337)
      • Latest node.js build for Windows
    • 为IIS7.x/8.x安装iisnode扩展
      • 为 IIS 7.x/8.x 安装 iisnode : x86 或 x64 - 取决于你的操作系统
      • 安装示例, 以管理员权限打开CMD执行 %programfiles%iisnodesetupsamples.bat
      • 浏览 http://localhost/node

    4.学习iisnode

      通过上面安装node示例,查看示例发现iis下新增了一个node目录。

         这个node目录运行在DefaultAppPool中(.Net 4.0集成)

      打开Express示例的文件夹,包括以下内容

      在Hello.js中定义了两个不同的接口myapp/foo、myapp/bar

    var express = require('express');
    
    var app = express.createServer();
    
    app.get('/node/express/myapp/foo', function (req, res) {
        res.send('Hello from foo! [express sample]');
    });
    
    app.get('/node/express/myapp/bar', function (req, res) {
        res.send('Hello from bar! [express sample]');
    });
    
    app.listen(process.env.PORT);
    

      在Web.Config中指定了,Hello.js作为入口函数,同时将myapp/*请求映射给hello.js执行

    <configuration>
      <system.webServer>
    
        <!-- indicates that the hello.js file is a node.js application 
        to be handled by the iisnode module -->
    
        <handlers>
          <add name="iisnode" path="hello.js" verb="*" modules="iisnode" />
        </handlers>
    
        <!-- use URL rewriting to redirect the entire branch of the URL namespace
        to hello.js node.js application; for example, the following URLs will 
        all be handled by hello.js:
        
            http://localhost/node/express/myapp/foo
            http://localhost/node/express/myapp/bar
            
        -->
    
        <rewrite>
          <rules>
            <rule name="myapp">
              <match url="myapp/*" />
              <action type="Rewrite" url="hello.js" />
            </rule>
          </rules>
        </rewrite>
        
      </system.webServer>
    </configuration>
    

      打开示例页http://localhost/node/express/readme.htm进一步查看调用情况

      最后打开Chrome浏览器,输入http://localhost/node/express/hello.js/debug,可以远程调试服务,真乃神器也。。

    5.总结

      node.js + express即可以快速开发RestAPI和模版站点,又可以在iis中进行部署,远程调试,可以满足项目需要。

      以下内容参考:Debugger Don't work https://github.com/tjanczuk/iisnode/issues/396

      由于IIS7.X不支持WebSockets所以无法使用最新的远程调试器,但是可以通过配置旧的远程调试器(

    <iisnode debuggerExtensionDll="iisnode-inspector.dll" />

    )来支持IIS7.X,仅需要修改一下Web.Config配置,如下

    <configuration>
      <system.webServer>
    
        <!-- indicates that the hello.js file is a node.js application 
        to be handled by the iisnode module -->
    
        <handlers>
          <add name="iisnode" path="hello.js" verb="*" modules="iisnode" />
        </handlers>
    
        <!-- use URL rewriting to redirect the entire branch of the URL namespace
        to hello.js node.js application; for example, the following URLs will 
        all be handled by hello.js:
        
            http://localhost/node/express/myapp/foo
            http://localhost/node/express/myapp/bar
            
        -->
    
        <rewrite>
          <rules>
            <rule name="myapp">
              <match url="myapp/*" />
              <action type="Rewrite" url="hello.js" />
            </rule>
          </rules>
        </rewrite>
        <iisnode debuggerExtensionDll="iisnode-inspector.dll" />
      </system.webServer>
    </configuration>
    

      旧调试器就是丑点。。

  • 相关阅读:
    用户体验的时间尺度
    ibatis的xml中的dtd问题
    ASP.NET AJAX调用服务
    C#打包安装与卸载
    学习 WCF (6)学习调用WCF服务的各种方法
    C#.NET ActiveX控件的制作
    如何使用C#开发“类ActiveX组件”
    Asp.Net框架下WebService和Remoting的区别
    今天打开网站,突然发现sql 2005出现错误:数据库 'mybase_db' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。
    VS部署中的ProductCode问题
  • 原文地址:https://www.cnblogs.com/mengkzhaoyun/p/5410185.html
Copyright © 2020-2023  润新知