分享

博客园 - 鸟食轩 - 在Apache环境下成功的运行ASP.NET

 accesine 2005-11-20

    由于公司的产品在新的版本中,需要考虑一些新的部署方式,所以又抽空关注了一下.NET跨平台的一些解决方案。虽然Mono Project对基于.NET开发的人来说都不陌生,不过由于Mono是比较狭义的跨平台(因为它是OS级别的)概念。而从广义的角度来说,使用不同的Web Server也可以算是一种垮平台。

    缘起是由于IIS的口碑实在太滥,以至于不少的关键应用场景明文禁止安装和使用IIS。而从ASP.NET的执行原理来看,它是通过一个Web Server处理tcp请求,然后把对ASPX执行和呈现交于使用.NET实现一个托管环境来进行的。所以使用Apache是目前最经济的IIS替代品,而同时在Apache的sub-project正好有一个支持ASP.NET的模块,并且已经开发到了2.0版本。我所配合使用的版本是
Apache HTTP Server 2.0.55mod_aspdotnet 2.0.0。安装非常的简单,两个程序都是msi安装包,一路next就搞定了。完了再在安装目录/htdocs下建一个目录,如:active。

    不过其中有两个小问题需要注意:
    一是:在安装Apache HTTP Server的时候,如果我们机器上的80端口已被占用,需要选使用8080端口来安装那个选项,当然这个端口是可以在httpd.conf文件里修改的。只是使用这种安装方式安装好以后需要手动的启动apache2服务,使用cmd命令并进入apache安装目录,如:D:\Program Files\Apache Group\Apache2\bin,运行:apache -k install。

    二是:在配置aspdotnet_module的时候,我们需要在httpd.conf文件中追加以下清单:
#asp.net
LoadModule aspdotnet_module "modules/mod_aspdotnet.so"
AddHandler asp.net asax ascx ashx asmx aspx axd config cs csproj licx rem resources resx soap vb vbproj vsdisco webinfo
<IfModule mod_aspdotnet.cpp>

