IIS6+64位系统 VS 32位APP 在64位机器上运行32位版本的ASP.NET 2.0.****

来源:互联网 发布:基于yii2的cms 编辑:程序博客网 时间:2024/04/30 00:46

    上64位的系统现在是越来越多了,特别是在服务器上,64位系统的优势不言而喻。但由于历史的原因,很多时候我们的网络APP中都保留有32位的模块,这样的程序如果要在IIS7上运行,很简单,创建一个单独的支持32位模式的应用池就可以了。但要在64位的IIS6上运行的时候,情况就要复杂些,本文将对此做一些介绍。

 

    就32位支持来说,IIS6与IIS7最大的不同是,在IIS6中,整个站点(Site)只能运行在一种模式下:要么32位,要么64位,这句话是什么意思呢?在C:/Windows/Microsoft.NET下我们可以看到两个目录Framework和Framework64,往里走的话,会发现二者的目录结构几乎完全一样(唯一的区别是1.0.3075只存在于Framework,因为这个版本的.net只支持32位模式),顾名思义,前者支持32位模式,后者支持64位模式,一个站点在一个时间点只能载入其中一套程序,也就是说你必需在二者之间做出选择。这个选择会影响到这个站点下所有的APP,所以,在操作之前,务必三思而后行!一个纯64位程序在32位模式下肯定会损失性能的。

 

    然后,在IIS管理器中,右键点击Default Web Site,点击“属性”,打开“Home Directory"页,点击”Configuration",这里我们可以看到后缀的映射表,注意看一下Executable Path一栏就会发现,其中有不少都指向了C:/Window/Microsoft.NET/下的其中一个路径,如果是Framework,说明当前站点运行在32位模式下,否则,就运行在64位模式下。

 

    不用说,如果站点运行在64位模式下,而我们又打开了一个包含了32位程序的APP,肯定会出问题

    下面一个例子:在64位机器上运行32位版本的ASP.NET 2.0.****
      C:/inetpub/adminscripts/adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 0
      C:/Windows/Microsoft.NET/Framework64/v2.0.40607/aspnet_regiis.exe -ua
      iis重启命令 iisreset


      C:/Windows/Microsoft.NET/Framework64/v2.0.40607/aspnet_regiis.exe -i -enable
      C:/inetpub/adminscripts/adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
      C:/Windows/Microsoft.NET/Framework/v2.0.40607/aspnet_regiis.exe -i -enable 
      iis重启命令 iisreset

 

    命令看上去很吓人(-u是要卸载ASP.NET),不过不用担心,后面-i就是安装了,而且安装程序会自动地在IIS中将ASP.NET用到的后缀名映射到C:/Window/Microsoft.NET/Framework/v2.0.50727/aspnet_isapi.dll。它怎么知道该用64位还是32位呢?呵呵,注意上面我们使用的是32位的aspnet_regiis,自然就是链到32位的dll了。

 

    上面这两步的顺序不能颠倒,否则就会出现一些奇怪的错误。比如在我试的过程中,有一段时间整个站点都Service Unavailable了(HTTP 503),原因是我先在64位下用64位的aspnet_regiis.exe把IIS和64位的.NET关联上,然后才用adsutil.vbs把模式改回32位(stupid),结果系统在32位模式下发现载入的DLL全是64位的,就报503错了,这时候如果查看一下事件管理器(在“我的电脑”上点击右键,点击“管理”),就会发现W3SVC-WP报了很多错,错误信息里可以看到SAPI Filter 'C:/WINDOWS/Microsoft.NET/Framework64/v2.0.50727/aspnet_filter.dll' could not be loaded due to a configuration problem. 之类的。如果使用了MVC框架,那么下面还有一步就是去手动注册mvc后缀,这一步本身没什么可说的,只要映射到32位的aspnet_isapi就可以了。

 

     说到底,兄弟们,还是升级到IIS7吧,一个版本之差,真的比iis6要强多了

原创粉丝点击