﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-海纳百川 有容乃大（http://www.brtech.com.cn）</title><link>http://www.cnblogs.com/ekun008/</link><description>海纳百川，有容乃大（http://www.brtech.com.cn）</description><language>zh-cn</language><lastBuildDate>Mon, 06 Jul 2009 08:07:56 GMT</lastBuildDate><pubDate>Mon, 06 Jul 2009 08:07:56 GMT</pubDate><ttl>60</ttl><item><title>[分享]真正的分页存储过程,借鉴了CSDN上众多力量,除BUG版,分享给大家</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/07/419486.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Wed, 07 Jun 2006 04:07:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/07/419486.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/419486.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/07/419486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/419486.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/419486.html</trackback:ping><description><![CDATA[摘要: 在这里,感谢所有CSDNBLOG上贴过相关主题贴子的兄弟,下面的方法是建立在CSDNBLOG上七篇关于分页存储过程的基础上的前段时间研究分页的时候,在CSDN的BLOG上看到了一位兄弟写的分页存储过程,发现非常好,于是,就使用了这个存储过程,下面是原版的分页存储过程--开始CREATEPROCEDUREGetRecordFromPage@tblNamevarchar(255),--表名@fldNa&nbsp;&nbsp;<a href='http://www.cnblogs.com/ekun008/archive/2006/06/07/419486.html'>阅读全文</a><img src ="http://www.cnblogs.com/ekun008/aggbug/419486.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48002/" target="_blank">竞争日趋激烈 微软欲借 Windows 7 扭转战局</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>CommunityServer页面间关系</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415955.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 08:06:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415955.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415955.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415955.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415955.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415955.html</trackback:ping><description><![CDATA[摘要: 当我们第一眼见到CS的时候你是不是被他那么纷繁复杂的结构看傻眼呢。那么在认识CS之前最好对它的页面间关系做一个全面的了解，这对我门改造CS有较大的帮助。首先我们对整体一个简单的了解，如图，此为在IDE中打开的项目列表：其中CommunityServerWeb项目为IIS运行的WEB项目，项目的UI层相关的都放在此处。CommunityServerComponents和CommunityServer&nbsp;&nbsp;<a href='http://www.cnblogs.com/ekun008/archive/2006/06/02/415955.html'>阅读全文</a><img src ="http://www.cnblogs.com/ekun008/aggbug/415955.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>CommunityServer研习心得</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415953.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 08:04:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415953.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415953.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415953.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415953.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415953.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>整个</span><span>anf</span><span>的结构其实都遵循同样的编程模型</span><span><br></span><span>都是</span><span><br></span><span>请求</span><span>url-&gt;url rewrite-&gt;aspx-&gt;ascx-&gt;load cs-&gt;response<br></span><span>把握好一个页面的写作方式</span><span>,</span><span>其他就不攻自破了</span></p>
<p><span>eg.<br>aspnetforums/showforum.aspx<br>controls/view/threadview.cs<br>AspNetForums.Controls.ForumImageButton<br></span><span>直接用类判断是否有权限</span><span><br></span><span>用</span><span>visable</span><span>控制显示</span><span><br>&nbsp;&nbsp;&nbsp;// User permissions on new post button<br>&nbsp;&nbsp;&nbsp;//</span><span>审核用户的发贴权限</span><span>!!!!!</span><span>终于找到了</span><span>!!!<br>&nbsp;&nbsp;&nbsp;ForumPermission p = forum.Permission;<br>&nbsp;&nbsp;&nbsp;User user = Users.GetUser();<br>&nbsp;&nbsp;&nbsp;if (p.Post == AccessControlEntry.Deny)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;ForumImageButton newPostButton = (ForumImageButton) skin.FindControl("NewPostButton");<br>&nbsp;&nbsp;&nbsp;&nbsp;if (newPostButton != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newPostButton.Visible = false;&nbsp; //</span><span>直接用</span><span>visible=false</span><span>来控制</span><span>!!<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br></span><span>用</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</span><span>判断论坛逻辑上是否允许发贴</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ForumPermission.AccessCheck(forum, Permission.Post, post);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (ForumException) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br></span><span>显示不同</span><span>ui</span><span>和是否有执行某项功能的权限由两个类决定</span><span><br>AspNetForums.ForumPermissions<br>public static ForumPermission GetForumPermission (int forumID, int roleID) <br>public static ArrayList GetForumPermissions (int forumID) <br></span><span>和</span><span><br>AspNetForums.Components.User<br>AspNetForums.Components.UserCookie<br></span><span>来存储权限信息</span></p>
<p><span>页面之间权限的持续化由</span><span>ForumContext</span><span>类实现</span><span><br></span><span>本质是通过</span><span>HttpContext</span><span>存储</span></p>
<p><span>好像是生成了一个自定义</span><span>Vcard</span><span>对象的序列化字段在</span><span>b/s</span><span>间通讯</span><span><br></span><span>继续研究</span><span>!!!</span></p>
<p><span>anf</span><span>中</span><span>,Http Module</span><span>主要用于</span><span>url rewrite,</span><span>权限验证</span><span>,</span><span>页面预处理等等</span><span><br>&nbsp;&nbsp;&lt;!-- START - AspNetForums specific application settings --&gt;<br>&nbsp;&nbsp;&lt;httpModules&gt;<br>&nbsp;&nbsp;&nbsp;&lt;add name="AspNetForums" type="AspNetForums.ForumsHttpModule, AspNetForums.Components" /&gt;<br>&nbsp;&nbsp;&lt;/httpModules&gt;</span></p>
<p><span>&nbsp;&nbsp;&lt;httpHandlers&gt;<br>&nbsp;&nbsp;&nbsp;&lt;add verb="GET" path="avatar.aspx" type="AspNetForums.Components.HttpHandler.AvatarHttpHandler, AspNetForums.Components" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;add verb="GET" path="vcard.aspx" type="AspNetForums.Components.HttpHandler.VCardHttpHandler, AspNetForums.Components" /&gt;<br>&nbsp;&nbsp;&lt;/httpHandlers&gt;</span></p>
<p><span>而</span><span>http handler</span><span>主要实现不需要返回页面的处理的实现</span><span><br></span><span>因为</span><span>http handler</span><span>会截获</span><span>request</span><span>而不转入实际</span><span>aspx</span><span>页面处理</span></p>
<p><span><br>Forums</span><span>用的是</span><span>.Net</span><span>的</span><span>form</span><span>验证，你只要用</span><span>Page.Request.IsAuthenticated</span><span>就可以判断是否登陆！</span></p>
<p><span>保存用户信息的几种方法</span><span><br>Cookie</span><span>：</span><span><br>Response.Cookies.Add(new HttpCookie("currPage","1"));<br>currPage=Int32.Parse(Request.Cookies["currPage"].Value); <br>Session</span><span>：</span><span><br>Session["currPage"]=1;<br>currPage=(int)Session["currPage"]; <br>ViewState</span><span>：</span><span><br>this.ViewState["currPage"]=1;<br>currPage=Int32.Parse(this.ViewState["currPage"]); <br>QuringString</span><span>：</span><span><br>Movie.aspx?currPage=1;<br>currPage=Int32.Parse(Request.QueryString["currPage"]); <br>Attributes</span><span>：</span><span><br>txtPage.Attributes.Add("currPage",1);<br>currPage=Int32.Parse(txtPage.Attributes["currPage"]);</span></p>
<p><span><br></span><span>所有通过</span><span> ASP.NET </span><span>引擎传递的请求最终都将到达</span><span> HTTP </span><span>处理程序或</span><span> HTTP </span><span>处理程序工厂（</span><span>HTTP </span><span>处理程序工厂仅返回</span><span> HTTP </span><span>处理程序的实例，然后使用该实例来处理请求）。最终的</span><span> HTTP </span><span>处理程序将返回响应，即呈现被请求的资源。此响应将被发送回</span><span> IIS</span><span>，然后</span><span> IIS </span><span>将响应返回给提出请求的用户。</span></p>
<p><span>ASP.NET </span><span>包括许多内置的</span><span> HTTP </span><span>处理程序。例如，</span><span>PageHandlerFactory </span><span>用于呈现</span><span> ASP.NET </span><span>网页。</span><span>WebServiceHandlerFactory </span><span>用于呈现</span><span> ASP.NET Web </span><span>服务的响应</span><span> SOAP </span><span>信封。</span><span>TraceHandler </span><span>将向</span><span> trace.axd </span><span>呈现请求的</span><span> HTML </span><span>标记。</span></p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/ekun008/aggbug/415953.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>CommunityServer皮肤主题的更换</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415952.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 08:04:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415952.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415952.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415952.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415952.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415952.html</trackback:ping><description><![CDATA[<p style="WORD-BREAK: break-all"><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>还记得</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">duwamish</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>吗？在那里面，一些页面由用户控件组成，而其所承担的逻辑处理都是在控件内部完成的，这样是把控件做为单独的逻辑模块使用。在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">forum</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>里，我们又看到了这种处理方法，并且，更加的复杂和灵活，用来实现皮肤主题的更换。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>通过前面的两篇笔记，已经大致了解了</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">forum</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>的控件使用，下面就做一次该方面的总结。（广告时间：之所以先关注这个，是因为我想把下一版的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">stella</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>里使用这种模式。请大家期待大概两个星期后完成的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">Stella Forum V 1.2</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>）</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"> <br></span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">forum</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>中，页面由</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">&#8220;</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>模块控件</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">&#8221;</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>（我自己起的名字，呵呵）组成，这些模块控件其实是<span class=style1>由负责呈现内容的的用户控件和负责进行逻辑处理的自定义空间共同组成</span>的。这样的隔离处理是为了可以方便的更换用户控件达到更换皮肤的目的，逻辑操作都一样，所以后面的自定义控件就不需要改动。还有比较重要的是，页面上标记的都是自定义控件，这个也不会因皮肤的更换而修改。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>实际上，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">forum</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>里的页面和用户控件很少有</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">codebehind</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>的代码，因为逻辑即处理都交给自定义控件了。这样可以达到一种即插即用的效果，比如那个登陆模块，你可以随心的放到任何地方，而不用修改页面处理代码。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>主题文件都放在统一的目录下，加载的时候会直接到该目录下找相应的文件。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>拿登陆控件来分析，主要设计这三个控件：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br>Skin-Login.ascx <br>AspNetForums.Controls.Login <br>AspNetForums.Controls.SkinnedForumWebControl<br>Skin-Login</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>提供了登陆时需要呈现的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">html</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>，包括文本框、按钮等，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">Login</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>用来初始化</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">Login</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>并对提交事件进行处理，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">SkinnedForumWebControl</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">Login</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>的基类，主要作用是动态加载需要使用的用户控件。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br>CreateChildControls</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>方法扮演了重要的角色，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">SkinnedForumWebControl</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>里有两个方法</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">LoadSkin</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>和</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"> InitializeSkin</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>都是在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">CreateChildControls</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>被使用。详细的说，先是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">LoadSkin</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>加载要使用的用户控件，然后在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"> InitializeSkin</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>里对这个控件进行初始化。注意</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">InitializeSkin</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">vietual</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>的，这个方法的实现主要是在个各子类（也就是具</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"> </span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>体的自定义控件，在这里是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">Login</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>）。在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">InitializeSkin</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>重要的是对各种事件的订阅，比如登陆时要点按钮，对点击事件的订阅就在这里。过程</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"> </span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>就是先用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">FindControl</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>找到相应的控件，然后在处理。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>要加载的具体控件是在子类中先定好，然后在基类中加载。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">CreateChildControls</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>的触发顺序是先子类后基类。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>系统怎么知道该加载哪个主题？这个一开始有个默认设置，然后用户可以自己更改需要的主题。在用户控制面板中可以看到该选项。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>接下来的问题，在用户面板中可以选择需要哪个主题，那系统是怎么知道都有哪些主题？我们可以看提供选择的那个控件是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">AspNetForums.Controls.ThemeDropDownList</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>，在该控件里完成了该项功能，在这里给出一行代码：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br>string[] dirs = Directory.GetDirectories( context.Request.PhysicalApplicationPath + ForumConfiguration.GetConfig().ForumFilesPath + "\\themes" );<br></span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>这样，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">forum</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是直接到</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">themes</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>文件夹下看有哪些主题包，然后显示出来供选择。大家可以到官网</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><a href="" target=_blank><font color=#013da4>http://bbs.hidotnet.com</font></a>/ </span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>下一个主题包，然后直接解压到这个文件夹，这样新的主题就可以用了。刚才我下了那个龙翔的主题，也没有看安装说明什么的，直接就把里面的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">default</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>文</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"> </span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>件夹改名成</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">lxSkin</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>，然后放到</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">themes</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>里，就直接可以用了，用户在选择的时候会看到两个选择</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">default</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>和</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">lxSkin</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>。<span style="BACKGROUND: #efefef">换肤的大至流程如下：</span></font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>以</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">Skin-DisplayUserWelcome.ascx</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>为例</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">(</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>这个是是否登陆状态显示</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">)<br>1</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">View-ForumGroupView.ascx</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>文件引入</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">AspNetForums.Controls</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>别名为</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">Forums<br>2</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、在希望出现</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">&#8220;</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是否登陆状态</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">&#8221;</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>显示的地方使用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">&lt;Forums<v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id=_x0000_i1025 style="WIDTH: 14.25pt; HEIGHT: 14.25pt" type="#_x0000_t75" alt="Big Smile"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:href="http://anf.hidotnet.com/emoticons/emotion-2.gif"></v:imagedata></v:shape>isplayUserWelcome runat="server" /&gt;</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>使用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>AspNetForums.Controls.DisplayUserWelcome<br>3</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">DisplayUserWelcome</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>类中要做</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>&nbsp;A</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、设定皮肤的名称</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">skinFilename<br>&nbsp;B</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、重写</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">InitializeSkin(Control skin)</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>函数，用于实现皮肤上的控件</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>&nbsp;C</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、如果与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">SkinnedForumWebControl</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>类的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">CreateChildControls()</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>进行的操作有所区别，还需要</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>&nbsp;</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>重写</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">CreateChildControls()</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>，不过可以只写出区别部分，然后用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">base</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>调用。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>&nbsp;&nbsp;D</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、如果控件存在事件，还需要编写事件</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>4</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、在皮肤中需要设定控件显示的布局，控件名称应该与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">DisplayUserWelcome</span><font face=宋体><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类中实现的控件名称相同</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><o:p></o:p></span></font></p>
<p style="WORD-BREAK: break-all"><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>在换肤过程中</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">SkinnedForumWebControl</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>类是至关重要的一个类，他通过实现</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">INamingContainer</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>接口来区分</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>控件，通过重写</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">CreateChildControls()</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>来复合控件。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>注明：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">CreateChildControls()</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>在默认情况下会被</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">OnPreRender()</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>调用，也会在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">FindControl()</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>调用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>OnPreRender()/*</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>会在页面呈现时之前会调用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">*/<br>FindControl()/*</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>查找某一控件</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">*/<br></span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>目前我在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">AspNetForums</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>只发现了三种类别的皮肤，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>1</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">MasterPage.ascx</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>为代表的总框架皮肤</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">&nbsp;<br>2</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">View-ForumGroupView.ascx</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>为代表的皮肤容器</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>3</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">Skin-DisplayUserWelcome.ascx</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>为代表的功能皮肤</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>那么如果你想改变一页面中某一个块的位置，那么你应该去修改皮肤容器，如果要改变的是某一块内部的布局则需要修改功能皮肤</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br><br></span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">default.aspx</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>中大约用到了如下几个用户控件</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br><br>delfault.aspx</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><o:p></o:p></span></p>
<p style="WORD-BREAK: break-all"><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">View-ForumGroupView.ascx//</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>首页的整体布区</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>Skin-LoginSmall.ascx//</span><font face=宋体><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">登陆那一块</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><o:p></o:p></span></font></p>
<p style="WORD-BREAK: break-all"><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">Skin-NavigationMenu.ascx//</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>菜单</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>Skin-Banner.ascx<v:shape id=_x0000_i1026 style="WIDTH: 14.25pt; HEIGHT: 14.25pt" type="#_x0000_t75" alt="Tongue Tied"> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image002.gif" o:href="http://anf.hidotnet.com/emoticons/emotion-7.gif"></v:imagedata></v:shape>tart//</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>自定义</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">,</span><font face=宋体><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">位置处在菜单的上方</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><o:p></o:p></span></font></p>
<p style="WORD-BREAK: break-all"><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">Skin-DisplayUserWelcome.ascx//</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>状态</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>Skin-DisplayTitle.ascx//</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>声明</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>Skin-Statistics.ascx//</span><font face=宋体><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">统计信息</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><o:p></o:p></span></font></p>
<p style="WORD-BREAK: break-all"><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana">Skin-WhoIsOnline.ascx//</span><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>在线信息</font></span><span lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; FONT-FAMILY: Verdana"><br>Skin-DisplayLegendForum.ascx//</span><font face=宋体><span style="FONT-SIZE: 9pt; BACKGROUND: #efefef; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">论坛图例</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><o:p></o:p></span></font></p>
<p style="WORD-BREAK: break-all"><span lang=EN-US style="BACKGROUND: #efefef"><br><font face=宋体>MasterPage.ascx</font></span></p><img src ="http://www.cnblogs.com/ekun008/aggbug/415952.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>CommunityServer实例分析</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415950.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 08:03:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415950.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415950.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415950.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415950.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415950.html</trackback:ping><description><![CDATA[&nbsp;
<p align=left><b><span><a href="http://blog.joycode.com/dotey/archive/2005/08/27/62586.aspx"><span>CommunityServer</span><span><span>实例分析</span></span><span>——</span><span><span>注册新用户</span></span><span>(1)</span></a> </span></b></p>
<p align=left><span>对于类似于</span><span>CommunityServer</span><span>（简称</span><span>CS</span><span>）这样如此庞大的系统，很多朋友苦于无法入手，根据我对</span><span>CS</span><span>研究的一点经验，感觉从具体实例入手是最简单直接的。因此，我首先以注册新用户这个实例来向大家一步步揭开</span><span>CS</span><span>的神秘面纱。</span></p>
<p align=left><span>1. </span><span>准备工作</span></p>
<p align=left><span>本文以</span><span>CCS</span><span>（</span><span>China Community Server</span><span>，基于</span><span>CS</span><span>二次开发）为例，下载地址：</span><span> <span><a href="http://www.communityserver.cn/builds"><span>http://www.communityserver.cn/builds</span></a></span></span><span>，在压缩包里面有完整的源码和安装说明。</span></p>
<p align=left><span>1.1 </span><span>安装</span><span>CCS<br></span><span>按照安装说明安装好</span><span>CCS</span><span>（如果安装过程中有问题可以到</span><span><a href="http://www.communityserver.cn/"><span>http://www.communityserver.cn</span></a></span><span>上提问），本文以</span><span>CCS</span><span>安装在</span><span><a href="http://localhost/ccs"><span>http://localhost/ccs</span></a></span><span>为例。</span></p>
<p align=left><span>1.2 </span><span>打开源码</span><span><br></span><span>压缩包解压后，在</span><span>src</span><span>目录下就是所有的源码，先确认已经将</span><span><a href="http://localhost/ccs"><span>http://localhost/ccs</span></a></span><span>这个虚拟目录指向了</span><span>src\web</span><span>目录（如果您使用的是其它虚拟目录，请事先用文本编辑器修改</span><span>src\Community Server.sln</span><span>和</span><span>src\web\CommunityServerWeb.csproj.webinfo</span><span>其中的</span><span><a href="http://localhost/ccs"><span>http://localhost/ccs</span></a></span><span>为您的虚拟目录地址），不出意外，就可以用</span><span>VS2003</span><span>打开</span><span>src\Community Server.sln</span><span>了。</span></p>
<p align=left><span>1.3. </span><span>页面效果</span><span><br></span><span>通过</span><span><a href="http://localhost/ccs/User/CreateUser.aspx"><span>http://localhost/ccs/User/CreateUser.aspx</span></a></span><span>可以访问注册页面，在注册页面，用户可以输入注册的基本信息，例如登录帐号、昵称、</span><span>Email</span><span>、密码等。在点击提交按钮后首先会对提交数据的合法性校验，例如：登录帐户是否为空、</span><span>Email</span><span>是否合法、两次输入密码是否一致等。数据合法性校验通过后，要检测是否已经存在相同的登录帐户、昵称和</span><span>Email</span><span>，最后就是将注册的数据提交到数据库，并提示用户已经注册成功。</span></p>
<p align=left><span>3. </span><span>技术分析</span></p>
<p align=left><span>3.1 </span><span>分析页面源码</span><span><br></span><span>在</span><span>VS2003</span><span>中，在</span><span>CommunityServerWeb</span><span>项目中，展开</span><span>User</span><span>目录，打开</span><span>CreateUser.aspx</span><span>文件，切换到</span><span>HTML</span><span>视图，代码如下：</span><span><br>&lt;%@ Page SmartNavigation="False" Language="C#"&nbsp; enableViewState = "false" %&gt;<br>&lt;%@ Register TagPrefix="CS" Namespace="CommunityServer.Controls" Assembly="CommunityServer.Controls" %&gt;<br>&lt;%@ Register TagPrefix="CSD" Namespace="CommunityServer.Discussions.Controls" Assembly="CommunityServer.Discussions" %&gt;<br>&lt;%@ Import Namespace="CommunityServer.Galleries.Components" %&gt;<br>&lt;%@ Import Namespace="CommunityServer.Blogs.Components" %&gt;<br>&lt;%@ Import Namespace="CommunityServer.Components" %&gt;</span></p>
<p align=left><span>&lt;CS:ContentContainer runat="server" id="MPContainer" ThemeMasterFile = "ForumMaster.ascx" &gt;<br>&nbsp;&nbsp;&nbsp; &lt;CS:Content id="BodyContentRegion" runat="server"&gt;<br>&nbsp;&nbsp;&lt;CS:CreateUser runat="server" /&gt;<br>&nbsp;&lt;/CS:Content&gt;<br>&lt;/CS:ContentContainer&gt;</span></p>
<p align=left><span>3.2 </span><span>自定义控件</span><span><br></span><span>没有我们熟悉的文本输入控件等，只有几个自定义控件标记，如果有</span><span>Asp.Net</span><span>的自定义控件基础知识，那么应该可以想到，这里用的是自定义控件。顺便温习一下</span><span>Asp.Net</span><span>自定义控件，首先，对于</span><span>CS:ContentContainer</span><span>标签，根据标签中的</span><span>CS</span><span>前缀，我们在页首的申明上找到</span><span>TagPrefix="CS"</span><span>的</span><span>Register</span><span>：</span><span><br>&lt;%@ Register TagPrefix="CS" Namespace="CommunityServer.Controls" Assembly="CommunityServer.Controls" %&gt;<br></span><span>根据其中的</span><span>Namespace</span><span>属性的值和</span><span>Assembly</span><span>属性的值我们可以知道，这里的</span><span>CS:ContentContainer</span><span>标签对应的源码就是在</span><span>CommunityServer.Controls.dll</span><span>中的</span><span>CommunityServer.Controls.ContentContainer</span><span>类。</span><span>CommunityServer.Controls.dll</span><span>实际上就是由解决方案中的</span><span>CommunityServerControls</span><span>项目生成的。</span></p>
<p align=left><span>对于</span><span>CS:ContentContainer</span><span>和</span><span>CS:Content</span><span>是</span><span>CS</span><span>中用的模版控件，其实在</span><span>Asp.Net2.0</span><span>中已经内置了这种模版控件。</span><span>CS</span><span>在这里是用的一个第三方的模版控件：</span><span>MetaBuilders.WebControls.MasterPages.dll</span><span>，限于篇幅，在这里我就不做详细介绍。还是看看我们今天的主角：</span><span><br>&lt;CS:CreateUser runat="server" /&gt;<br></span><span>根据上面的知识，我们可以直接从</span><span>CommunityServerControls</span><span>项目中找到</span><span>CommunityServer.Controls.CreateUser</span><span>类（一个小技巧就是在</span><span>VS2003</span><span>中切换到类视图，可以很方便找到该类对应的</span><span>.cs</span><span>文件），位于</span><span>User</span><span>目录下的</span><span>CreateUser.cs</span><span>文件。</span></p>
<p align=left><span>3.3 TemplatedWebControl<br></span><span>打开源码（</span><span>public class CreateUser : SecureTemplatedWebControl</span><span>），可以知道</span><span>CreateUser</span><span>继承自</span><span>SecureTemplatedWebControl</span><span>类，那我们先看看</span><span>SecureTemplatedWebControl</span><span>类，</span><span>SecureTemplatedWebControl</span><span>类很简单，就是检查一下是不是需要使用</span><span>Https</span><span>连接，</span><span>SecureTemplatedWebControl</span><span>类又是继承自</span><span>TemplatedWebControl</span><span>类。其实在</span><span>CS</span><span>中，大部分类似于注册页面这样的控件都是继承自</span><span>TemplatedWebControl</span><span>，我们先来分析一下</span><span>TemplatedWebControl</span><span>的作用。</span>&nbsp;</p>
<p style="WORD-BREAK: break-all"><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">CommunityServer论坛首页在线人员显示过程<br>1</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">Web</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>项目下的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">default.aspx</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>文件调用自定义控件</font></span><strong><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体">ForumGroupView</span></strong><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"> (</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>代码：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">default.aspx</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>中的</font></span><u><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">&lt;Forums:ForumGroupView runat="server" /&gt;</span></u><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">&nbsp; )<br>2</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、自定义控件</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">ForumGroupView</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>最终通过</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">Skin \ASP.NET Forums\Web\Themes\default\Skins\View-ForumGroupView.ascx</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>来进行</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">UI</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>层的数据显示</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">;<br>3</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">View-ForumGroupView.ascx</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>通过用户自定义控件</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">&lt;Forums:WhoIsOnline runat="server" /&gt;</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>显示在线人员。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br>4</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">WhoIsOnline </span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>的源码在：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">\ASP.NET Forums\Controls\WhoIsOnline.cs<br>5</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">4</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>中的控件里，调用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">Components.Users.GetUsersOnline</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>方法取得在线人员的数据</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><br>6</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">Components.Users.GetUsersOnline</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>最终调用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">ForumsDataProvider</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>中的抽象方法</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">WhoIsOnline<br>7</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">SqlDataProvider</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">WhoIsOnline</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>方法最终调用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">SP</span><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana">forums_Users_Online</span><font face=宋体><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">来取得数据。</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"><o:p></o:p></span></font></p>
<p><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">这是论坛在线人员的一个显示过程。其他的数据的显示基本也是这么个思路。</span></p><img src ="http://www.cnblogs.com/ekun008/aggbug/415950.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>CommunityServer布局</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415947.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 08:02:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415947.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415947.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415947.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415947.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>如何修改</span><span>CCS</span><span>的页面布局</span><span> </span><span>相信很多人觉得比较麻烦</span><span><br></span><span>这里就来看看</span><span>CCS</span><span>的首页有些什么</span><span><br><br>1</span><span>、加载默认首页布局</span><span><br>&lt;CS:ContentContainer runat="server" id="MPContainer"&gt;<br></span><span>文件位置：</span><span>CommunityServerControls\ContentContainer.cs</span><span>该类继承于</span><span>MetaBuilders.WebControls.MasterPages.ContentContainer<br><br></span><span>用来加载</span><span>MasterPage(</span><span>主页布局</span><span>)</span><span>的实体类</span><span> <br></span><span>首先会访问当前设定的样式风格的</span><span>(</span><span>主页控件</span><span>) </span><span>默认为</span><span>Matser.ascx<br></span><span>如果不存在</span><span>~ </span><span>则会进一步访问默认风格的主页控件</span><span>~ </span><span>默认风格为</span><span>Default<br><br></span><span>在具体运行过程中。它首先去加载</span><span> ~/Themes/</span><span>当前用户选择的风格名称</span><span>/Masters/Master.ascx<br></span><span>如果该文件不存在</span><span>~ </span><span>则会跑去加载</span><span>~/Themes/Default/Masters/Master.ascx<br></span><span>如果也不在</span><span>~ </span><span>那就啥都不加载</span><span>~<br>&nbsp;</span><span>所以当你设定某个风格后</span><span> <br></span><span>你又不小心把这个风格的文件夹删除了或者这个风格除了文件夹啥都没有</span><span><br></span><span>首页依然还会有内容输出</span><span>~ </span><span>正式因为他们默认加载的</span><span>~/Themes/Default/Masters/Master.ascx<br></span><span>但是由于你当前风格不是</span><span>Default</span><span>所以仅能显示页面布局</span><span> </span><span>而不懈怠</span><span>Default</span><span>的</span><span>CCS</span><span>样式控制</span><span><br></span><span>如果基于默认布局做新皮肤</span><span>~ </span><span>可以新建一种风格的文件夹</span><span> </span><span>然后仅仅添加需要的样式控制和图片就可以了</span><span><br><br></span><span>关于</span><span>&lt;CS:ContentContainer runat="server" id="MPContainer"&gt;</span><span>的内部</span><span><br>&nbsp;public class Region : MetaBuilders.WebControls.MasterPages.Region{}<br>&nbsp;public class Content : MetaBuilders.WebControls.MasterPages.Content{}<br>&nbsp;public class Form : MetaBuilders.WebControls.MasterPages.NoBugForm {}<br></span><span>说明了</span><span>Region&nbsp; Content&nbsp; Form&nbsp; </span><span>均是继承</span><span>MetaBuilders</span><span>公司的</span><span>MasterPages</span><span>控件的部分</span><span><br></span><span>大家可以去</span><span><a href="http://www.metabuilders.com/Tools/MasterPages.aspx">http://www.metabuilders.com/Tools/MasterPages.aspx</a></span><span>下载控件来做研究</span><span><br></span><span>该控件大致分为</span><span>4</span><span>个类</span><span><br>(1)Content: This control contains the content for a particular region <br></span><span>此类控件包含真实内容</span><span> <br>(2)ContentContainer: This control serves two distincts purposes: - it marks the location where the Master Page will be inserted into the Page - it contains the various Content sections that will be matched to the Master Page's Region controls (based on their ID's). <br></span><span>此控件有两个意图</span><span>: <br>&#183;</span><span>作为一个定位标志，标识</span><span>Master Page</span><span>将被插入到页中；</span><span> <br>&#183;</span><span>与</span><span>Region Controls</span><span>相匹配</span><span> <br>(3)NoBugForm: A server form that does not cause a problem by being inside a master page or other naming container. <br></span><span>无错</span><span>form</span><span>。可以放心使用</span><span> <br>(4)Region: The control marks a place holder for content in a master page <br></span><span>占位控件</span><span> <br><br>2</span><span>加载文件和基本设置</span><span><br>3.1</span><span>加载</span><span>js</span><span>文件</span><span><br>&lt;CS:Script Src = "Utility/UpdatePosts.js" runat = "server" /&gt;<br></span><span>文件位于：</span><span>CommunityServerControls/Script .cs<br></span><span>文件继承于</span><span>LiteralControl </span><span>表示一个</span><span>html</span><span>元素</span><span><br></span><span>他会通过</span><span>Src</span><span>属性来定义</span><span>js</span><span>文件</span><span> </span><span>并输出</span><span>&lt;script src=\"{0}/{1}\" type=\"text/javascript\"&gt;&lt;/script&gt;</span><span>这样的</span><span>js</span><span>引用</span><span>html</span><span>语句</span><span><br></span><span>如果</span><span>Src</span><span>属性为空</span><span> </span><span>则默认加载</span><span>Utility/global.js</span><span>全局</span><span>js</span><span>文件</span><span><br><br></span><span>默认超链接方式设置</span><span><br>&lt;cs:Base Target="_top" runat="server"/&gt;<br></span><span>转换输出</span><span>&lt;base target='_top'/&gt;&nbsp; </span><span>这样的标签</span><span><br><br><br><br>3</span><span>加载自定义的皮肤控件</span><span><br><br></span><span>有不少包含了皮肤功能的控件均继承于</span><span><br>SecureTemplatedWebControl</span><span>或者</span><span>TemplatedWebControl.cs</span><span>两个控件</span><span><br>SecureTemplatedWebControl</span><span>继承于</span><span>TemplatedWebControl</span><span>而</span><span>TemplatedWebControl</span><span>又继承于</span><span>WebControl, INamingContainer <br>TemplatedWebControl</span><span>控件会通过</span><span>SkinName</span><span>属性加载当前风格下的皮肤如果不存在则会加载默认布局的皮肤文件</span><span><br>SecureTemplatedWebControl</span><span>除了具备</span><span>TemplatedWebControl</span><span>的功能外还有检验当前</span><span>url</span><span>的功能用来判断当前访问是否一个基于本站的访问</span><span><br></span><span>在每个皮肤控件对应的类中我们可以通过重构</span><span>CreateChildControls</span><span>方法对该控件进行初始化的设置重构</span><span>AttachChildControls</span><span>方法</span><span><br></span><span>来对皮肤上的控件对应的变量事件进行设定</span><span><br></span><span>比如首页上的</span><span>&lt;CS:Login SkinName="Skin-LoginSmall.ascx" runat="server" /&gt;<br></span><span>会去加载</span><span>Skin-LoginSmall.ascx</span><span>的布局</span><span> <br></span><span>在</span><span>CommunityServerControls\Login.cs</span><span>里面我们可以看到该控件的代码</span><span><br><br></span></p><img src ="http://www.cnblogs.com/ekun008/aggbug/415947.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server系列之七：快速找到需要修改的文件[技巧] </title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415944.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:59:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415944.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415944.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415944.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415944.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CS</span><span>中的模板几乎遍布整个应用，当我们利用</span><span>SDK</span><span>做二次开发的时候，我们需要很长的熟悉过程，而这个过程大部分时间被烦躁的检索所占据，检索模板、检索类文件，检索类文件我们可以使用类视图快速定位到类所在的文件。然而确定需要修改的模板或需要修改的类却不是那么方便的事情。</span><span>CS</span><span>在这里为我们做了一些工作，但并不是特别方便，按照下面的方法即可直观的找到需要修改的文件。</span>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>在</span><span>CS</span><span>中，如果是调试项目，在生成的</span><span>HTML</span><span>代码里会嵌入页面所使用的模板的类名及模板文件路径，但它是以</span><span>HTML</span><span>注释的方式体现出来的，我们要确定某个模块的信息还需要查看源文件并繁琐的检索，这里我们只需要稍微改造一下便能让这些注释更直观一眼就可以快速了解模块的相关信息。</span></p>
<p align=left><span>让我们打开</span><span>\src\Controls\BaseClasses\TemplatedWebControl.cs</span><span>和</span><span>\src\Controls\BaseClasses\SkinnedWebControl.cs</span><span>这两个文件，这两个类是系统模板控件的基类，它们都有这样一个方法：</span></p>
<p align=left><span>[System.Diagnostics.Conditional("DEBUG")]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>protected</span>&nbsp;<span>void</span><span>&nbsp;SourceMarker(</span><span>bool</span><span>&nbsp;isStart,&nbsp;HtmlTextWriter&nbsp;writer)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>if</span><span>(isStart)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.WriteLine("&lt;!--&nbsp;Start:&nbsp;{0}&nbsp;--&gt;",&nbsp;</span><span>this</span><span>.GetType());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>if</span><span>(System.IO.File.Exists(HttpContext.Current.Server.MapPath(</span><span>this</span><span>.SkinPath)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.WriteLine("&lt;!--&nbsp;Skin&nbsp;Path:&nbsp;{0}&nbsp;--&gt;",&nbsp;</span><span>this</span><span>.SkinPath);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>else</span>&nbsp;<span>if</span><span>(SkinTemplate&nbsp;!=&nbsp;</span><span>null</span><span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.WriteLine("&lt;!--&nbsp;Inline&nbsp;Skin:&nbsp;{0}&nbsp;--&gt;",&nbsp;</span><span>true</span><span>);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>else</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.WriteLine("&lt;!--&nbsp;Skin&nbsp;Path:&nbsp;{0}&nbsp;--&gt;",&nbsp;</span><span>this</span><span>.DefaultSkinPath);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>else</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.WriteLine("&lt;!--&nbsp;End:&nbsp;{0}&nbsp;--&gt;",&nbsp;</span><span>this</span><span>.GetType());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></p>
<p align=left><span><br></span><span>这个方法的目的即是，在</span><span>Debug</span><span>编译环境下，控件输出的时候记录控件所属于的类名和控件所使用的</span><span>skin</span><span>路径，方便客户端通过</span><span>HTML</span><span>代码找到相应的代码进行修改，然而这里使用的是</span><span>HTML</span><span>注释，我们在查找的时候很不方便，那么我们把它转换成</span><span>HTML</span><span>隐藏的标签并在需要的时候让其制动显示在浏览器上不是更方便吗，这就进行改造，修改此方法如下：</span></p>
<p align=left><span><span>SourceMarker</span><br></span><span>[System.Diagnostics.Conditional("DEBUG")]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>protected</span>&nbsp;<span>void</span><span>&nbsp;SourceMarker(</span><span>bool</span><span>&nbsp;isStart,&nbsp;HtmlTextWriter&nbsp;writer)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span> </span><span>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>//Edit&nbsp;by&nbsp;lf<br></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>if</span><span>(isStart)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span> </span><span>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.WriteLine("&lt;span&nbsp;style='display:none;background-color:infobackground;'&nbsp;id='classInfo'&nbsp;name='classInfo'&gt;&nbsp;Start:&nbsp;{0}&nbsp;&lt;/span&gt;",&nbsp;</span><span>this</span><span>.GetType());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>string</span><span>&nbsp;skinPath&nbsp;=&nbsp;Globals.GetSkinPath()&nbsp;+&nbsp;"/Skins/"&nbsp;+&nbsp;SkinFilename.TrimStart('/');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>if</span><span>(System.IO.File.Exists(skinPath))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.WriteLine("&lt;span&nbsp;style='display:none;background-color:infobackground;'&nbsp;id='skinInfo'&nbsp;name='skinInfo'&gt;&nbsp;Skin&nbsp;Path:&nbsp;{0}&nbsp;&lt;/span&gt;",&nbsp;skinPath);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>else</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.WriteLine("&lt;span&nbsp;style='display:none;background-color:infobackground;'&nbsp;id='skinInfo'&nbsp;name='skinInfo'&gt;&nbsp;Skin&nbsp;Path:&nbsp;{0}&nbsp;&lt;/span&gt;",&nbsp;Globals.ApplicationPath&nbsp;+&nbsp;"/Themes/default/Skins/"&nbsp;+&nbsp;SkinFilename.TrimStart('/'));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>else</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.WriteLine("&lt;span&nbsp;style='display:none;background-color:infobackground;'&nbsp;id='classInfo'&nbsp;name='classInfo'&gt;&nbsp;End:&nbsp;{0}&nbsp;&lt;/span&gt;",&nbsp;</span><span>this</span><span>.GetType());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span></p>
<p align=left><span><br></span><span>聪明的你一定看出来了，这里其实很简单，只是把相应的</span><span>HTML</span><span>注释改为隐藏的</span><span>span</span><span>标签，对应的两个类文件都按照这样的方式进行修改即可。</span><span><br></span><span>修改了上述两个文件后还需要修改另外一个每页都需要的文件，这里我们选择</span><span>\src\Controls\Utility\Footer.cs</span><span>这个文件，因为这个脚标文件在每个页面都用得着，我们可以在这里设置一个开关让其通过点击自动显示和隐藏上面所修改的标签。</span><span><br></span><span>在</span><span>Footer</span><span>这个类的</span><span>Render</span><span>方法里把相应的</span><span>writer.Writer</span><span>方法改为如下所示样式，这样在</span><span>Debug</span><span>的时候就可以点击页脚的</span><span>Skin</span><span>、</span><span>InSkin</span><span>、</span><span>Class</span><span>三个连接来显示相应的</span><span>Debug</span><span>标签了。</span></p>
<p align=left><span><span>Footer</span><br></span><span>#if</span><span>&nbsp;DEBUG<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.Write("&amp;copy;&nbsp;Copyright&nbsp;2006&nbsp;XXXXXX&nbsp;Corporation.&nbsp;All&nbsp;Rights&nbsp;Reserved.&nbsp;&lt;span&nbsp;onclick='showDebugObj(\"skinInfo\")'&gt;Skin&lt;/span&gt;&nbsp;&lt;span&nbsp;onclick='showDebugObj(\"inSkinInfo\")'&gt;InSkin&lt;/span&gt;&nbsp;&lt;span&nbsp;onclick='showDebugObj(\"classInfo\")'&gt;Class&lt;/span&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.Write(@"&lt;script&nbsp;language='javascript'&gt;<br>function&nbsp;showDebugObj(n){<br>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;objs&nbsp;=&nbsp;document.getElementsByName(n);<br>&nbsp;&nbsp;&nbsp;&nbsp;if(objs.length&nbsp;==&nbsp;0)&nbsp;alert('Not&nbsp;Found:'&nbsp;+&nbsp;n);<br>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;objs.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(objs[i].style.display&nbsp;==&nbsp;'none')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objs[i].style.display&nbsp;=&nbsp;'';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objs[i].style.display&nbsp;=&nbsp;'none';&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br>&lt;/script&gt;<br>");<br></span><span>#else</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.Write("&amp;copy;&nbsp;Copyright&nbsp;2006&nbsp;XXXXXX&nbsp;Corporation.&nbsp;All&nbsp;Rights&nbsp;Reserved.");<br></span><span>#endif</span></p>
<p><span><br></span><span>通过上面的改造我们可以在页脚看到三个标签：</span><span>Skin</span><span>、</span><span>InSkin</span><span>、</span><span>Class</span><span>当我们点击这三个标签的时候页面就会显示相应的控件的类名，</span><span>Skin</span><span>路径等信息，这在二次开发</span><span>CS</span><span>的过程中可以非常快速的定位到想修改的资源，节约大量的检索时间。希望对您有所帮助。</span></p><img src ="http://www.cnblogs.com/ekun008/aggbug/415944.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server系列之六：CS2中的关键词及数据结构 </title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415942.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:58:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415942.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415942.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415942.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415942.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>写这篇帖子的目的在于介绍整个</span><span>CS</span><span>中的关键点，以我的经验来看着重应该了解的地方的一些罗列。这对初次接触</span><span>CS</span><span>的朋友来说我想是有帮助的。</span>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>模块：在</span><span>CS2</span><span>中最主要的官方模块有（论坛</span><span>Forums</span><span>、博客</span><span>Blogs</span><span>、相册</span><span>Galleries</span><span>）现在只讨论主要的这三个模块，下面的文字也围绕着这三个模块进行讨论。这三个模块具有一定的共同点，</span><span>CS</span><span>把这三个模块抽象到一起了，这是</span><span>CS</span><span>的核心所在。</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>名称</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><b><span>说明</span></b></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><b><span>主要数据表</span></b></p>
            </td>
            <td vAlign=top width=118>
            <p align=left><b><span>备注</span></b></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>Section</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><span>基本板块：论坛里表现为论坛的板块，博客里表现为每个人的博客，相册表现为每个人的相册。</span></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><span>cs_Sections</span><span>主要保存模块数据包括模块的组别名称所有者等等。</span></p>
            <p align=left>&nbsp;</p>
            </td>
            <td vAlign=top width=118>
            <p align=left><span>CS</span><span>中很重要的一个概念，几乎所有的逻辑都与此相关。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>Group</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><span>组别，在</span><span>CS</span><span>中的几乎所有标准模块都依靠</span><span>Group</span><span>进行管理，论坛的</span><span>Group</span><span>表现为对论坛板块的分类，博客表现为博客的群组，相册也表现为群组，总之，这些模块都要依赖此进行管理</span></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><span>cs_Groups</span><span>，主要保存分组信息</span></p>
            </td>
            <td vAlign=top width=118>
            <p align=left><span>所有</span><span>Section</span><span>都依赖此进行组合，就算一个</span><span>Section</span><span>也需要一个默认</span><span>Group</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>Settings</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><span>几乎每张表都有</span><span>SettingsID</span><span>的字段用来区分不同的应用，因为</span><span>CS</span><span>一个程序可以同时分成多个应用而互不干扰，每个存储过程，每张表都有相应的对</span><span>Settings</span><span>的筛选</span></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><span>cs_SiteSettings</span><span>，站点的基本设置以</span><span>XML</span><span>的形式保存在此</span></p>
            <p align=left><span>cs_Sites</span><span>站点信息，可设置多个站点</span></p>
            <p align=left><span>cs_SiteMappings</span><span>站点和</span><span>Settings</span><span>的对应关系</span></p>
            </td>
            <td vAlign=top width=118>
            <p align=left><span>这个概念同样重要，现在很多程序都设计成这样的模式，一句话，尽量灵活，</span><span>CS</span><span>的灵活性非常到位。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>Thread</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><span>线程，这个感念比较抽象，但在</span><span>CS</span><span>中却是很重要的，这个意思可以简单的认为是一个主题，并包含这个主题所有的相关信息，比如回复数，得分等等</span></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><span>cs_Threads</span><span>，保存每个主题信息，</span></p>
            <p align=left><span>cs_ThreadsRead</span><span>，阅读者对每个主题的阅读情况</span></p>
            </td>
            <td vAlign=top width=118>
            <p align=left><span>在每发表一篇主题（非回复）就在此表添加一条记录</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>Post</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><span>表示包括主题在内的所有用户发表的帖子，无论是回复还是投票或主题统统要在此记录</span></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><span>cs_Posts</span><span>，保存</span><span>Post</span><span>的主要数据表其他与</span><span>Post</span><span>相关的表还有很多</span></p>
            </td>
            <td vAlign=top width=118>
            <p align=left><span>最重要的用户数据表</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>Category</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><span>分类，帖子分类，此分类是针对</span><span>Section</span><span>进行的，每个</span><span>Section</span><span>都可以有自己的分类，在</span><span>CS</span><span>中又叫</span><span>TAG</span><span>，可以适当改造一下就变为时下流行的</span><span>TAG</span><span>功能</span></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><span>cs_Post_Categories</span><span>＆</span><span>cs_Post_Categories_Parents</span><span>保存每个</span><span>Section</span><span>的分类统计</span></p>
            <p align=left><span>cs_Posts_InCategories</span><span>保存每篇帖子对应的分类</span></p>
            </td>
            <td vAlign=top width=118>
            <p align=left><span>CS</span><span>中只有对每个</span><span>Section</span><span>的分类管理，而缺少对整个网站的分类，我们可以按照</span><span>Category</span><span>模块进行扩展</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>Permission</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><span>授权，与</span><span>Role</span><span>角色挂钩，此针对各</span><span>Section</span><span>设置各种角色的对应权限，也就是权限矩阵</span></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><span>cs_ProductPermissions</span><span>在此保存针对每种应用模块的默认权限。</span><span>cs_SectionPermissions</span><span>针对各种</span><span>Section</span><span>的个性权限</span></p>
            </td>
            <td vAlign=top width=118>
            <p align=left><span>此处缺少对</span><span>Group</span><span>的默认权限，不过根据源代码扩充为支持</span><span>Group</span><span>默认权限的功能也很容易</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>Membership</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><span>建立在微软的</span><span>Membership</span><span>组件下的基于角色的用户管理系统，使用此功能对设置权限和对用户相关功能的扩充都非常方便</span></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><span>以</span><span>asp_net</span><span>打头的数据表是</span><span>Membership</span><span>所需要的，另外</span><span>cs</span><span>中扩展了</span><span>cs_Users</span><span>及</span><span>cs_UserProfile</span><span>等数据表</span></p>
            </td>
            <td vAlign=top width=118>
            <p align=left><span>CS</span><span>完全依靠</span><span>Membership</span><span>达键的用户基础管理系统，很多地方值得好好研究</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p align=left><b><span>Job</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p align=left><span>B/S</span><span>程序需要定时处理的功能，在此称为</span><span>Job</span><span>，我们可以在</span><span>communityserver.config</span><span>文件中看到那些</span><span>Job</span><span>的配置，运行这些</span><span>Job</span><span>都是在单独的线程中执行，与用户交互无关</span></p>
            </td>
            <td vAlign=top width=172>
            <p align=left><span>无</span></p>
            </td>
            <td vAlign=top width=118>
            <p align=left><span>可以通过后台管理的</span><span>Jobs Report</span><span>查看</span><span>Job</span><span>的情况，也可通过查看</span><span>Exception Report</span><span>查看</span><span>Jobs</span><span>有无运行异常</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p align=left><span>熟悉这些关键词及模块对</span><span>CS</span><span>的掌握至关重要，希望通过此篇介绍能帮助你更快的了解</span><span>CS</span><span>的基础。</span></p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/ekun008/aggbug/415942.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server系列之八：CS2中的CSContext </title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415939.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:57:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415939.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415939.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415939.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415939.html</trackback:ping><description><![CDATA[摘要:  由于WEB请求是无状态的，在请求过程中需要保存的共享信息保存在HttpContext中，在Http请求过程中HttpContext始终贯穿整个请求过程，在CS2中相当于对HTTPContext进行了扩展，除了包含HTTPContext中的信息外，CSContext还包含了在CS的整个请求过程中需要共享的自己的数据，如当前请求的用户、Section、Post等等公用数据。 在CS中，一个页面往往涉&nbsp;&nbsp;<a href='http://www.cnblogs.com/ekun008/archive/2006/06/02/415939.html'>阅读全文</a><img src ="http://www.cnblogs.com/ekun008/aggbug/415939.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server系列之四：Ajax在CS2.0中的应用1 </title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415937.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:51:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415937.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415937.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415937.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415937.html</trackback:ping><description><![CDATA[摘要:  Ajax技术在时下很热门，当然在CS2.0中也不例外的运用到了此技术，CS2中没有使用任何第三方Ajax控件，这就给我们提供一个研究Ajax机理的好地方，现介绍一下在CS2中Ajax的一些简单应用，并分析应用的原理。  我想要研究此技术最好的办法就是把代码分离出来放在自己的工程中，重现这些功能，在重现这些功能的时候一定会遇到这样或那样的问题，这恰好是我们应该着重研究的地方，所以让我们先来分离代码&nbsp;&nbsp;<a href='http://www.cnblogs.com/ekun008/archive/2006/06/02/415937.html'>阅读全文</a><img src ="http://www.cnblogs.com/ekun008/aggbug/415937.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server配置对网址中的www信息处理功能分析</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415932.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:46:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415932.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415932.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415932.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415932.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>国外有种习惯，比如你访问</span><span> <span><a href="http://www.****.com/">www.****.com</a> </span></span><span>网站，他会自动跳转到</span><span> ****.com </span><span>。</span><span><br></span><span>在</span><span> Community Server </span><span>中就提供了这种功能，而且这种功能是可选的（可以强制去掉、强制不去掉、不理睬它）。</span><span><br></span><span>默认情况下</span><span> Community Server </span><span>就强制去掉</span><span> www. </span><span>。</span></p>
<p><span>先说如何修改是这个功能</span></p>
<p><span>打开</span><span>Web</span><span>项目，其中的</span><span> communityserver.config </span><span>配置文件。</span><span><br></span><span>在这里我们可以看到下面的配置节：</span></p>
<p><span>&lt;CommunityServer&gt;<br>&lt;Core ......&nbsp; wwwStatus = "Remove" .... /&gt;<br>......<br>&lt;/CommunityServer&gt;</span></p>
<p><span>这里可以有三个设置：</span><span><br>Require&nbsp;&nbsp; </span><span>强制加</span><span> www.<br>Remove&nbsp;&nbsp;</span><span>强制不加</span><span> www.&nbsp; </span><span>这个是默认设置</span><span>&nbsp;<br>Ignore&nbsp;&nbsp;&nbsp;&nbsp; </span><span>忽略这个问题</span></p>
<p><span>只要修改成对应的设置，就自动切换了这个设置。</span></p>
<p><span>下面我们看它是如何实现这个功能的：</span></p>
<p><span>Community Server 2.0 </span><span>中使用了</span><span> HttpModules </span><span>来处理这个功能：</span><span>web.config</span><span>中，我们可以看到</span><span> httpModules </span><span>的配置如下：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; &lt;httpModules&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name="CommunityServer" type="CommunityServer.CSHttpModule, CommunityServer.Components" /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/httpModules&gt;<br>..........</span></p>
<p><span>CSHttpModule </span><span>类在</span><span> CommunityServer.Components </span><span>项目的</span><span>HttpModule </span><span>目录下的</span><span> CSHttpModule.cs </span><span>文件中</span><span>.</span><span>这个类继承了</span><span> System.Web.IHttpModule </span><span>接口</span></p>
<p><span>System.Web.IHttpModule </span><span>接口要求实现</span><span> </span><span>初始化模块方法，即</span><span> Init </span><span>方法。</span><span><br></span><span>在这个类的初始化方法中，我们可以看到</span><span>,</span><span>我们订约了</span><span>BeginRequest </span><span>事件。</span></p>
<p><span>public void Init(HttpApplication application) <br>{ <br>&nbsp;application.BeginRequest += new EventHandler(this.Application_BeginRequest);<br>&nbsp;......<br>}</span></p>
<p><span>在这个事件的处理函数</span><span> Application_BeginRequest </span><span>中</span><span>,</span><span>如下，我们可以看到，先从</span><span>Community Server </span><span>配置文件中读取出配置（既从</span><span>communityserver.config </span><span>配置文件读取配置）</span><span><br></span><span>然后根据这个配置检查我该如何处理（</span><span>CheckWWWStatus </span><span>函数实现）。</span></p>
<p><span>private void Application_BeginRequest(Object source, EventArgs e) <br>{<br>&nbsp;.......<br>&nbsp;HttpContext context = application.Context;<br>&nbsp;.......<br>&nbsp;CSConfiguration config = CSConfiguration.GetConfig();<br>&nbsp;.......<br>&nbsp;CheckWWWStatus(config,context);<br>&nbsp;.......<br>}</span></p>
<p><span>private void CheckWWWStatus(CSConfiguration config, HttpContext context)<br>{<br>&nbsp;if(config.WWWStatus == WWWStatus.Ignore)<br>&nbsp;&nbsp;return;<br>&nbsp;const string withWWW = "<a href="http://www/">http://www</a>.";<br>&nbsp;const string noWWW = "http://";<br>&nbsp;string rawUrl = context.Request.Url.ToString().ToLower();<br>&nbsp;bool isWWW = rawUrl.StartsWith(withWWW);<br>&nbsp;if(config.WWWStatus == WWWStatus.Remove &amp;&amp; isWWW)<br>&nbsp;{<br>&nbsp;&nbsp;context.Response.Redirect(rawUrl.Replace(withWWW, noWWW));<br>&nbsp;}<br>&nbsp;else if(config.WWWStatus == WWWStatus.Require &amp;&amp; !isWWW)<br>&nbsp;{<br>&nbsp;&nbsp;context.Response.Redirect(rawUrl.Replace(noWWW, withWWW));<br>&nbsp;}<br>}</span></p>
<p><span>代码分析到此结束，</span><span>Community Server 2.0 </span><span>就是通过上述代码实现定制不同的</span><span> www </span><span>处理策略的。</span></p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/ekun008/aggbug/415932.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server架构：博客业务详细分析</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415928.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:45:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415928.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415928.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415928.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415928.html</trackback:ping><description><![CDATA[&nbsp;
<p align=left><span>Community Server</span><span>架构：博客业务详细分析</span></p>
<p align=left><span>如果没有了这一行字，表示我已经在不断的修改中修改完毕，以下是未完成之描述：<span><br><br></span>所有业务功能的分析都是针对<span>SqlDataProvider</span>项目里的<span>WeblogSqlDataProvider.cs</span>里的<span>WeblogSqlDataProvider</span>类<span><br><br>1</span>、进入主页（整个<span>CS</span>的首页）：列出最新的<span>5</span>个<span>Blog</span>，其中最新的<span>2</span>个<span>Blog</span>有简要摘要，<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetWeblogs</span>：获取最新的<span>2</span>个<span>Blog</span>？<span><br>&nbsp;&nbsp;&nbsp; b</span>、<span>GetBlogThreads</span>：获取其余<span>3</span>个<span>Blog</span>的主题<span><br><br>2</span>、进入我的<span>Blog</span>页：列出最新的<span>n</span>（<span>n</span>可以设置）个<span>Blog<br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetBlogThreads</span>：获取主题<span><br>&nbsp;&nbsp;&nbsp; b</span>、<span>GetPostsByMonths</span>：获取每个月的<span>Blog</span>统计数量<span><br>&nbsp;&nbsp;&nbsp; c</span>、<span>GetPostsByMonth</span>：获取当前月的<span>Blog<br><br>3</span>、新随笔：进入<span>Blog</span>编辑窗，编辑完毕之后增加一条<span>Blog</span>记录，并返回至<span>Blog</span>管理列表<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>AddPost</span>：<span>&#8220;</span>发表<span>&#8221;</span>，新增一条<span>Blog</span>的记录<span><br>&nbsp;&nbsp;&nbsp; b</span>、<span>GetBlogThreads</span>：进入列表，读取主题<span><br><br>4</span>、编辑：进入<span>Blog</span>编辑窗，并打开指定的<span>Blog</span>，编辑完毕之后，更新该记录，并返回至<span>Blog</span>管理列表<span><br>&nbsp;&nbsp;&nbsp; a</span>、打开<span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span>、<span>GetWeblogPost</span>：打开准备编辑的<span>Blog<br>&nbsp;&nbsp;&nbsp; b</span>、发表<span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i</span>、<span>GetWeblogPost</span>：获取被编辑的<span>Blog<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii</span>、<span>UpdatePost</span>：更新<span>i</span>步骤中获取的<span>Blog<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iii</span>、<span>GetBlogThreads</span>：进入列表，读取主题<span><br><br>5</span>、删除：弹出窗口确认之后，删除指定<span>Blog</span>记录，并返回至<span>Blog</span>管理列表<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetWeblogPost</span>：获取指定的<span>Blog</span>记录，保证数据库有此记录，避免<span>Cache</span>剩下的影子记录<span><br>&nbsp;&nbsp;&nbsp; b</span>、<span>DeletePost</span>：删除指定的<span>Blog</span>记录<span><br>&nbsp;&nbsp;&nbsp; c</span>、<span>GetBlogThreads</span>：进入列表，读取主题<span><br><br>6</span>、查看：查看指定<span>Blog</span>，包括对该<span>Blog</span>的评论<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetPosts</span>：获取指定的<span>Blog</span>以及对该<span>Blog</span>作出的评论<span><br>&nbsp;&nbsp;&nbsp; b</span>、<span>GetPostsByMonths</span>：获取每个月的<span>Blog</span>统计数量<span><br>&nbsp;&nbsp;&nbsp; c</span>、<span>GetPostsByMonth</span>：获取当前月的<span>Blog<br><br>7</span>、每一个涉及数据库的都会调用如下几个<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetSqlConnection<br>&nbsp;&nbsp;&nbsp; b</span>、<span>ConnectionString<br>&nbsp;&nbsp;&nbsp; c</span>、<span>SettingsIDParameter<br>&nbsp;&nbsp;&nbsp; d</span>、<span>GetSettingsID<br><br>8</span>、每隔一段时间自动运行的（<span>5</span>分钟以内）<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>UpdateRecentContent</span></span></p>
<p align=left>&nbsp;</p>
<p align=left>&nbsp;</p>
<p align=left><span>相册业务分析</span></p>
<p align=left><span>1</span><span>、打开主页<span><br>&nbsp;&nbsp;&nbsp; a</span>、未登录<span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i</span>、<span>GallerySqlDataProvider<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii</span>、<span>GetGalleries<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iii</span>、<span>GetPictures<br>&nbsp;&nbsp;&nbsp; b</span>、登录<span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i</span>、<span>GetPictures<br><br>2</span>、从主页进入相册<span><br>&nbsp;&nbsp;&nbsp; a</span>、登录<span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i</span>、<span>GetPictures<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii</span>、<span>GetPictures<br><br>3</span>、从主页点击最新发布<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetPicture<br>&nbsp;&nbsp;&nbsp; b</span>、<span>GetPictureMetadata<br>&nbsp;&nbsp;&nbsp; c</span>、<span>GetComments<br>&nbsp;&nbsp;&nbsp; d</span>、<span>GetPictureSortOrder<br>&nbsp;&nbsp;&nbsp; e</span>、<span>GetPictureData<br><br>4</span>、进入个人相册<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetPictures6</span>次<span><br>&nbsp;&nbsp;&nbsp; b</span>、<span>GetRandomPostID<br>&nbsp;&nbsp;&nbsp;&nbsp;c</span>、<span>GetPicture<br>&nbsp;&nbsp;&nbsp;&nbsp;d</span>、<span>GetPictureData<br><br>5</span>、<span>Add Picture<br>&nbsp;&nbsp;&nbsp;&nbsp;a</span>、<span>CreatePicture<br>&nbsp;&nbsp;&nbsp;&nbsp;b</span>、<span>CreatePictureData<br>&nbsp;&nbsp;&nbsp;&nbsp;c</span>、<span>UpdatePictureCategories<br>&nbsp;&nbsp;&nbsp;&nbsp;d</span>、<span>GetGalleries<br>&nbsp;&nbsp;&nbsp;&nbsp;e</span>、<span>GetPictures<br>&nbsp;&nbsp;&nbsp;&nbsp;f</span>、<span>GetGalleries<br>&nbsp;&nbsp;&nbsp;&nbsp;g</span>、<span>GetPictureData<br><br>6</span>、新建分类<span><br>&nbsp;&nbsp;&nbsp;&nbsp;a</span>、<span>GetRandomPostID<br>&nbsp;&nbsp;&nbsp;&nbsp;b</span>、<span>GetPicture<br><br>7</span>、打开个人分类相册<span><br>&nbsp;&nbsp;&nbsp;&nbsp;a</span>、<span>GetPictures<br>&nbsp;&nbsp;&nbsp; b</span>、<span>GetRandomPostID<br>&nbsp;&nbsp;&nbsp; <br>8</span>、增加子分类<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetRandomPostID<br>&nbsp;&nbsp;&nbsp; b</span>、<span>GetPicture<br><br>9</span>、删除相片<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetPicture<br>&nbsp;&nbsp;&nbsp; b</span>、<span>DeletePictureData<br>&nbsp;&nbsp;&nbsp; c</span>、<span>DeletePicture<br>&nbsp;&nbsp;&nbsp; d</span>、<span>GetGalleries</span></span></p>
<p align=left>&nbsp;</p>
<p align=left>&nbsp;</p>
<p align=left><span>论坛业务分析：</span></p>
<p align=left><span>1</span><span>、发表新贴<span><br>&nbsp;&nbsp;&nbsp; a</span>、进入编辑状态<span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i</span>、<span>GetForums<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii</span>、<span>GetForums<br>&nbsp;&nbsp;&nbsp; b</span>、发表<span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i</span>、<span>GetForums<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii</span>、<span>AddPost<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iii</span>、<span>GetForumIDByPostID<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iv</span>、<span>GetForums<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v</span>、<span>GetForums<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vi</span>、<span>GetForumIDByPostID<br><br>2</span>、快速回贴<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetForums<br>&nbsp;&nbsp;&nbsp; b</span>、<span>AddPost<br>&nbsp;&nbsp;&nbsp; c</span>、<span>GetForumIDByPostID<br><br>3</span>、打开帖子<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetForumIDByPostID<br><br>4</span>、修改<span><br>&nbsp;&nbsp;&nbsp; a</span>、<span>GetForumIDByPostID</span></span></p>
<p align=left>&nbsp;</p>
<p align=left>&nbsp;</p>
<table cellSpacing=0 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td>
            <p align=left><span>论坛：</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.Discussions</span></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=left><span>博客：</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.Blogs</span></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=left><span>相册：</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.Galleries</span></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=left><span>留言板：</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.GuestBooks</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p align=left>&nbsp;</p>
<table cellSpacing=0 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td>
            <p align=left><span>公共项目：</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.Components</span></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=left>&nbsp;</p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.Controls</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p align=left>&nbsp;</p>
<table cellSpacing=0 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td>
            <p align=left><span>数据：</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.SqlDataProvider</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p align=left>&nbsp;</p>
<table cellSpacing=0 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td>
            <p align=left><span>版块组、博客分组</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.Components.Group</span></p>
            </td>
            <td>
            <p align=left><span>cs_Groups</span></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=left><span>版块、博客</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.Components.Section</span></p>
            </td>
            <td>
            <p align=left><span>cs_Sections</span></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=left><span>主题、线程</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.Components.Thread</span></p>
            </td>
            <td>
            <p align=left><span>cs_Threads</span></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=left><span>帖子、随笔或者文章</span></p>
            </td>
            <td>
            <p align=left><span>CommuntyServer.Components.Post</span></p>
            </td>
            <td>
            <p align=left><span>cs_Posts</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/ekun008/aggbug/415928.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>如何在 Microsoft Visual Studio 2005 中直接Debug Community Server 2.0 的代码 与 Visual Studio 2005 Web Application Projects</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415927.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:44:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415927.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415927.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415927.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415927.html</trackback:ping><description><![CDATA[&nbsp;
<p align=left><b><span>如何在</span></b><b><span> Microsoft Visual Studio 2005 </span></b><b><span>中直接</span></b><b><span>Debug Community Server 2.0 </span></b><b><span>的代码</span></b><b><span> </span></b><b><span>与</span></b><b><span> Visual Studio 2005 Web Application Projects </span></b></p>
<p><span>由于</span><span> Community Server 2.0 </span><span>的</span><span>Web</span><span>项目建立成了</span><span> Library </span><span>的项目</span><span>.</span><span>他的调试就是一个麻烦</span><span>.</span></p>
<p><span>附加到进程的调试方式请看下面</span><span>Blog,</span><span>适用于</span><span> VS2003 </span><span>和</span><span> VS2005:<br></span><span>使用这个技术请参看下面</span><span>Blog:</span></p>
<p><span>Community Server 2.0</span><span>中如何调试项目</span><span>?<br><a href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html">http://ugoer.cnblogs.com/archive/2006/02/27/339040.html</a></span></p>
<p><span><br></span><span>另外一个方法就是把</span><span> Library </span><span>项目</span><span> </span><span>变成</span><span> Web </span><span>项目，</span><span><br></span><span>在</span><span> VS2003 </span><span>开发环境下</span><span>,</span><span>使用这个技术请参看下面</span><span>Blog:<br></span><span>调试</span><span>MonoRail</span><span>程序的三种方法</span><span> <br><a href="http://wj.cnblogs.com/archive/2005/08/29/225197.html">http://wj.cnblogs.com/archive/2005/08/29/225197.html</a></span></p>
<p><span>把</span><span>lib</span><span>项目文件转换成</span><span>web</span><span>项目文件</span><span> <br><a href="http://mixiaobo.cnblogs.com/archive/2006/03/11/347828.html">http://mixiaobo.cnblogs.com/archive/2006/03/11/347828.html</a>?<br><br></span><span>在</span><span>VS2003</span><span>中以</span><span>ClassLibrary</span><span>工程的方式管理</span><span>Web</span><span>工程</span><span>. <br><a href="http://hjf1223.cnblogs.com/archive/2006/03/17/352474.html">http://hjf1223.cnblogs.com/archive/2006/03/17/352474.html</a></span></p>
<p><span><br></span><span>其实在</span><span> VS2003 </span><span>开发环境下完全可以不变</span><span> Library </span><span>项目变成</span><span>Web</span><span>项目</span><span>,</span><span>稍加配置就可以调试</span><span>.<br></span><span>具体操作</span><span>:<br></span><span>在项目的调试属性里</span><span>, </span><span>设为通过</span><span>url</span><span>启动</span><span>,</span><span>把</span><span>url</span><span>设为该项目的网址</span><span>.<br></span><span>同时把上面的</span><span>"</span><span>启用</span><span>asp.net</span><span>调试</span><span>"</span><span>设为</span><span>true<br>(</span><span>注意</span><span>,</span><span>这个</span><span> CommunityServerWeb </span><span>项目当然是被部署在</span><span>IIS</span><span>了</span><span>.)</span></p>
<p><span><br></span><span>上面两个</span><span> VS2003 </span><span>下的方法</span><span>,</span><span>不使用于</span><span> VS2005 </span><span>开发环境</span><span>.</span></p>
<p><span>如果想在</span><span>VS2005</span><span>开发环境下使用</span><span>VS2003</span><span>的一些</span><span>WEB</span><span>开发方法</span><span>,</span><span>设置</span><span>,</span><span>可以看微软的这个工具</span><span>:<br><a href="http://msdn.microsoft.com/asp.net/reference/infrastructure/wap/default.aspx">http://msdn.microsoft.com/asp.net/reference/infrastructure/wap/default.aspx</a></span></p>
<p><span>把一个项目从其他项目变成</span><span> WAP </span><span>项目</span><span>,</span><span>你只需要修改对应的　</span><span>csproj </span><span>文件</span></p>
<p><span>把其中的　</span><span>Local</span><span>　变成　</span><span><br>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</span><span>　即可．</span><span><br><br></span><span>这里要解决的在</span><span> Microsoft Visual Studio 2005 </span><span>中直接</span><span>Debug Community Server 2.0 </span><span>的代码，最核心的一步就是做上面提到的项目类型修改，改好了就没问题了。然后在项目配置中，配置一下启动页，一切都</span><span>OK</span><span>了。</span><span><br><br></span><span>详细的步骤请参看</span><span> <span><a href="http://broncosolutions.ca/COMMUNITY/blogs/andrew_renner/archive/2006/04/05/77.aspx">http://broncosolutions.ca/COMMUNITY/blogs/andrew_renner/archive/2006/04/05/77.aspx</a><br><br></span></span><span>为了避免有些人连不上那里的服务器，我下面</span><span>Copy</span><span>过来：</span><span><br><br>Download the source <a href="http://communityserver.com/files/40/releases/default.aspx">http://communityserver.com/files/40/releases/default.aspx</a> <br>Download the latest release of Web Application Projects <a href="http://msdn.microsoft.com/asp.net/reference/infrastructure/wap/default.aspx">http://msdn.microsoft.com/asp.net/reference/infrastructure/wap/default.aspx</a> <br>Download the VS 2005 Update to support Web Application Projects <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8B05EE00-9554-4733-8725-3CA89DD9BFCA&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyId=8B05EE00-9554-4733-8725-3CA89DD9BFCA&amp;displaylang=en</a> <br>Install the VS 2005 Update <br>Install the Web Application Projects <br>Load the solution &lt;path&gt;\CS_2.0.60217.2664_SDK\src\Community Server 20.sln <br>Right click on the CommunityServerWeb20 project and click unload project <br>Right click on the same project again and click Edit CommunityServerWeb20.csproj <br>Change the following line from</span></p>
<p><span>&lt;ProjectType&gt;Local&lt;/ProjectType&gt; </span></p>
<p><span>to <br>&lt;ProjectTypeGuids&gt;{<st1:chmetcnv w:st="on" UnitName="C" SourceValue="349" HasSpace="False" Negative="False" NumberType="1" TCSC="0">349c</st1:chmetcnv>5851-65df-11da-9384-00065b<st1:chmetcnv w:st="on" UnitName="F" SourceValue="846" HasSpace="False" Negative="False" NumberType="1" TCSC="0">846f</st1:chmetcnv>21};{fae04ec0<st1:chmetcnv w:st="on" UnitName="F" SourceValue="301" HasSpace="False" Negative="True" NumberType="1" TCSC="0">-301f</st1:chmetcnv>-11d3-bf4b<st1:chmetcnv w:st="on" UnitName="C" SourceValue="0" HasSpace="False" Negative="True" NumberType="1" TCSC="0">-00c</st1:chmetcnv><st1:chmetcnv w:st="on" UnitName="F" SourceValue="4" HasSpace="False" Negative="False" NumberType="1" TCSC="0">04f</st1:chmetcnv>79efbc}&lt;/ProjectTypeGuids&gt;</span></p>
<p><span>From: Scott Gu's site<br>This instructs VS 2005 to treat this project not as a regular class library project, but rather as a VS 2005 Web Application Project (this will cause the web-items to by added to your new item dialog, support running the application using the built-in VS web-server or IIS, and enable auto-attaching to web-servers for debug scenarios among other things).</span></p>
<p><span>Close the opened project file and click save <br>Right click the same project again and click reload project <br>Right click the same project again and click Properties <br>You should now notice a WEB option on the left side <br>Set the start page option to current page (this allows you to hit F5 on any page and it will start there) <br>Set the servers options to Use IIS Web Server <br>Set the starting URL to <a href="http://localhost/community">http://localhost/community</a> or whatever your url maybe in IIS (you have to put the http:// in or it will fail) <br>Leave the debuggers section unchanged (ASP.NET) <br>Save changes (Almost Done) <br>Right click the same project again and click Set as startup project <br>Open the web.config file <br>Change the compilation debug setting from false to true<br>&lt;compilation defaultLanguage="c#" debug="true" /&gt;<br>Last Step: open IIS and go to your website/virtual directory <br>Click the directory security tab <br>Click the Edit button under Anonymous Access and Authentication Control <br>Check the check box at the bottom for Integrated Windows Authentication<br>NOTE: Be sure that IIS is pointing to your source (SDK) web directory </span></p>
<p><span>NOTE 2: If you find debugging to be slow... change your compilation options and tell VS not to rebuild the entire solution every time.&nbsp; This will significantly speed things up.&nbsp; Just be sure to rebuild the projects that you change. </span></p>
<p><span>To do this: </span></p>
<p><span>Right&nbsp; Click on the solution <br>Click Configuration Manager <br>Choose debug as the Active Solution Configuration <br>In the build column only leave the projects checked that you want to build everytime you hit F5 <br>Click Close<br>References:</span></p>
<p><span><a href="http://webproject.scottgu.com/CSharp/Migration/Migration.aspx">http://webproject.scottgu.com/CSharp/Migration/Migration.aspx</a></span></p>
<p><span><a href="http://communityserver.org/forums/thread/522403.aspx">http://communityserver.org/forums/thread/522403.aspx</a></span></p>
<p><span><a href="http://developer.communityserver.org/default.aspx/CS.DebuggingInVS2005">http://developer.communityserver.org/default.aspx/CS.DebuggingInVS2005</a></span></p>
<p>&nbsp;</p>
<p><span>按照网上看到地一些说法，这个工具将在　</span><span>VS2005 SP1 </span><span>中被包含．目前可以看到的最新版本是　</span><span><br>Visual Studio 2005 Web Application Projects (RC1)</span></p>
<p><span>对我来说，这个工具我最喜欢的就是：</span><span><br></span><span>使用这个工具，我们就可以像以前</span><span> VS2003 </span><span>那样的开发一个项目了．</span><span><br></span><span>整个站点的　</span><span>code </span><span>文件被编译成一个　</span><span>DLL </span></p>
<p><span>目前</span><span>VS2005 Web</span><span>项目中</span><span> AppCode </span><span>目录下文件编译成</span><span> AppCode.dll </span><span>。如果每个</span><span>Web</span><span>项目出现一个</span><span>Appcode,</span><span>那我就无法把这几个</span><span>web</span><span>项目部署在同一站点。只能部署在同一站点的不同的虚拟目录下。这个问题就在这种项目中不会出现。</span></p>
<p><span>附，使用这个工具后的</span><span>WEB</span><span>项目配置页面</span><span><br>?</span></p>
<p><span>其他相关参考资料</span><span>:</span></p>
<p><span><br>VS2003 WEB</span><span>应用程序向</span><span>VS2005</span><span>的移植</span><span> <br><a href="http://lgp.cnblogs.com/archive/2006/03/14/349620.aspx">http://lgp.cnblogs.com/archive/2006/03/14/349620.aspx</a><br></span><span>英文原文</span><span>: Upgrading VS 2003 Web Projects to be VS 2005 Web Application Projects<br><a href="http://webproject.scottgu.com/CSharp/Migration/Migration.aspx">http://webproject.scottgu.com/CSharp/Migration/Migration.aspx</a></span></p>
<p><span><br></span><span>将博客园程序从</span><span>Visual Studio 2003</span><span>迁移到</span><span>Visual Studio 2005</span><span>的尝试</span><span> <br><a href="http://dudu.cnblogs.com/archive/2006/02/18/333115.html">http://dudu.cnblogs.com/archive/2006/02/18/333115.html</a></span></p>
<p><span>Debugging CS <st1:chmetcnv w:st="on" UnitName="in" SourceValue="2" HasSpace="True" Negative="False" NumberType="1" TCSC="0">2.0 in</st1:chmetcnv> VS 2005<br><a href="http://developer.communityserver.org/default.aspx/CS.DebuggingInVS2005">http://developer.communityserver.org/default.aspx/CS.DebuggingInVS2005</a><br><br>New Release of WAP (April 7, 2006)<br><a href="http://forums.asp.net/thread/1253950.aspx">http://forums.asp.net/thread/1253950.aspx</a><br><br>Tutorial 1: Building Your First Web Application Project<br><a href="http://webproject.scottgu.com/CSharp/HelloWorld/Helloworld.aspx">http://webproject.scottgu.com/CSharp/HelloWorld/Helloworld.aspx</a><br><br>Upgrading VS 2005 Web Site Projects to be VS 2005 Web Application Projects<br><a href="http://webproject.scottgu.com/CSharp/migration2/migration2.aspx">http://webproject.scottgu.com/CSharp/migration2/migration2.aspx</a><br><br>Visual Studio 2005 Web Application Project Tutorials (with C#)<br><a href="http://webproject.scottgu.com/CSharp/Default.aspx">http://webproject.scottgu.com/CSharp/Default.aspx</a></span></p>
<p><span>VS 2005 Web Application Projects Forums<br><a href="http://forums.asp.net/1019/showforum.aspx">http://forums.asp.net/1019/showforum.aspx</a><br><br>Visual Studio 2005 Web Application Project Preview <br><a href="http://webproject.scottgu.com/">http://webproject.scottgu.com/</a><br><br>Debugging Community Server 2.0 with VS 2005 and Web Application Projects <br><a href="http://broncosolutions.ca/COMMUNITY/blogs/andrew_renner/archive/2006/04/05/77.aspx">http://broncosolutions.ca/COMMUNITY/blogs/andrew_renner/archive/2006/04/05/77.aspx</a><br><br>An update to support Visual Studio 2005 Web Application Projects is available<br><a href="http://support.microsoft.com/kb/915364">http://support.microsoft.com/kb/915364</a></span></p>
<p><span><a href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html"><span>Community Server 2.0</span><span><span>中如何调试项目</span></span></a></span></p>
<p><span>在</span><span>ASP.NET 2.0</span><span>下，</span><span>web</span><span>编译模式有点变化，在发布</span><span>web</span><span>项目是无法指定生成的程序集</span><span>(dll)</span><span>的名称</span><span>(</span><span>至少我目前没有发现在何处可以指定</span><span>)</span><span>，而是随机生成的长串字符。这让人有时很头疼。</span><span><br clear=all><br clear=all>Community Server 2.0 </span><span>基于</span><span>asp.net 2.0</span><span>下的工程采取了一个巧妙的做法，就是把</span><span>web</span><span>项目建立成</span><span>Library</span><span>的项目。具体如下图所示：</span><span><br clear=all><br clear=all><br clear=all></span><span>这样编译上是没有问题了，但由于</span><span>Library</span><span>项目是没有入口函数的，所以不可以调试，更不可以使用</span><span>vs2005 </span><span>下的虚拟</span><span>IIS</span><span>。那要如何才可以调试这个</span><span>CommunityServer.Web </span><span>项目呢？</span><span><br clear=all></span><span>如果有调试过</span><span>sharepoint </span><span>下</span><span>webpart</span><span>的朋友一定不会陌生，因为在这种情况下只能附加进程来调试了</span><span> </span><span>：</span><span><br clear=all><br clear=all><br clear=all><br clear=all><br clear=all></span><span>附加</span><span> w3wp.exe</span><span>进程进来。之后设置断点即可。</span><span><br clear=all></span></p>
<div>
<p><span>posted on 2006-02-27 19:25 <a href="http://ugoer.cnblogs.com/">uGoer</a> </span><span>阅读</span><span>(1785) <a href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#Post#Post"><span><span>评论</span></span>(6)</a> &nbsp;<a href="http://ugoer.cnblogs.com/admin/EditPosts.aspx?postid=339040"><span><span>编辑</span></span></a>&nbsp;<a href="http://ugoer.cnblogs.com/AddToFavorite.aspx?id=339040"><span><span>收藏</span></span></a> <a title=功能强大的网络收藏夹，一秒钟操作就可以轻松实现保存带来的价值、分享带来的快乐 href="javascript:d=document;t=d.selection?(d.selection.type!='None'?%09%09%09%09%09%09%09%09%09d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');%09%09%09%09%09%09%09%09%09void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'keyit',%09%09%09%09%09%09%09%09%09'scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();"><span><span>收藏至</span></span>365Key</a> </span><span>所属分类</span><span>: <a href="http://ugoer.cnblogs.com/category/32456.html">3:CommunityServer</a> </span></p>
</div>
<p><span><a name=评论></a></span></p>
<div>
<h3><span><span>评论</span></span><span></span></h3>
</div>
<p><b><span><a title="permalink: re: Community Server 2.0中如何调试项目?我告诉你!" href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#339060">#</a>&nbsp;<a name=339060></a>re: Community Server 2.0</span></b><b><span>中如何调试项目</span></b><b><span>?</span></b><b><span>我告诉你</span></b><b><span>! 2006-02-27 20:06 <a href="http://blog.run2me.com/geniusleft" target=_blank><span><span>四海为家</span></span></a> </span></b></p>
<p><span>这跟</span><span>.net 2.0</span><span>没什么关系吧</span><span>? </span><span>我做的项目</span><span>, </span><span>我都是要求用</span><span>library</span><span>项目开发</span><span>web</span><span>项目的</span><span>, </span><span>而且如何调试也不是象你这样</span><span>. <br clear=all></span><span>关于这个问题</span><span>, </span><span>还是参看这篇</span><span>blog</span><span>吧</span><span> <span><br clear=all></span></span><span>顺便一句</span><span>, </span><span>你知道怎么在</span><span>library</span><span>项目中添加</span><span>webform</span><span>页吗</span><span>? </span><span>呵呵</span><span>, </span><span>如果不知道</span><span>, </span><span>提示一下</span><span>, </span><span>修改</span><span>vsdir</span><span>文件</span><span>.&nbsp;&nbsp;<a href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#post"><span><span>回复</span></span></a> <a href="javascript:__doPostBack('Comments1$CommentList$ctl00$DeleteLink','')"></a>&nbsp;&nbsp; </span></p>
<p><b><span><a title="permalink: re: Community Server 2.0中如何调试项目?我告诉你!" href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#339062">#</a>&nbsp;<a name=339062></a>re: Community Server 2.0</span></b><b><span>中如何调试项目</span></b><b><span>?</span></b><b><span>我告诉你</span></b><b><span>! 2006-02-27 20:07 <a href="http://blog.run2me.com/geniusleft" target=_blank><span><span>四海为家</span></span></a> </span></b></p>
<p><span>忘给地址了</span><span> <span><br clear=all><a href="http://wj.cnblogs.com/archive/2005/08/29/225197.html" target=_new>http://wj.cnblogs.com/archive/2005/08/29/225197.html</a>&nbsp;&nbsp;<a href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#post"><span><span>回复</span></span></a> <a href="javascript:__doPostBack('Comments1$CommentList$ctl01$DeleteLink','')"></a>&nbsp;&nbsp; </span></span></p>
<p><b><span><a title="permalink: re: Community Server 2.0中如何调试项目?我告诉你!" href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#339343">#</a>&nbsp;<a name=339343></a>re: Community Server 2.0</span></b><b><span>中如何调试项目</span></b><b><span>?</span></b><b><span>我告诉你</span></b><b><span>! 2006-02-28 09:44 <a href="http://ugoer.cnblogs.com/" target=_blank>uGoer</a> </span></b></p>
<p><span>@</span><span>四海为家</span><span> <span><br clear=all></span></span><span>你的方法：</span><span>&#8220;</span><span>正确的调试方式是</span><span>,</span><span>在项目的调试属性里</span><span>, </span><span>设为通过</span><span>url</span><span>启动</span><span>,</span><span>把</span><span>url</span><span>设为该项目的网址即可</span><span>&#8221;</span><span>这样只能启动这个</span><span>web</span><span>项目，但是无法扑抓到断点，你可以试试。</span><span>&nbsp;&nbsp;<a href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#post"><span><span>回复</span></span></a> <a href="javascript:__doPostBack('Comments1$CommentList$ctl02$DeleteLink','')"></a>&nbsp;&nbsp; </span></p>
<p><b><span><a title="permalink: re: Community Server 2.0中如何调试项目?我告诉你!" href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#339473">#</a>&nbsp;<a name=339473></a>re: Community Server 2.0</span></b><b><span>中如何调试项目</span></b><b><span>?</span></b><b><span>我告诉你</span></b><b><span>! 2006-02-28 12:05 <a href="http://blog.run2me.com/geniusleft" target=_blank><span><span>四海为家</span></span></a> </span></b></p>
<p><span>我又忘提了</span><span>, </span><span>在项目的调试属性里</span><span>,, </span><span>除了设为通过</span><span>url</span><span>启动外</span><span>, </span><span>还要把上面的</span><span>"</span><span>启用</span><span>asp.net</span><span>调试</span><span>"</span><span>设为</span><span>true, </span><span>抱歉啊</span><span> <span><br clear=all></span></span><span>实际上配置一下</span><span>, </span><span>在</span><span>.net 1.1 </span><span>下用</span><span>library</span><span>项目开发和用</span><span>web</span><span>项目开发没区别</span><span>, </span><span>还少了用</span><span>frontpage</span><span>扩展的好多问题</span><span> :)&nbsp;&nbsp;<a href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#post"><span><span>回复</span></span></a> <a href="javascript:__doPostBack('Comments1$CommentList$ctl03$DeleteLink','')"></a>&nbsp;&nbsp; </span></p>
<p><b><span><a title="permalink: re: Community Server 2.0中如何调试项目?我告诉你!" href="http://ugoer.cnblogs.com/archive/2006/02/27/339040.html#339482">#</a>&nbsp;<a name=339482></a>re: Community Server 2.0</span></b><b><span>中如何调试项目</span></b><b><span>?</span></b><b><span>我告诉你</span></b><b><span>! 2006-02-28 12:15 <a href="http://ugoer.cnblogs.com/" target=_blank>uGoer</a> </span></b></p>
<p><span>@</span><span>四海为家</span><span> <span><br clear=all></span></span><span>没有大区别是指在</span><span>vs.net 2003</span><span>下</span><span> <span><br clear=all></span></span><span>这里是说</span><span>vs2005 </span><span>下，区别还是比较大。另外，你说的</span><span>"</span><span>启用</span><span>asp.net</span><span>调试</span><span>"</span><span>设为</span><span>true </span><span>在</span><span>vs 2005</span><span>下的属性</span><span>-</span><span>〉调试页面下是没有的。</span></p>
<p><b><span><a href="http://wj.cnblogs.com/archive/2005/08/29/225197.html"><span><span>调试</span></span><span>MonoRail</span><span><span>程序的三种方法</span></span></a></span></b></p>
<p align=left><span>最近在研究</span><span>MonoRail</span><span>，但是</span><span>MonoRail</span><span>的</span><span>Generator</span><span>所生成的项目输出类型是</span><span>&#8220;</span><span>类库</span><span>&#8221;</span><span>，那么如何调试它呢？我摸索了下，有以下三种方法：</span><span><br><br>1</span><span>）用</span><span>&#8220;</span><span>附加进程</span><span>&#8221;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>这里附加<span>不是</span>附加到</span><span>IEXPLORE.EXE</span><span>，<span>而是</span>附加到</span><span>aspnet_wp.exe</span><span>。附加后进入调试状态，然后你打开</span><span>IE</span><span>，输入地址就可以了。如果你是用</span><span>Cassini</span><span>的话，那就附加到</span><span>Cassini.exe</span><span>。</span><span><br><br><br>2</span><span>）创建一个新的控制台项目加入原有项目，用</span><span>Cassini</span><span>来调试。你只需要加入一下代码：</span><span> </span></p>
<p align=left><span>///</span>&nbsp;<span>&lt;summary&gt;</span><span><br></span><span>///</span>&nbsp;<span>应用程序的主入口点。</span><span><br></span><span>///</span>&nbsp;<span>&lt;/summary&gt;<br></span><span>[STAThread]<br></span><span>static</span>&nbsp;<span>void</span><span>&nbsp;Main(</span><span>string</span><span>[]&nbsp;args)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;Server&nbsp;server&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;</span><span>new</span><span>&nbsp;Server(8080,&nbsp;@"/",&nbsp;@"D:\NetUDisk\NetUDisk");<br>&nbsp;&nbsp;&nbsp;&nbsp;server.Start();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Process.Start("IExplore.exe",&nbsp;"http://localhost:8080/");<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;server.Stop();<br>}</span></p>
<p align=left><span><br><br>3</span><span>）把</span><span>lib</span><span>项目文件转换成</span><span>web</span><span>项目文件，转换方法如下：（假设项目名称为：</span><span>NetUDisk</span><span>）</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a</span><span>－建立虚拟目录指向项目所在的目录</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b</span><span>－用文本编辑器打开</span><span>NetUDisk.csproj</span><span>把的第三行</span><span>ProjectType = "Local"</span><span>更改成</span><span>ProjectType = "Web"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c</span><span>－新建立一个名字叫</span><span>NetUDisk.csproj.webinfo</span><span>的文件，里面内容如下：</span></p>
<p align=left><span>&lt;</span><span>VisualStudioUNCWeb</span><span>&gt;</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&lt;</span><span>Web&nbsp;</span><span>URLPath&nbsp;</span><span>=&nbsp;"http://localhost/NetUDisk/NetUDisk.csproj"</span>&nbsp;<span>/&gt;</span><span><br></span><span>&lt;/</span><span>VisualStudioUNCWeb</span><span>&gt;</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d</span><span>－在</span><span>web.config</span><span>里面的</span><span>&lt;system.web&gt;</span><span>下加入：</span></p>
<p align=left><span>&lt;</span><span>compilation&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>defaultLanguage</span><span>="c#"</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug</span><span>="true"</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>/&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>好了，就</span><span>4</span><span>步，当然另外一种转换方法是用</span><span>vs.net</span><span>新建一个</span><span>asp.net</span><span>的项目，然后把所有的文件都移到项目文件夹里面，最后别忘记修改</span><span>web.config</span><span>哦。</span></p>
<p>&nbsp;</p>
<p><b><span><a href="http://mixiaobo.cnblogs.com/archive/2006/03/11/347828.html"><span><span>把</span></span><span>lib</span><span><span>项目文件转换成</span></span><span>web</span><span><span>项目文件</span></span></a></span></b></p>
<p align=left><span>把</span><span>lib</span><span>项目文件转换成</span><span>web</span><span>项目文件，转换方法如下：（假设项目名称为：</span><span>NetUDisk</span><span>）</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a</span><span>－建立虚拟目录指向项目所在的目录</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b</span><span>－用文本编辑器打开</span><span>NetUDisk.csproj</span><span>把的第三行</span><span>ProjectType = "Local"</span><span>更改成</span><span>ProjectType = "Web"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c</span><span>－新建立一个名字叫</span><span>NetUDisk.csproj.webinfo</span><span>的文件，里面内容如下：</span></p>
<p align=left><span>&lt;</span><span>VisualStudioUNCWeb</span><span>&gt;</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&lt;</span><span>Web&nbsp;</span><span>URLPath&nbsp;</span><span>=&nbsp;"http://localhost/NetUDisk/NetUDisk.csproj"</span>&nbsp;<span>/&gt;</span><span><br></span><span>&lt;/</span><span>VisualStudioUNCWeb</span><span>&gt;</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d</span><span>－在</span><span>web.config</span><span>里面的</span><span>&lt;system.web&gt;</span><span>下加入：</span></p>
<p align=left><span>&lt;</span><span>compilation&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>defaultLanguage</span><span>="c#"</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug</span><span>="true"</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>/&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>好了，就</span><span>4</span><span>步，当然另外一种转换方法是用</span><span>vs.net</span><span>新建一个</span><span>asp.net</span><span>的项目，然后把所有的文件都移到项目文件夹里面，最后别忘记修改</span><span>web.config</span><span>哦。</span></p>
<p>&nbsp;</p>
<p><b><span><a href="http://hjf1223.cnblogs.com/archive/2006/03/17/352474.html"><span><span>在</span></span><span>VS2003</span><span><span>中以</span></span><span>ClassLibrary</span><span><span>工程的方式管理</span></span><span>Web</span><span><span>工程</span></span></a></span></b></p>
<p align=left><span>尽管目前已经基本不用</span><span> VS2003 </span><span>作为主要开发工具了，但是今天打开</span><span> SubText </span><span>却发现它的</span><span> Web </span><span>工程却是用</span><span> ClassLirary </span><span>形式的工程来管理的。也就是说不需要在</span><span> IIS </span><span>创建一个</span><span> WEB </span><span>工程虚拟目录映射才能找开</span><span> WEB </span><span>工程，这样就会给我们带来极大的方便。在</span><span> VS2005 </span><span>的</span><span> Web Site </span><span>也解决了这个问题，但是却带来了其实的问题，比如没有项目文件，无法很好地管理文件的排除与包含问题。</span><span> </span></p>
<p align=left><span>通过</span><span> SubText </span><span>项目中的</span><span> AspNetWithoutWebProjects.txt </span><span>介绍的地址（</span><span> http://pluralsight.com/wiki/default.aspx/Fritz.AspNetWithoutWebProjects </span><span>），了解到在</span><span> VS2003 </span><span>中可以通过修改一个环境文件和项目文件，可以达到就可以实现用</span><span> ClassLirary </span><span>的工程管理方式来管理</span><span> WEB </span><span>工程。这里记录下与大家共享。</span><span> </span></p>
<p align=left><span>打开</span><span> VS2003 </span><span>的安装目录，并转到</span><span> VC#\CSharpProjectItems </span><span>目录下，可以看到还有两个子目录</span><span> WebProjectItems </span><span>和</span><span> LocalProjectItems </span><span>，先打开</span><span> WebProjectItems </span><span>下的</span><span> WebProjectItems.vsdir </span><span>文件</span><span> </span><span>拷贝下：</span><span> </span></p>
<p align=left><span>CSharpAddWebFormWiz.vsz</span><span> </span></p>
<p align=left><span>CSharpAddWebServiceWiz.vsz</span><span> </span></p>
<p align=left><span>CSharpAddWebUserControl.vszdd</span><span> </span></p>
<p align=left><span>CSharpAddWebDataForm.vsz</span><span> </span></p>
<p align=left><span>这</span><span> 4 </span><span>行的完整代码。</span><span> </span></p>
<p align=left><span>然后转到</span><span> LocalProjectItems</span><span>目录</span><span> </span><span>，打开</span><span> LocalProjectItems.vsdir </span><span>文件</span><span>把上面拷贝的内容粘贴进来。</span><span> </span></p>
<p align=left><span>这一步操作的目的是让</span><span> ClassLirary </span><span>工程的右键添加新项的菜单中有添加</span><span> WebForm </span><span>，</span><span> Web </span><span>引用，</span><span> WebUserControl, </span><span>等这些项，默认情况下是没有这些的，只有添加</span><span> WinForm </span><span>等不是</span><span> Web </span><span>工程特有的菜单。</span><span> </span></p>
<p align=left><span>对环境文件的修改这样就行了。接下来就要修改</span><span> Web </span><span>工程本身的文件。打开项目工程</span><span> (.csproj) </span><span>文件，把：</span><span> ProjectType = "Web" </span><span>改为</span><span> ProjectType = "Local" </span><span>。然后删除工程目录下的</span><span> .webinfo </span><span>文件，否则工程将无法打开。</span><span><br>&nbsp;&nbsp;&nbsp;</span><span> </span><span>如果工程被包含在一个解决方案文件中，要让解决方案能正常打开，需要打开</span><span>.sln</span><span>把对</span><span>WEB</span><span>工程改成普通工程的引用。如：</span><span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApplication133",<span>&nbsp;&nbsp;&nbsp; </span><br><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>"http://localhost/WebApplication133/WebApplication133.csproj",<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>"{39CB37A5-F735-4684-B5DA-DD355B683090}"</span><span>&nbsp;&nbsp;<br></span><span>&nbsp;&nbsp;&nbsp;</span><span>改为：</span><span><br></span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApplication133",<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><br><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>"WebApplication133.csproj",<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>"{39CB37A5-F735-4684-B5DA-DD355B683090}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>也就是把</span><span>URL</span><span>地址去掉就行了。</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>这样</span><span>Web</span><span>工程就可以以</span><span>ClassLirary</span><span>的方式打开了，但如果要正确编译，甚至调试，还必须保证，输出路径设为：</span><span>bin\&nbsp;</span><span>；</span><span><br></span><span>把调试模式改为</span><span>URL</span><span>，单击</span><span>&#8220;</span><span>应用</span><span>&#8221;</span><span>，设置对应的启动</span><span>URL</span><span>就可以正常调试了。</span><span><br>(</span><span>这里注意一点，没有点</span><span>&#8220;</span><span>应用</span><span>&#8221;</span><span>启动</span><span>URL</span><span>的输入框是灰色的不能输入。</span><span>)</span></p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/ekun008/aggbug/415927.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server2.0专注细节一   邮件提醒按钮实现(上)</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415923.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:41:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415923.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415923.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415923.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415923.html</trackback:ping><description><![CDATA[<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>作者</span><span>: </span><span>彭斌</span> <span>，广州</span><span>.NET</span><span>俱乐部</span> <span>2006-3-9</span>&nbsp;</p>
<p><span>在去年的</span><span>CS1.x</span><span>专题中</span><span>,</span><span>我用了大部分的时间去讨论</span><span>CS</span><span>底层的结构与运行机制</span><span>.</span><span>在接下来的</span><span>CS2.0</span><span>系列文章中我将专著细节</span><span>.</span><span>来分析</span><span>CS2.0</span><span>的一些部件的实现</span><span>.</span></p>
<p>&nbsp;</p>
<p><span>CS1.0</span><span>与</span><span>2.0</span><span>有些变化</span><span>,</span><span>但是运行机制变化不大</span><span>,</span><span>变化的只是细节与增加的功能</span><span>.</span></p>
<p><span>细节的第一篇</span><span>,</span><span>我们从一个按钮开始说起</span><span>:</span></p>
<p>&#160;</p>
<p><span>上面的&#8220;邮件提醒&#8221;按钮是在</span><span>CS2.0</span><span>论坛模块里的一个具体帖子左上角出现的。该按钮不是一般的按钮，有图片并且还有文字</span><span>(</span><span>这个文字不是图片中的一部分那么简单，文字会根据</span><span>xml</span><span>的资源文件的不同而替换不同的语言</span><span>)</span><span>，另外点击按钮还会通过</span><span>Ajax</span><span>回调一个服务器端方法，实现无刷新操作。</span></p>
<p><span>首先要明白的是，该按钮不是继承自</span><span>Button</span><span>，而是一个自定义控件。在</span><span>CommunityServer.Controls</span><span>项目，找到</span><span>Utility</span><span>文件夹下的</span><span>ThreadSubscribeLinkButton.cs</span><span>类。这就是该按钮的实现了。</span></p>
<p><span>public</span><span> <span>class</span> <span>ThreadSubscribeLinkButton</span> : <span>HtmlAnchor</span>, <span>ITrackedThread</span></span></p>
<p><span>该</span><span>Button</span><span>是继承了</span><span>HtmlAnchor(</span><span>就是</span><span>HTML </span><span>的</span><span>&lt;a&gt;)</span><span>与</span> <span>ITrackedThread</span><span>。</span></p>
<p><span>ITrackedThread</span><span>接口定义很简单：</span></p>
<p align=left><span>public</span><span> <span>interface</span> <span>ITrackedThread</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>bool</span> IsTracked { <span>get</span>;<span>set</span>;}</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>int</span> ThreadID { <span>get</span>;<span>set</span>;}</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>bool</span> Visible { <span>get</span>;<span>set</span>;}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span>三个属性，分别是&#8220;是否已经跟踪&#8221;、&#8220;被跟踪的线索</span><span>ID</span><span>&#8221;、&#8220;是否可见&#8221;</span><span>&nbsp;</span><span>，这里说明一下</span><span>thread</span><span>这个单词在</span><span>CS </span><span>中的解释：首先，一个论坛下的一个</span><span>Post(</span><span>我们一般叫帖子</span><span>)</span><span>，发表后就会有一个</span><span>thread</span><span>，这个线索包括了</span><span>Post</span><span>本身，还包括针对该</span><span>Post</span><span>的回复等等。</span><span>Post</span><span>和其回复就形成了一个</span><span>thread</span><span>。</span></p>
<p><span>我们回到</span><span>ThreadSubscribeLinkButton.cs</span><span>类看一些重要的属性：</span></p>
<p align=left><span>public</span><span> <span>virtual</span> <span>bool</span> UseImages</span></p>
<p align=left><span>public</span><span> <span>virtual</span> <span>string</span> TrackingResourceName </span></p>
<p align=left><span>public</span><span> <span>virtual</span> <span>string</span> NotTrackingResourceName </span></p>
<p align=left><span>public</span><span> <span>virtual</span> <span>string</span> WorkingResourceName </span></p>
<p>&nbsp;</p>
<p><span>由于</span><span>CS</span><span>是提供多种语言支持，所有想要替换按钮上的文字就需要这些属性了。同时，如果要显示在不同的操作状态，如：在处理的时候显示一个漏沙图标</span><span> </span><span>，还有在处理完成后要显示一个完成的图标</span><span> </span><span>。这些都需要上述属性的支持。另外，我们可以看出这些属性是可以重写的。</span></p>
<p><span>接下来在类中还有几个重要的方法：</span></p>
<p><span>protected</span><span> <span>override</span> <span>void</span> OnLoad(<span>EventArgs</span> e)</span></p>
<p><span>这是最早激发的一个事件实现，在</span><span>CreateChildControls</span><span>之前。在这里我们可以看到为该类为页面注册了一个</span><span>Ajax</span><span>方法：</span></p>
<p><span>AjaxManager</span><span>.Register(<span>this</span>,<span>this</span>.GetType().Name,<span>true</span>,<span>AjaxDebug</span>.None);</span></p>
<p><span>(</span><span>关于</span><span>Ajax</span><span>类这次细节分析暂时忽略</span><span>)</span></p>
<p>&nbsp;</p>
<p><span>protected</span><span> <span>override</span> <span>void</span> CreateChildControls()</span></p>
<p><span>在</span><span>OnLoad</span><span>之后就建立控件内容，内容主要包括一些</span><span>js</span><span>脚本的，并且根据</span><span>IsTracked</span><span>的值判断按钮应该显示的文字和图片。</span></p>
<p>&nbsp;</p>
<p><span>protected</span><span> <span>override</span> <span>void</span> OnPreRender(<span>EventArgs</span> e)</span></p>
<p><span>在建立控件内容后，就触发预呈现的</span><span>OnPreRender</span><span>事件。在该方法下，主要根据</span><span>UseImages</span><span>的值判断调用下面两个方法中的哪一个。</span></p>
<p><span>private</span><span> <span>void</span> BuildCallbackScript()</span></p>
<p><span>private</span><span> <span>void</span> BuildCallbackScriptWithImages()</span></p>
<p><span>这两个私有方法，构造</span><span>Ajax</span><span>回调的脚步。</span></p>
<p>&nbsp;</p>
<p align=left><span>[<span>AjaxMethod</span>(IncludeControlValuesWithCallBack=<span>false</span>)]</span></p>
<p><span>public</span><span> <span>bool</span> ToggleEmailReplies(<span>int</span> threadID)</span></p>
<p><span>这是</span><span>Ajax</span><span>回调的方法，也就是说当点击按钮后，会通过</span><span>js </span><span>通过</span><span>xmlhttp</span><span>调用该方法。</span></p>
<p><span>ThreadTracking</span><span>.ReverseThreadTrackingOptions(threadID, context.User.UserID);</span></p>
<p><span>通过上面的调用，最终把值保存到数据库。</span><span>ToggleEmailReplies</span><span>方法最后返回一个</span><span>bool</span><span>变量，客户端的</span><span>js</span><span>脚本就会根据这个</span><span>bool</span><span>值变化按钮的文字与图片。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/ekun008/aggbug/415923.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server专题附录一： 什么是Threads &amp; Processes</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415922.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:39:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415922.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415922.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415922.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415922.html</trackback:ping><description><![CDATA[&nbsp; <span>请用批判的眼光来看下面的文字：</span>
<p><span>线程和进程</span><span>(Threads and Processes)</span><span>，</span> <span>简单说，你启动一个程序，就启动了一个进程，早期</span><span>win3.x</span><span>的系统以进程为单位（嘿嘿，其实我没有用过</span><span>win3.x</span><span>），</span><span>win98</span><span>后每个进程还可以启动几个线程，因此以线程为单位。在如今的操作系统下线程间是独立运行的，但是他们共享一些内存中的片断，如：全局变量等。</span></p>
<p><span>问题来了：</span><span>CS</span><span>在服务器上运行是多线程的吗？每个用户的</span><span>Http</span><span>请求</span><span>CS</span><span>做了什么？</span><span>CS</span><span>系统在被第一次访问的时候由</span><span>asp.net</span><span>运行机制启动一个</span><span>CS</span><span>进程，启动进程是需要给该进程分配独立的内存地址的，该地址不受其他的进程影响和操作。也就是说如果你还有其他的</span><span>Web</span><span>程序是无法访问这段内存空间的</span><span>(</span><span>正常情况下进程与进程之间是安全的</span><span>)</span><span>。有了</span><span>CS</span><span>的进程还不够，前面说过</span><span>win98</span><span>后的操作系统执行的最小单元时线程而不是进程。因此接下来会为这个请求启动一个线程</span><span>(</span><span>对于</span><span>web</span><span>程序来说，</span><span>Http</span><span>请求的线程启动过程不需要你使用</span><span>System.Threading</span><span>命名空间下的方法，启动的过程右</span><span>asp.net</span><span>运行机制完成</span><span>)</span><span>，由于一个进程的所有线程都共享它的内存地址空间、全局变量和操作系统资源，因此这个请求可以根据共享的资源为自己建立一个上下文</span><span>Context</span><span>，然后处理相关的请求操作，请求完成后线程会被释放，他的生存周期也就结束了</span><span>(</span><span>因此说</span><span>Http</span><span>请求是无状态的，因为同一个用户的两次</span><span>Http</span><span>请求会建立两个不同的线程，他们的</span><span>Context</span><span>是不同的，而且有前后顺序。但是为了保存一些必要的状态信息因此有了</span><span>Cookies</span><span>与</span><span>Session</span><span>等</span><span>)</span><span>。当有第二个</span><span>http</span><span>请求发出的时候，很有可能第一个</span><span>http</span><span>请求还没有处理完成，因此这里就牵涉到了多线程执行下的线程安全问题。</span></p>
<p><span>线程安全，是指一个方法（</span><span>method</span><span>）可以在多线程的环境下安全的有效的访问进程级的数据（这些数据是与其他线程共享的）。要保证线程安全关键是同步，保证多个线程同时开始执行，并行运行、不同时访问相同的对象实例、不同时执行同一段代码，</span><span>.net</span><span>下我们可以通过一些手段来保证我们的数据是安全的，如采用</span><span>System.Threading.Monitor</span><span>加锁以确保对共享数据访问的同步性。其实在</span><span>MSDN</span><span>中我经常都会看到对一个方法介绍时候都会加以说明该方法是</span><span>Thread Safe</span><span>，也就是线程安全的。线程安全是一个高级议题，不能再往下说了，不然就见底了。</span></p>
<p><span>其实只要不重新启动</span><span>IIS</span><span>那么</span><span>CS</span><span>的进程就一直存在，而且只有一个。但是</span><span>CS</span><span>的线程就多了，根据不同的</span><span>Http</span><span>请求会有多个线程，同时</span><span>CS</span><span>中还使用了</span><span>Timer</span><span>，它也会启动新的处理线程，该线程的生命周期一直持续到</span><span>Timer</span><span>被</span><span>Dispose</span><span>。</span></p>
<p><span>可以看出</span><span>CS</span><span>是一个复杂的多线程程序，当然所有的</span><span>web app</span><span>都是多线程的，因此分析之前很有必要了解线程与进程的概念</span></p><img src ="http://www.cnblogs.com/ekun008/aggbug/415922.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server专题九：MemberRole之Profile</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415914.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:30:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415914.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415914.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415914.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415914.html</trackback:ping><description><![CDATA[摘要: 上个专题我们讲到了Membership，了解了Membership可以让我们轻松的实现用户注册、登录、删除用户、用户更改密码等等一系列关于用户的基本操作，但是对于一个面向多用户的web程序，为了满足用户在访问站点时能够根据自己的喜好定制web站点的一些页面布局、皮肤，语言等等一些信息，Membership是不能满足要求的，因此，在CS中引入了Profile，Profile并不是为了实现用户个性化的&nbsp;&nbsp;<a href='http://www.cnblogs.com/ekun008/archive/2006/06/02/415914.html'>阅读全文</a><img src ="http://www.cnblogs.com/ekun008/aggbug/415914.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server专题八：MemberRole之Membership深入篇</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415910.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:29:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415910.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415910.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415910.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415910.html</trackback:ping><description><![CDATA[摘要: 专题八的上篇大致讨论了MemberRole中的Membership实现，对于运用Membership进行web开发足够，但是对于想更深入了解Membership实现机理的朋友那是远远不够的，这个专题我们更深入一下了解Membership。其实MemberRole是一个非常好的资源包，借住Reflector这个优秀的工具，你可以对其进行代码分析。它无论是在组建的构架、代码的设计、数据库表的建立、存储&nbsp;&nbsp;<a href='http://www.cnblogs.com/ekun008/archive/2006/06/02/415910.html'>阅读全文</a><img src ="http://www.cnblogs.com/ekun008/aggbug/415910.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server专题八：MemberRole之Membership</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415907.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:27:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415907.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415907.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415907.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415907.html</trackback:ping><description><![CDATA[摘要: MemberRole是一个在asp.net1.1下实现用户管理、角色管理、用户特性信息存储(profile)等的一个组件，该组件被ASP.NET2.0Beta2所采用，也就是ASP.NET2.0Beta2中所说的MembershipandRoles。如果你在asp.net1.1下采用了MemberRole，那么你的web程序将会很容易的过渡到asp.net2.0，另外多个采取MemberRole进&nbsp;&nbsp;<a href='http://www.cnblogs.com/ekun008/archive/2006/06/02/415907.html'>阅读全文</a><img src ="http://www.cnblogs.com/ekun008/aggbug/415907.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server专题七： Job &amp; Timer</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415905.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:26:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415905.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415905.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415905.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415905.html</trackback:ping><description><![CDATA[摘要: 在CSHttpModule.cs文件中的Init方法下有这样一行：接着在Dispose方法中还有这么一行：Job?什么是Job，在CS运行过程中有什么用途，又是如何运行的？这篇专题将叙述Job的工作流程.你可以这里理解CS中的Job：&#8220;干一些零碎事情的钟点工&#8221;。讲解之前要先了解一个接口：IDisposable，MSDN是这样定义的：定义一种释放分配的非托管资源的方法。当托管&nbsp;&nbsp;<a href='http://www.cnblogs.com/ekun008/archive/2006/06/02/415905.html'>阅读全文</a><img src ="http://www.cnblogs.com/ekun008/aggbug/415905.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Community Server专题六：Delegates &amp; Events</title><link>http://www.cnblogs.com/ekun008/archive/2006/06/02/415904.html</link><dc:creator>阿昆</dc:creator><author>阿昆</author><pubDate>Fri, 02 Jun 2006 07:25:00 GMT</pubDate><guid>http://www.cnblogs.com/ekun008/archive/2006/06/02/415904.html</guid><wfw:comment>http://www.cnblogs.com/ekun008/comments/415904.html</wfw:comment><comments>http://www.cnblogs.com/ekun008/archive/2006/06/02/415904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ekun008/comments/commentRss/415904.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ekun008/services/trackbacks/415904.html</trackback:ping><description><![CDATA[摘要:  对于CS的分析你可以能会从页面开始，其实那并不是一个很好的方法，因为CS采用了MasterPage和内建的Theme与Skins，页面一层嵌套一层，如果你对CS页面执行机制不了解，或者你是初学者，这个时候可能就会碰壁，接着就放弃了对CS更深入的了解。我希望我的专题能从CS的运行过程开始一步一步地讲解，同时把ASP.NET的运行机理也表述出来，因此学习了解CS的过程就是对ASP.NET深入了解得过&nbsp;&nbsp;<a href='http://www.cnblogs.com/ekun008/archive/2006/06/02/415904.html'>阅读全文</a><img src ="http://www.cnblogs.com/ekun008/aggbug/415904.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>