# Mount the ASP.NET example application
AspNetMount /active "J:/Working/BIVSS"
# Map all requests for /active to the application files
Alias /active "J:/Working/BIVSS"
# Allow asp.net scripts to be executed in the active example
<Directory "J:/Working/BIVSS">
Options FollowSymlinks ExecCGI
Order allow,deny
Allow from all
DirectoryIndex Default.htm Default.aspx
</Directory>
# For all virtual ASP.NET webs, we need the aspnet_client files
# to serve the client-side helper scripts.
AliasMatch /aspnet_client/system_web/(\d+)_(\d+)_(\d+)_(\d+)/(.*) "C:/Windows/Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4"
<Directory "C:/Windows/Microsoft.NET/Framework/v*/ASP.NETClientFiles">
Options FollowSymlinks
Order allow,deny
Allow from all
</Directory>
</IfModule>
    本来这个配置文件很简单,还有详细的注释。不过一定要注意上面的命令(非#开头的行),都需要写在一行上,如果是从网页上copy要特别的小心,特别是AddHandler和AliasMatch这两句容易被断成两行,那样启动apache服务就会失败,并且提示非常简单,根本不会告诉你配置文件加载错误

    目前,这个mod_aspdotnet模块最大的问题是在认证支持上的不足,比如windows和form都还不能支持,不过开源的东西更新还是很快的。由于使用Microsoft .NET Framework作为CLR,开发更新的压力和Mono不在一个数量级上,相信很快就能有对页面认证的较好支持。

    安装成功后可以运行探针来检查效果,比如使用迈克老猫同志的ASP.NET探针
   
 服务器基本信息
 服务器名称: birdshome  服务器IP地址: 127.0.0.1
 .NET Framework语言种类: English (United States)  .NET Framework 版本: 2.050727.29
 服务器端口: 80  服务器域名: localhost
 服务器时间: 11/18/2005 12:11:39 AM  服务器操作系统: Microsoft Windows XP
 服务器空间占用: .13  站点物理路径: D:\Program Files\Apache Group\Apache2\htdocs\active\
 服务器IE浏览器版本: 6.0000  服务器IIS版本: Apache/2.0.55 (Win32)
 服务器上次启动到现在已运行: 12883秒  脚本超时: 30000000秒
 虚拟目录绝对路径: D:\Program Files\Apache Group\Apache2\htdocs\active\  执行文件绝对路径: D:\Program Files\Apache Group\Apache2\htdocs\active\SiteInfo.aspx
 服务器操作系统安装目录: C:\WINDOWS  服务器应用程序安装目录: C:\Program Files
 CPU个数: 本计算机中有1个CPU  CPU类型: x86 Family 15 Model 3 Stepping 3
 CPU等级: CPU等级为50528271  CPU OEM ID: CPU的OEM ID为0
 CPU页面大小: CPU中的页面大小为4096  
 75%的内存正在使用  物理内存共有510MB
 可使用的物理内存有126MB  交换文件总大小为1245MB
 尚可交换文件大小为750MB  总虚拟内存有2047MB
 未用虚拟内存有1817MB  逻辑驱动器: A: ||C: ||D: ||E: ||F: ||G: ||H: ||J: ||K: ||L: ||M:


posted on 2005-11-17 22:48 birdshome 阅读(952) 评论(19)  编辑 收藏 收藏至365Key 所属分类: .NET技术开发相关

评论

# re: 在Apache环境下成功的运行ASP.NET   

有点意思,有空做来试试看,看来也可以Apache+SVN+VS Express+MySql进行开发了。
2005-11-18 00:56 | 風語者·疾風

# re: 在Apache环境下成功的运行ASP.NET   

改天就试一下。
2005-11-18 08:11 | 安文

# re: 在Apache环境下成功的运行ASP.NET   

不错 可以不用IIS了
2005-11-18 08:28 | 哈密瓜一号

# re: 在Apache环境下成功的运行ASP.NET   

Linux操作系统上可以吗?
2005-11-18 09:01 | hyp

# re: 在Apache环境下成功的运行ASP.NET   

兄台,这个东东我也试了,基本上可以在Apache上跑ASP.net
但支持性还是特别好,比如我就发现,如果我的目录超过8个字符,就不行,设置了权限也不行(在windows2Kserver下,2003还没试验),必须要把aspnet_client这个东东copy到Apache的默认目录下(相当IIS中wwwroot那个目录下),但LinkButton还会出现访问路径解析错误。

请教一下,看兄台能否帮我。
2005-11-18 09:16 | 胖子

# re: 在Apache环境下成功的运行ASP.NET   

Linux操作系统怎么用?
2005-11-18 09:33 | Linux操作系统怎么用?

# re: 在Apache环境下成功的运行ASP.NET   

这个俺也用过,只要按照作者的说明配置就OK了,但在将asp.net应用配置为虚拟主机是有一定难度。不知哪位有研究?分享分享。。
2005-11-18 09:54 | Vokobo

# re: 在Apache环境下成功的运行ASP.NET   

只是口碑问题,Apache并没有比IIS好多少。
2005-11-18 10:10 | Ariel Y.

# re: 在Apache环境下成功的运行ASP.NET   

@hyp
要在Linux上用ASP.NET目前就只有Mono了,那个东西由于要实现.NET Framework,规模和难度都太大了,潜台词就是要到产品级别的难度会很大很大。

@胖子
我没有发现有目录名8个字符的限制啊。使用LinkButton也没有问题,你用的是上面的apache和mod_aspdotnet的版本吗?

@Vokobo
你说的这个虚拟主机是什么?在上面配置多个站点?

@Ariel Y.
口碑这东西说小也好说盲从也好说盲目也好,但很多时候我们是无法说服用户的,,,
2005-11-18 14:06 | birdshome

# re: 在Apache环境下成功的运行ASP.NET   

@Ariel Y.

口碑这东西不是你说好就真的好的~~~IIS到底有多麻烦,我想遇到过IIS莫名其妙宕掉的朋友都知道~~~

apache的稳定毕竟是经过检验的~~~

这也就是为什么很多用户只用apache不用iis的原因~~~更苛刻一些,只用apache1.3不用2.0
2005-11-18 15:23 | mikespook

# re: 在Apache环境下成功的运行ASP.NET   

@birdshome

没有说你盲从,盲目,我们也不会嘲笑不太懂技术的用户的无知。完全支持你这篇文章,这样的文章很好,为我们提供了一种新的解决方案。

Ariel从来不在BBS/Blog上跟别人狡辩,很无聊,也没什么意义。但是这次不得说一说:

@mikespook

问题1、我们不应该动不动就妄下定论说谁好谁不好,一点技术含量都没有。只有天真的小孩儿才会问父母:“哪个是好人哪个是坏人啊?”;用好坏来形容系统只能表现出你的无知。

问题2、我们不应该人云亦云,尤其是技术问题是很严肃的。你能保证自己的观点是受到事实/数据支持的吗?

问题3、有这样一些人,不会用或者用不好人家的东西,就说人家的东西不好,这种人太多!尤其让人气愤!

这里不用说这样的文章:
http://www./tutorials/article.php/10825_3074841_1
如果你能用这种考虑问题的方式:
http://www./articles/alert/common/2005090822439.shtml
http://www.donews.com/Content/200504/161c4997eb7743cc832fca5d71d2f933.shtm
我也会为你鼓掌!

注:我没有能力写这些(也不能保证这些文章的客观真实性),但我不妄加评论谁好谁坏,我只会用IIS,我会说:IIS很强大,我还没有全面掌握,但是他目前完全能满足我工作中的需求,仅此而已。Apache也许很好吧,我很实在的说我不会用,所以我也没有理由抨击Apache。

以后下结论的时候,一定要多引用事实/数据/评测支持。写过Business Analysis或者Report或者RFP之类的东西的朋友都知道,这是提高文章可信度的重要因素。

-------------------

“口碑这东西不是你说好就真的好的~~~IIS到底有多麻烦,我想遇到过IIS莫名其妙宕掉的朋友都知道~~~ ”

到底有多麻烦?莫名其妙的宕掉?你还不知道为什么宕掉?是你的问题还是IIS的问题?。为什么博客园的问题dudu都会逐个去解决呢?这是典型的问题1&3。

“apache的稳定毕竟是经过检验的~~~ ”

你检验的?IIS的稳定也是经过检验的吧?我检验了,呵呵(开个玩笑)。这是问题2

“这也就是为什么很多用户只用apache不用iis的原因~~~更苛刻一些,只用apache1.3不用2.0 ”

很多吗?多少用多少不用?我身边的可都是用IIS哦。问题2。只会用1.3,不会用2.0。问题3


Ariel在网上从来不得罪人,如果你能够接受我的一些肤浅的方法和建议。我愿意对言语中的不周道歉。



最后一句:没有最好的,只有最合适的。
2005-11-19 02:25 | Ariel Y.

# re: 在Apache环境下成功的运行ASP.NET   

用什么不一样呢?程序员的任务是解决问题,不是讨论你的铁锹好用还是我的锤子硬。
我用 iis 的理由很简单,因为客户有这个要求。可能是我见得少吧,我还真没遇到过要求我把 asp.net 扔到 apache 上跑的客户。或许 php 也是不错的工具,不过我没有学。
2005-11-19 03:18 | yw80

# re: 在Apache环境下成功的运行ASP.NET   

事实上网络上 Apache的使用量是第一位的;

如果不是windows 和iis那么asp.net是可以做更多的项目;承担强度更大的业务.

linux +Apache 环境和windows+iis环境我都是使用过的。。

linux+apache明显要稳定;
2005-11-19 16:45 | 游荡的灵魂

# re: 在Apache环境下成功的运行ASP.NET   

@Ariel Y. 
Thank you very mush for reference, IIS vs. Apache, Looking Beyond the Rhetoric, you provide.
2005-11-19 17:09 | birdshome

# re: 在Apache环境下成功的运行ASP.NET   

@Ariel Y.

老mike从来不说自己的评论是客观的~~也从来不请别人客观的评论。我们无法不带有感情色彩的去看待问题,因为我们是人,不是圣人。thx~~

好,言归正传:

1.我所表达的“莫名其妙”的宕掉
很有趣,我本身也喜欢在IIS上跑PHP,因为那样简单,而且管理方便。但是我从来不会在商业环境中使用IIS跑PHP。因为我不想因为加载了ISAPI而挂掉整台服务器。IIS为什么会莫名其妙的宕掉?也许许多初学的朋友都会有这样的疑问。那么WINDOWS的LOG中给我满意的答案了么?“由于地址XXXXXXXX的异常访问而停止”这是什么鬼东西?到底是系统的问题?配置的问题?感染了病毒?还是程序造成的溢出?IIS由于过于人性化的封装(matebase是我最想改动的东西,却又是我最不能改动的东西)对于开发人员和管理人员来说隐藏了太多的细节。这是MS一直以来的卖点,却也是MS一直以来的诟病。我们在为了解决iis宕掉的问题上花了太多的精力,而到最后仅仅证实:“原来自己的水平不好,写的程序宕掉了服务器”如果是这样,我倒宁可用那些确定到底是什么问题的时间来提高个人的水平。

2.apache到底比IIS好多少
apache也许在一些人眼里不如IIS好,也许在一些人眼里apache甚至比IIS要垃圾得多。因为apache没有iis那样方的管理界面,更没有拿来就用的好脾气。
我不敢保证我比阅读本文的朋友都了解iis,我也不敢保证我比阅读本文的朋友都了解apache。但是我以我做了1年asp的组件开发,和1年的apache下的php开发比较。apache在扩展性和稳定性上都要好于iis,而apache2.0的扩展性要好于1.3,1.3的稳定性要好于2.0。这是我的一家之言,我并不要你接受我的观点,我只是希望你能了解我的观点。apache比iis好多少不是口碑问题,而是我的体会。

3.感谢Ariel Y. 指出我在表达上的缺憾。我并没有在下结论,而是对你所怀疑的口碑加以证实。因为我熟悉IIS,也熟悉APACHE。所以我对此加以证实,这样的口碑不是没有根据的。的确像你说的那样没有最好,只有最适合。但是如果iis和apache都可以被选择的话,我可能会选apache,因为它更适合。

因为坎子说过,看帖开新帖不是好习惯,我又用不习惯那个pingback,所以在这里多罗嗦几句。对iis6的改进,我个人感觉是很不错的,只是windows2003的价格让人难以接受。所以我们依然选择freebsd和apache这样廉价的组合来运作。这样可以节约80%的硬性成本。而对于MS调查报告中说的“windows有更低的维护费用”我也是肯定的。windows在维护费用上确实不到*nix系统的一半,甚至更低。只是我们在让一个廉价的系统管理员面对突发的系统崩溃和让一个资深的系统管理员维护稳定的系统上,我们选择了后者。

昨天还在linuxsir上说我是博客园的叛徒,在大家专注dotnet,windows的时候我总唱反调。呵呵~~其实技术上的38线是绝对没必要的。
2005-11-19 17:58 | mikespook

# re: 在Apache环境下成功的运行ASP.NET   

@老Mike

很喜欢看你的这种探讨:)原来以为又要吵架呢,呵呵。起码通过这种讨论,让我了解到一些Apache的知识。
虽然不好意思的开了新贴,不过我我们这种只对事不对人的讨论对博客园是有益无害的。起码我们讨论了一些方法论,也从不同的角度对Apache和IIS做了一些比较,无疑这对大家都是有收获的。

