如何调试系统
笔者下载的版本是嘟嘟提供的
CNBlogsDottext ,关于这个版的说明在:
下载后展开有如下目录存在一个工程文件,是v003版本的工程。因为是asp.net的工程,所以需要配置IIS来确保全部项目夹在成功。具体察看 OtherStuff/安装说明 ,在此列出:
1、建立DottextWeb虚拟目录, 指向CNBlogsDotText\DottextWeb, 该虚拟目录用于VS.NET打开DottextWeb项目, 不要建立*.*到asp.net的映射。
2、建立访问站点虚拟目录, 指向CNBlogsDotText\DottextWeb, 并建立*.*到asp.net的映射
注释:你看到这里建立了两个虚拟目录。第一个虚拟目录是满足vs2003工程打开需要的,因为工程的配置文件需要采用frontpage方式从IIS读取工程文件,有对此虚拟目录的引用。第二个虚拟目录是为了你运行调试使用的,因为dottext的web.config会接管全部对该目录的http全部类型文件的访问,所以需要IIS把全部请求都传递给asp.net框架,而将*.*映射到asp.net会把保证dottext接管并分析处理每一个对blog应用程序的请求。
具体为了便于测试(保持测试环境和实际运行环境),我自己在本机上创建了一个测试环境,是为了满足同我的公司域名的blog.xxx.cn一致,我另外起用了一个blog.test.com,。我在\system32\drivers\etc\host文件中加入了一行
127.0.0.1
blog.test.com
并且,新建立一个站点主机头为blog.test.com 绑定在我的局域网Ip,并且目录就设定为DottextWeb所在目录,按照2 的要求,添加了*.*到asp.net的映射。这样做,可以在你本地采用blog.text.com调试通过后,可以无需担心什么就直接覆盖上个版本就可以实现更新了。
3、安装数据库, 运行OtherStuff\SQL Scripts中有DotTextData.sql脚本,自动创建DotTextData数据库。也可以先建立数据库,然后运行DotTextData.sql脚本。忽略脚本安装错误提示,不影响正常使用。
5、初始化数据库,分别运行InitData.sql与SkinControl脚本。
6、在web.config中配置数据库连接字符串, 即<DbProvider>中的connectionString。
注释:这里,需要确保在实际运行和开发机器上的字符串一致,否则改web.config就麻烦死了。同时,需要sql连结客户端配置好(如果采用sql 的话)。
7、上述配置完成后,就可以访问了。
8、通过“新博客注册”注册一个新用户,并将该用户加入站点管理员组,操作方法:在表blog_UsersInRoles中,添加一条记录,UserID为你刚注册的用户的BlogID,RoleID为1(表blog_Roles中administrators的RoleID)。
注释:这个规则的目的是为了你能够有一个管理员账号,实现系统分类的配置。这个账号跟其他申请注册的账号的后台管理界面略有不同,多了一个管理的TAB选项页面。
9、添加网站分类:
A、以管理员用户登录,进入管理页面,打开“Manage”页面
B、选择“编辑网站分类”,添加一个分类
C、在分类名称点击“Config”, 再选择添加,就会向SiteBlogConfig.config文件写入数据,如果这时出现“访问被拒绝”的错误,那是因为程序被安装在NTFS分区上,运行IIS进程的用户对程序所在文件夹没有写入权限,你需要修改一下权限设置。
10、设置首页默认显示的网站分类,在SiteBlogConfig.config中将相应的<SiteBlogConfig>设置成<IsDefault>true</IsDefault>。默认设置“首页”分类为<IsDefault>true</IsDefault>,会显示所有分类的随笔。
注释:经过以上安装,本地的确可以浏览。但是界面相当粗糙,通常,每个公司都会进行适当美化blog站的索引页和其他分栏目的索引页,所以需要先做些美化页面再加入到站点上去。后面会介绍如果修改配置实现替换系统的页面。这些需要在阅读了源码后才心里有底。呵呵。
直接在VS中按下调试时,这个时候由于运行的是上文提到的1中的目录,所以此时iis并没有将全部文件扩展映射到asp.net框架,所以会出现很多.net运行时错误,所以你不应该直接调试,而是应该启动进程调试。具体方法为:
先采用blog.test.com启动首页(让系统启动一个w3wp.exe,2000版本的是),然后在 调试菜单中,选定调试进程,在出现的进程列表中,找到blog.test.com 对应的应用程序进程,然后附加上,并确保CLR调试选项选定。此时,VS会进入调试状态,我们再启动访问相应的页面,如果加入了断点,会相应进入断点跟踪状态。
Update:
看到有兄弟留言说还搞不定调试,再次补充:
0、确保你是调试机器的管理员
1、首先确保你的工程是debug版本,默认下载的好象是release版本。这个不用我说怎么做吧
2、配置好blog.test.com的本地解析,确保cmd.exe状态下ping blog.test.com 是本机IP
3、配置好主机头,在第二个blog站点加上这个主机头
4、访问 blog.test.com 这个时候系统会启动一个asp.net的应用程序,2000操作系统上是aspnet_wp.exe,2003系统是w3wp.exe,这个在进程列表中可以看到的进程就是你需要调试的
5、点调试菜单,找到“进程...”选择后,出现了一个仅测和列表框,你会看到有aspnet_wp.exe或者w3wp.exe在其中,选择刚启动的那个。至于如果有好几个同名进程,那。。。简单点 就是将w3svc服务重新启动,然后其他的什么都不做,访问blog.test.com一次,自然就只有一个asp.net应用程序进程。
6、选中它,点击“附加...”会自然附加,弹出的对话框中的common language runtime必须被选择
7、确定关闭后,vs会进入调试状态,你可以随意加入断点,然后通过访问特定的url来激活断点。
8、如果还搞不定,请先请您公司的同事,然后再考虑发贴问人。我的email:myjobsdk#yahoo.com.cn,我只能不定期检查这个邮件来做本文的力所能及的支持。
谢谢关注,希望大家能够补充我的不足!
2006-5-11 update:
有兄弟询问如何配置*.*到asp.net的映射,特此在此补充:
windows2000 和windows2003做的配置是不一样的,
2000的配置如下:
1、iis管理器,打开blog站点的属性
2、主目录,在 应用程序设置中 选择 配置。。。
3、应用程序映射,点击 添加。。。
4、可执行文件选择 WINNT\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll 这个需要同你的.net framework当前版本一致
5、扩展名 输入 *, 方法:GET,POST
6、不要选中 “检查文件是否存在”,选定限于脚本引擎
2003 无法输入*到aspnet_isapi.dll 的映射,需要:
1、iis管理器,打开blog站点的属性
2、主目录,在 应用程序设置中 选择 配置。。。
3、映射,应用程序扩展是没法输入*到 aspnet_isapi.dll 的映射
4、在下面的 通配符应用程序映射 (执行顺序)中 插入 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,也要注意 不要选择“确认文件是否存在”
不要选择“确认文件是否存在”的目的是避免访问一些物理文件不存在的资源时候可以被aspnet_isapi.dll处理请求,也就是进入.net执行框架