上一篇:在ASP.NET程序中实现语音合成 >>
在Apache上调试ASP.NET 1.1/2.0代码
由于Apache2项目中的mod_aspdotnet sub-project实现上的问题(也可以说是bug吧),使我们在其上运行ASP.NET程序时,和在IIS上的aspnet_wp|w3wp中运行的正确性上有一些差别,所以在Apache(mod_aspdotnet)上调试ASP.NET项目的源代码就很有必要。虽然ASP.NET 2.0已经正式release,不过1.1版本的项目还是目前的主流,所以我们分别看看Apache对这两个版本Framework的支持。正如我前面所说,ASP.NET 1.1的项目紧密地依赖IIS,所以目前我只能在Apache上调试已有的ASP.NET 1.1项目,而不能创建(原因后面再说)。由于IIS先安装并占用了80端口,所以我的Apache Web Server就只能运行在其它端口上了(如:8080,通过httpd.conf文件配置)。
首先,我们需要让这个被调试的项目在IIS上运行正确,并且项目可以被VS.NET 2003 IDE正确开启。然后配置Apache,让这个项目同时在Apache上也运行正确。我们就可以通过IDE的Ctrl+Alt+P来Attach希望被debug的进程,这时我们会看到在任务列表(需要check "Show system processes")里居然有两个Apache.exe进程。这里我也不知道应该是哪个,虽然它们的类型都是".NET, Win32",不过只有一个是mod_aspdotnet的宿主进程。当然我们还是可以用个小trick来判断,就是打开taskmgr并刷新Apache上运行的Web站点的页面,看那个Apache.exe进程占用CPU,那么它就是asp.net支持模块的宿主。Attach成功后就可以在VS.NET里面设置断点,进行step into/out的源代码级调试了。
上面是对ASP.NET 1.1项目的调试方法,如果是ASP.NET 2.0的项目呢?由于.NET Framework及Visual Studio 2005的改进,调试2.0的ASP.NET项目变得奇easy! 只需要把项目在Apache上运行好后,用Visual Studio 2005打开希望调试的页面的源代码(*.cs)文件,Attach上Apache的进程后直接设置断点就可以了,根本不需要开启项目,当然也就和IIS完全脱离关系了。
// 不管是1.1还是2.0,都需要确定到底是哪个Apache.exe进程是宿主
在Apache上调试失败的已知可能问题:
1、没有使用debug版的项目dll来运行,这个...还是问题吗?
2、第二种情况,如果不注意,可能会认为是Apache不能调试1.1的Asp.net。就是如果机器上同时装了Fx1.1和Fx2.0,mod_aspdotnet会默认把我们的ASP.NET程序加载在Fx2.0上运行,这时如果用VS.NET 2003去调试将无法Attach任何Apache.exe进程。当然用Visual Studio 2005是可以的。解决办法需要在httpd.conf中使用"AspNetVersion v1.1.4322"命令显示指定Asp.net程序运行时的.NET Framework版本。
前面我提到了1.1版本的Asp.net项目的建立必须要IIS,这是因为在创建项目时VS.NET 2003需要向IIS获取目前其支持的Asp.net的版本信息,然后通过一些Get和Post操作,创建一些项目必须文件在服务器上,具体步骤如下:
Created ASP.NET Project by VS.NET 2003 Command#region Created ASP.NET Project by VS.NET 2003 Command
GET localhost/DebugDemo/get_aspx_ver.aspx
500 Internal Server Error
GET localhost/get_aspx_ver.aspx
404 Not Found
GET localhost/DebugDemo/vs28758389629759149_tmp.htm
200 OK
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
100 Continue
401 Access denied
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
401 Access Denied
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
100 Continue
200 OK
POST localhost/_vti_bin/_vti_aut/author.dll
100 Continue
401 Access denied
POST localhost/_vti_bin/_vti_aut/author.dll
401 Access Denied
POST localhost/_vti_bin/_vti_aut/author.dll
100 Continue
200 OK
POST localhost/_vti_bin/_vti_adm/admin.dll
100 Continue
401 Access denied
POST localhost/_vti_bin/_vti_adm/admin.dll
401 Access Denied
POST localhost/_vti_bin/_vti_adm/admin.dll
100 Continue
200 OK
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
401 Access Denied
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
100 Continue
200 OK
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
#endregion
GET localhost/DebugDemo/get_aspx_ver.aspx
500 Internal Server Error
GET localhost/get_aspx_ver.aspx
404 Not Found
GET localhost/DebugDemo/vs28758389629759149_tmp.htm
200 OK
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
100 Continue
401 Access denied
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
401 Access Denied
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
100 Continue
200 OK
POST localhost/_vti_bin/_vti_aut/author.dll
100 Continue
401 Access denied
POST localhost/_vti_bin/_vti_aut/author.dll
401 Access Denied
POST localhost/_vti_bin/_vti_aut/author.dll
100 Continue
200 OK
POST localhost/_vti_bin/_vti_adm/admin.dll
100 Continue
401 Access denied
POST localhost/_vti_bin/_vti_adm/admin.dll
401 Access Denied
POST localhost/_vti_bin/_vti_adm/admin.dll
100 Continue
200 OK
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
401 Access Denied
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
100 Continue
200 OK
POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll
#endregion
同样在ASP.NET 2.0中,这个步骤完全不需要了,ASP.NET项目就是一个目录,完全的和Web Server脱离开了。我们也就再也不用因为IIS的捣乱,而使的不能开发ASP.NET程序了~~~
下一篇:ASP.NET初学:建立ASP.NET开发平台 >>
相关文章:
- · ASP.Net:基于窗体的身份验证
- · 防刷新重复提交、防后退方法
- · ASP.NET程序实现博客日历
- · 掌握Web窗体的生命周期与状态管理
- · ASP.NET 移动 Web 窗体和 ASP.NET 兼容性
- · ASP.NET入门随想之多态、接口与委托
- · ASP.Net项目出错处理方法汇总
- · 利用ASP.NET程序来访问Excel文档
- · ASP.NET应用程序开发七大技巧
- · VB.NET开发人员必备参考10本书目
- · 用ADO.NET处理层次数据
- · ASP.NET实现在服务器端控制网页
- · 用ASP.NET向Javascript传递变量
- · ASP.NET实现抓取网页中的链接
- · 在ASP.NET 2.0中实现数据的绑定
- · ASP.NET随机显示数据库记录
- · ASP.Net生成业务数据的统计图形
- · 剖析ASP.NET2.0导航功能之控制地图信息
- · ASP.Net中利用CSS实现多界面的方法
- · ASP.NET 常见问题
- · 在ASP.NET中实现POST发送数据
- · ASP.NET页面导航方式之比较与选择
- · ASP.NET操作IIS中的虚拟目录
- · 在ASP.NET 2.0中实现本地化
- · ASP.Net Cookie
- · 让JSP与ASP.Net共享Session值
- · ASP.NET关于分页上的数据删除问题
- · 用ASP.NET实现的把本文推荐给好友功能
- · .Net环境下基于Ajax的MVC方案
- · .Net应用程序性能提高小技巧
- · ASP.NET实现Cache浏览器的管理
- · net 下安装、调试的常见问题与错误
- · .NET Ajax的无刷新技术实例详解
- · Asp.net中处理一个站点不同Web应用共享Session的问题
- · ASP.Net的6大热点问题
- · 在ASP.NET中实现多页面选择的问题
- · 关于大文件上传的FTP解决方案
- · 用ASP.NET实现网络空间管理