其实如果让我自己花钱去建一套系统,我也会选择LAMP,但是在License不是问题的条件下,我们更愿意在一个好用的平台下用最小的Cost实现最大的Business Value。无疑.net的开发和维护成本比较低,这一点你也有说明。

免费的开源系统毕竟和商业系统有一些区别。可定制化是优点也是缺点。会用的如鱼得水,不会用的不知所云。相比之下,微软产品的丰富的开发文档无疑是开发人员的天堂。

这里再说一个题外话,关于方法论的:

和MSN的同事在一起合作的时候,学会了这样一种理念:那时我们要定期执行一件简单的任务,于是就做了项目计划要开发一个Windows Service来做这个事情,还计划实现配置文件和服务管理器。MSN的同事问:你们为什么不用Windows的Task Schedule加上一个简单的Console程序?那是微软经过测试好的成熟产品,可以说运行非常稳定。如果你们自己开发,不但要花费时间,还要进行大量的测试,还不能保证有Windows那样的产品质量。用更多的Cost,带来更多的Risk,值得么?
而我们的理由呢?呵呵,仅仅是:那个不是我们的系统,我们不信任,我们要自己做,我们控制不了。其实,学习并掌握Task Schedule的时间远比重新开发新系统时间要短得多。开发人员就是转不过这个弯儿,包括我自己,呵呵。
注:排除一些财大气粗,不见兔子不撒鹰的客户。明明用Excel可以解决的时候,你不给他做一个新的系统,花他几百万,他还不乐意呢。那时候,我们一定要“定制开发”哦;)

BTW,关于加载了PHP的ISAPI宕掉的问题我还是觉得是PHP ISAPI的错;)

最后,同老Mike同志握手~

@birdshome

It‘s my pleasure.
2005-11-19 22:25 | Ariel Y.

# re: 在Apache环境下成功的运行ASP.NET   

Sorry, It‘s Scheduled Tasks
2005-11-19 22:32 | Ariel Y.

# re: 在Apache环境下成功的运行ASP.NET   

apache虽然稳定,在apache的asp.net module上跑asp.net有没有保证就不知道了,风险不见得比iis小啊。何况又只能用在windows上,windows上的apache和iis比就没什么优势了阿,只能自己玩玩或是可以作为售前宣传的卖点,骗骗不懂的用户而已,真的会有人用在商业用途吗?
2005-11-19 23:48 | robaggio

# re: 在Apache环境下成功的运行ASP.NET   

@robaggio
安全风险本身由apache承担,作为http server,这个和运行的什么服务器端代码(php, jsp, cgi)无关。如果是由于http server运行的应用程序模块的缺陷引起的风险,apache出问题,IIS也一样跑不了。当然目前aspnet_wp|w3wp或许比mod_aspdotnet.so强些,但没有实际比较也不好说哈。至于有没有这样的用asp.net的用户,等我成功部署出去了再告诉你@_@。
2005-11-20 00:22 | birdshome

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多