<?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>博客园-ξ箫音ξ&amp;&amp;高阳（天行健，君子以自强不息；厚德载物! -《周易》）</title><link>http://www.cnblogs.com/xiaoyin_net/</link><description>专注于微软.Net最新技术应用与研究的Blog</description><language>zh-cn</language><lastBuildDate>Fri, 05 Sep 2008 09:02:24 GMT</lastBuildDate><pubDate>Fri, 05 Sep 2008 09:02:24 GMT</pubDate><ttl>60</ttl><item><title>基于微软Synchronization Services双向同步技术在企业项目中的架构应用研究</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/06/17/1223914.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Tue, 17 Jun 2008 06:29:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/06/17/1223914.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1223914.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/06/17/1223914.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1223914.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1223914.html</trackback:ping><description><![CDATA[摘要: 项目应用场景： 某客户是一个大型集团企业的信息部门，掌管着企业几百台服务器，并且以后会不断扩充； 为了更好的维护信息办的服务器；信息部门需要开发一套维护系统，来记录各个服务器的相关状态信息 （如，IP、所安装在服务器的应用系统和相关信息等），便于维护和查询；客户维护人员可以携带笔记本 脱机即时编写维修服务器相关记录信息（增、删、查、改），客户端联网即可自动同步到服务器最新维护数据。客户要求实现服务&nbsp;&nbsp;<a href='http://www.cnblogs.com/xiaoyin_net/archive/2008/06/17/1223914.html'>阅读全文</a><img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1223914.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42101/" target="_blank">[新闻]淘宝网合并阿里妈妈 专家称阿里巴巴或有新战略</a>]]></description></item><item><title>发布最新C#3.5开发的ReSharper4.0 for VS2005/2008 注册机</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/06/17/1223603.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Tue, 17 Jun 2008 03:10:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/06/17/1223603.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1223603.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/06/17/1223603.html#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1223603.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1223603.html</trackback:ping><description><![CDATA[ReSharper是一款微软Microsoft Visual Studio 2005 和Microsoft Visual Studio
.NET
2008和的插件，也是目前ReSharper4.0-VS2005和ReSharper4.0-VS2008编程插件中最强的插件之一,它提供了智能
C#辅助编码功能和实时错误显示功能，并支持重构。提供流行C#代码智能帮助,高亮度显示实时纠错以及重新参数化等功能。ReSharper为C#开发人
员提供许多能够有效提高生产力的功能，这些功能已被成千上万使用IntelliJ
IDEA的Java程序员所采用。ReSharper为C#开发人员提供了许多强有力的特性，极大地提高了开发效率。
<div align="left">
<br />
<img src="http://blog.crfly.com/image.axd?picture=ReSharper1.jpg" alt="" />
</div>
<div align="left">
&nbsp;
</div>
<div align="left">
<img src="http://blog.crfly.com/image.axd?picture=ReSharper2.jpg" alt="" />
</div>
<div align="left">
&nbsp;
</div>
<div align="left">
<img src="http://blog.crfly.com/image.axd?picture=ReSharper3.jpg" alt="" />
</div>
<div align="left">
&nbsp;
</div>
<div align="left">
&nbsp;
</div>
<div align="left">
&nbsp;
使用说明：
</div>
<p>
&nbsp;&nbsp; 1、此注册机算是网络上最豪华的注册机，界面漂亮功能强大；有微型播放器功能,并支持mp3,wma等通用格式。<br />
&nbsp;&nbsp; 2、程序启动后会自动播放&#8220;光&#8221;歌曲，并转到音乐库&#8221;界面，可以在&#8220;播放控制&#8221;选项采取相应操作。<br />
&nbsp;&nbsp;
3、如使用ReSharper 4.0新版注册机，请切换到注册码按钮，输入你自己想要的名字，按生成按钮生成密匙。启动VS
2005/2008菜单，选择ReSharper菜单－License Information－Enter
License，输入用户名和密匙Expiration Date:never 注册成功。<br />
&nbsp;&nbsp; 4、切换到"音乐库"按钮标签，即可选择你要播放的歌曲。如需要添加歌曲，点击歌曲表，按右鼠标，菜单中选择你要播放的文件夹和音乐文件。<br />
&nbsp;&nbsp; 5、有的ReSharper4.0-VS2008版本会没有注册选项，但是你注册过ReSharper4.0-VS2008版本后，2008版本即可解除限制。<br />
&nbsp;&nbsp; <br />
程序特色如下:<br />
1.语法错误高亮显示<br />
2.搜索<br />
3.代码助手<br />
4.自动更正<br />
5.活动模板<br />
6.代码格式化<br />
7.重构<br />
8.代码生成<br />
9.其它特征<br />
10.代码导航<br />
11.代码完成<br />
<br />
&nbsp;&nbsp; 此次注册机是采用Microsoft Visual Studio 2008最新开发技术设计,所以需要安装最新的Microsoft .NET Framework v3.5 正式版和Windows Media Player9.0以上.
</p>
<p>
&nbsp;&nbsp; ReSharper 4.0 for VS2005/2008注册机是目前位置针对ReSharper 4.0版本最好的注册机，能采用破解RSA技术，生成密匙能完全解除程序本身功能和时间的限制。
</p>
<p>
&nbsp;&nbsp; 此程序由本人用.net3.5编写完成。希望此次公布能够为广大.net编程爱好者更多的帮助。如遇到什么问题，请到箫心论坛http://it.crfly.com/ 发帖咨询。&nbsp;
</p>
<p>
&nbsp;ReSharper4.0
</p>
<p>
下载地址：http://download.jetbrains.com/resharper/ReSharperSetup.4.0.msi
</p>
<p>
注册机：&nbsp;
</p>
<p>
<a rel="enclosure" href="http://blog.crfly.com/file.axd?file=crReSharper4.zip">crReSharper4.zip (3.67 mb)</a>
</p>
<img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1223603.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42101/" target="_blank">[新闻]淘宝网合并阿里妈妈 专家称阿里巴巴或有新战略</a>]]></description></item><item><title>发布google在线翻译程序（附源码）</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/04/14/1153000.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Mon, 14 Apr 2008 08:58:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/04/14/1153000.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1153000.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/04/14/1153000.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1153000.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1153000.html</trackback:ping><description><![CDATA[<div class="postcontent">
<div class="postbody">
<p>需要的朋友可以下载，这几天看到园子里有几个兄弟编写Google的在线翻译；<br />
我也凑一下热闹，网络收集了些资源，自己重新加工了一下，希望能对园子里的朋友有用。<br />
<br />
功能：支持简体中文、法语、德语、意大利语、西班牙玉，葡萄牙语；<br />
大家可以根据自己的需要扩充。<br />
<br />
采用<font face="Verdana">Microsoft Visual Studio 2008</font>设计，需要3.5运行库。 </p>
<p><img alt="" src="http://blog.crfly.cn/image.axd?picture=GoogleTranslator.jpg" height="504" width="559" /><br />
<br />
资源类： </p>
<p><font face="Verdana">/* &#8226;————————————————————————————————&#8226;<br />
&nbsp;&nbsp; | Email:gordon.gao@achievo.com |<br />
&nbsp;&nbsp; | amend:Gordon（高阳）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp; | 2008.4.14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp; &#8226;————————————————————————————————&#8226; */</font> </p>
<p><font face="Verdana">using System;<br />
using System.IO;<br />
using System.Net;<br />
using System.Text;<br />
using System.Threading;</font> </p>
<p><font face="Verdana">namespace RavSoft<br />
{<br />
&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp; /// A framework to expose information rendered by a URL (i.e. a "web<br />
&nbsp;&nbsp;&nbsp; /// resource") as an object that can be manipulated by an application.<br />
&nbsp;&nbsp;&nbsp; /// You use WebResourceProvider by deriving from it and implementing<br />
&nbsp;&nbsp;&nbsp; /// getFetchUrl() and optionally overriding other methods.<br />
&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp; abstract public class WebResourceProvider<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Default constructor.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public WebResourceProvider()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reset();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /////////////<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Properties</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Gets and sets the user agent string.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Agent<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return m_strAgent; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { m_strAgent = (value == null ? "" : value); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Gets and sets the referer string.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Referer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return m_strReferer; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { m_strReferer = (value == null ? "" : value); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Gets and sets the minimum pause time interval (in mSec).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int Pause<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return m_nPause; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { m_nPause = value; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Gets and sets the timeout (in mSec).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int Timeout<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return m_nTimeout; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { m_nTimeout = value; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Returns the retrieved content.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;value&gt;The content.&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Content<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return m_strContent; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Gets the fetch timestamp.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public DateTime FetchTime<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return m_tmFetchTime; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Gets the last error message, if any.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string ErrorMsg<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return m_strError; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /////////////<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Operations</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Resets the state of the object.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void reset()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strAgent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strReferer = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strError = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strContent = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_httpStatusCode = HttpStatusCode.OK;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_nPause = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_nTimeout = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_tmFetchTime = DateTime.MinValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Fetches the web resource.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void fetchResource()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Initialize the provider - quit if initialization fails<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!init())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Main loop<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool bOK = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do<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;&nbsp;&nbsp;&nbsp; string url = getFetchUrl();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getContent(url);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bOK = (m_httpStatusCode == HttpStatusCode.OK);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bOK)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parseContent();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (bOK &amp;&amp; continueFetching());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //////////////////<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Virtual methods</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Provides the derived class with an opportunity to initialize itself.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;true if the operation succeeded, false otherwise.&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected virtual bool init()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return true; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Returns the url to be fetched.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;The url to be fetched.&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abstract protected string getFetchUrl();</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Retrieves the POST data (if any) to be sent to the url to be fetched.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// The data is returned as a string of the form &amp;quot;arg=val [&amp;amp;arg=val]...&amp;quot;.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;A string containing the POST data or null if none.&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected virtual string getPostData()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return null; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Provides the derived class with an opportunity to parse the fetched content.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected virtual void parseContent()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Informs the framework that it needs to continue fetching urls.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// true if the framework needs to continue fetching urls, false otherwise.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected virtual bool continueFetching()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { return false; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///////////////////////////<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Implementation (members)</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;User agent string used when making an HTTP request.&lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string m_strAgent;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;Referer string used when making an HTTP request.&lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string m_strReferer;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;Error message.&lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string m_strError;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;Retrieved.&lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string m_strContent;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;HTTP status code.&lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpStatusCode m_httpStatusCode;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;Minimum number of mSecs to pause between successive HTTP requests.&lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int m_nPause;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;HTTP request timeout (in mSecs).&lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int m_nTimeout;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;Timestamp of last fetch.&lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateTime m_tmFetchTime;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///////////////////////////<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Implementation (methods)</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Retrieves the content of the url to be fetched.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="url"&gt;Url to be fetched.&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void getContent<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (string url)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Pause, if necessary<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_nPause &gt; 0)<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;&nbsp;&nbsp;&nbsp; int nElapsedMsec = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Determine the time elapsed since the last fetch (if any)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (nElapsedMsec == 0)<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_tmFetchTime != DateTime.MinValue)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeSpan tsElapsed = m_tmFetchTime - DateTime.Now;<br />
&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; nElapsedMsec = (int)tsElapsed.TotalMilliseconds;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Pause 100mSec increment if necessary<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nSleepMsec = 100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (nElapsedMsec &lt; m_nPause)<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.Sleep(nSleepMsec);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nElapsedMsec += nSleepMsec;<br />
&nbsp;&nbsp;&nbsp;&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; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (nElapsedMsec &lt; m_nPause);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Set up the fetch request<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strUrl = url;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!strUrl.StartsWith("http://"))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strUrl = "http://" + strUrl;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.AllowAutoRedirect = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.UserAgent = m_strAgent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.Referer = m_strReferer;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_nTimeout != 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.Timeout = m_nTimeout;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Add POST data (if present)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strPostData = getPostData();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strPostData != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASCIIEncoding asciiEncoding = new ASCIIEncoding();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] postData = asciiEncoding.GetBytes(strPostData);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.Method = "POST";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.ContentType = "application/x-www-form-urlencoded";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.ContentLength = postData.Length;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stream reqStream = req.GetRequestStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reqStream.Write(postData, 0, postData.Length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reqStream.Close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Fetch the url - return on error<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strError = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strContent = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpWebResponse resp = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<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;&nbsp;&nbsp;&nbsp; m_tmFetchTime = DateTime.Now;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resp = (HttpWebResponse)req.GetResponse();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception exc)<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;&nbsp;&nbsp;&nbsp; if (exc is WebException)<br />
&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;&nbsp;&nbsp;&nbsp; WebException webExc = exc as WebException;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strError = webExc.Message;<br />
&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; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<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;&nbsp;&nbsp;&nbsp; if (resp != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_httpStatusCode = resp.StatusCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Store retrieved content<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<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;&nbsp;&nbsp;&nbsp; Stream stream = resp.GetResponseStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StreamReader streamReader = new StreamReader(stream);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strContent = streamReader.ReadToEnd();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception)<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;&nbsp;&nbsp;&nbsp; // Read failure occured - nothing to do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
调用：<br />
<br />
</font><font face="Verdana">
<p><font face="Verdana">&nbsp;&nbsp; private void OnTranslate(object sender, System.EventArgs e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Get English text - complain if none<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strEnglish = editEnglish.Text.Trim();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strEnglish.Equals(String.Empty))<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;&nbsp;&nbsp;&nbsp; MessageBox.Show("Please enter the text to be translated.",<br />
&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; "GoogleTranslatorForm Demo",<br />
&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; MessageBoxButtons.OK,<br />
&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; MessageBoxIcon.Warning);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; editEnglish.SelectAll();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; editEnglish.Focus();<br />
&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; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Get translation mode<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoogleTranslator.Mode mode = GoogleTranslator.Mode.EnglishToFrench;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoogleTranslator.Mode reverseMode = GoogleTranslator.Mode.FrenchToEnglish;</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (radioGerman.Checked)<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;&nbsp;&nbsp;&nbsp; mode = GoogleTranslator.Mode.EnglishToGerman;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reverseMode = GoogleTranslator.Mode.GermanToEnglish;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<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;&nbsp;&nbsp;&nbsp; if (radioItalian.Checked)<br />
&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;&nbsp;&nbsp;&nbsp; mode = GoogleTranslator.Mode.EnglishToItalian;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reverseMode = GoogleTranslator.Mode.ItalianToEnglish;<br />
&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; else<br />
&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;&nbsp;&nbsp;&nbsp; if (radioSpanish.Checked)<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode = GoogleTranslator.Mode.EnglishToSpanish;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reverseMode = GoogleTranslator.Mode.SpanishToEnglish;<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (radioPortugese.Checked)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode = GoogleTranslator.Mode.EnglishToPortugese;<br />
&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; reverseMode = GoogleTranslator.Mode.PortugeseToEnglish;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (radioChina.Checked)<br />
&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; {<br />
&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; mode = GoogleTranslator.Mode.EnglishToChina;<br />
&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; reverseMode = GoogleTranslator.Mode.ChinaToEnlish;<br />
&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; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; }<br />
&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; }</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Translate the text and update the display<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblStatus.Text = "Translating...";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblStatus.Update();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoogleTranslator gt = new GoogleTranslator(mode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strTranslation = gt.translate(strEnglish);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; editTranslation.Text = strTranslation;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; editTranslation.Update();</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblStatus.Text = "Reverse translating...";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblStatus.Update();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gt = new GoogleTranslator(reverseMode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strReverseTranslation = gt.translate(strTranslation);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; editReverseTranslation.Text = strReverseTranslation;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblStatus.Text = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
详细的我就不说了，自己开源码吧。</font> </p>
</font></div>
<p><a href="http://blog.crfly.cn/file.axd?file=GoogleTranslator.src.rar" rel="enclosure">GoogleTranslator.src.rar (96.09 kb)</a> <br />
</p>
<p><a href="http://mp3.baidu.com/singerlist/%CD%F5%E8%DD%F6%CE.html" target="_blank"><br />
</a> </p>
</div>
<img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1153000.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42096/" target="_blank">[新闻]微软研究院发布 AutoCollage - 整理并融合照片</a>]]></description></item><item><title>北京俱乐部2008.04.12活动,“微软新技术与架构设计应用"PPT</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/04/13/1150981.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Sun, 13 Apr 2008 01:16:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/04/13/1150981.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1150981.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/04/13/1150981.html#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1150981.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1150981.html</trackback:ping><description><![CDATA[<p align="justify"><font face="Verdana"><font face="Verdana"><font face="Verdana"><font face="Verdana"><img style="width: 482px; height: 362px" height="362" alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaoyin_net/IMG_0018.JPG" width="482" border="0" /></font></font><br />
<br />
内容课程大概包括：<br />
<br />
为什么开发管理者需要了解多种框架<br />
几种常见架构特性介绍<br />
通向架构师之门－Pet Shop架构设计<br />
Web Client Software Factory（WCSF）介绍<br />
WCSF(MVP)架构分析与应用<br />
VS2008中Linq的可视化设计<br />
经验分享<br />
参考资源<br />
<br />
北京俱乐部宗旨是为了更多的.net IT人士无私的奉献，提供一起学<br />
习交流的平台；团结了北京地区MVP与相关技术人员互动的交流技<br />
术和朋友的平台；<br />
<br />
通过各行各业的专家互动，相互学习最新技术和解决工作中带来的技术<br />
和职业规划等困惑；从而扩展了您的职业规划和更多发展机会的平台；<br />
欢迎更多的IT相关人员参加。<br />
<br />
再次感谢老葛、DuDu等朋友无私的奉献。<br />
<br />
另外，北京俱乐部活动后，老葛、王涛和北京俱乐部的MVP，<br />
为博客园另一本图书做了宣传；<br />
<br />
</font><font face="Verdana"></p>
<p>祝贺<a title="Anytao的博客" href="http://anytao.cnblogs.com/" target="_blank">王涛(Anytao)</a>兄弟8个月的创作终于完成，并祝愿图书畅销； </p>
<p><span class="book_press">出版社:</span>电子工业出版社 </p>
<p><span class="book_comment">点评:</span>本书内容通俗易懂，形象生动，以清晰的思路和流畅的文笔揭示了.NET华丽面纱下的奇妙世界， </p>
<p>按照认知规律详尽剖析了众多对初学者而言难以理解的概念。 </p>
<p>&nbsp;另外我有意为博客园增加一本图书，项目、团队管理和架构设计内容的图书；<br />
我和俱乐部的MVP们也在积极准备着。 </p>
<p align="justify"></font></p>
<p><a href="http://blog.crfly.cn/file.axd?file=MicrosoftNet.zip" rel="enclosure">MicrosoftNet.zip (844.31 kb)</a> </p>
</font>
<img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1150981.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42100/" target="_blank">[新闻]2008年9月5日科技博客精选</a>]]></description></item><item><title>发布CodeBuild.Net代码自动生成器 V2008 2.01(Vs2008)和架构实例源码Demo</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/03/16/1108782.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Sun, 16 Mar 2008 13:56:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/03/16/1108782.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1108782.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/03/16/1108782.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1108782.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1108782.html</trackback:ping><description><![CDATA[<font face="Verdana">CodeBuild.Net代码自动生成器 V2008 2.01(Vs2008)<br />
<font face="Verdana">Microsoft Visual Studio 2008开发，需要安装运行库。<br />
<br />
支持生成多标签切换等功能，方便代码生成，以后会抽时间把更多的架构模式与新特性增加进去。<br />
另外，包括<font face="Verdana">架构实例源码Demo</font><br />
<br />
<img style="width: 699px; height: 423px" height="423" alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaoyin_net/CodeBuild.Net.jpg" width="699" border="0" /></font></font>&nbsp;<br />
<br />
<p><a href="http://blog.crfly.cn/file.axd?file=CodeBuildDemo.rar" rel="enclosure">CodeBuildDemo.rar (1.67 mb)</a> </p>
<p><a href="http://blog.crfly.cn/file.axd?file=CodeBuild.Net%e4%bb%a3%e7%a0%81%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90%e5%99%a8+V2008+2.01.zip" rel="enclosure">CodeBuild.Net代码自动生成器 V2008 2.01.zip (1.05 mb)</a> <br />
<br />
俺要下载：<font face="Verdana">http://www.ayxz.com/soft/13764.htm</font></p>
<img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1108782.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42099/" target="_blank">[新闻]SNS网站风靡影响工作效率 公司下令封杀</a>]]></description></item><item><title>Windows Server 2008 的十四大最新功能特性技术总结</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/03/09/1097927.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Sun, 09 Mar 2008 15:08:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/03/09/1097927.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1097927.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/03/09/1097927.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1097927.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1097927.html</trackback:ping><description><![CDATA[<p><font face="Verdana">刚刚安装了Windows Server 2008，简单写一下对微软最新产品的体验。</font></p>
<p><font face="Verdana">1、定制的服务器Server Core。从Windows Server 2008开始，系统中那些不是每个用户都用到的功能将会变成可选安装包，取而</font></p>
<p><font face="Verdana">代之的是预先定义好的系统角色(借鉴Linux的优点)。 </font></p>
<p><font face="Verdana">Server Core是Windows Server 2008中一种全新的安装模式，是针对每个版本的核心服务的安装。Server Core只安装Windows </font></p>
<p><font face="Verdana">Server 2008中最核心的服务程序，并且没有图形界面，所有的操作全部由命令行来完成。Server Core不仅安装的时间要比完全版</font></p>
<p><font face="Verdana">本的Windows Server 2008快很多，由于没有可能用不到的服务和图形界面，Server Core也能为服务器争取更多的性能。如果你的</font></p>
<p><font face="Verdana">服务器是配置好后基本不动的那种，例如DNS服务器、WWW服务器、Data服务器等等，那Server Core就是你最好的选择，你可以把</font></p>
<p><font face="Verdana">Server Core看作是微软为特定服务器开发的定制版本。 </font></p>
<p><font face="Verdana">2、功能强大的Powershell </font></p>
<p><font face="Verdana">Powershell是Windows Server 2008中内置的一个命令行工具，但实际上能够完全取代图形界面的管理工具。Powershell不仅仅是</font></p>
<p><font face="Verdana">Cmd命令的升级，其重要改进有三点：第一，Powershell比Cmd拥有更多的命令，在图形界面中可以完成的功能，Powershell都可以</font></p>
<p><font face="Verdana">实现。这一点熟悉Windows Server 2003的朋友应该很清楚，甚至有些无法用图形界面完成的功能，通过Powershell也可以轻松实</font></p>
<p><font face="Verdana">现。第二，Powershell更好的支持脚本管理，这让服务器的管理效率提高了很多。比如建立新账户这样一个简单的操作，一般是通</font></p>
<p><font face="Verdana">过图形界面来完成的，但是如果现在需要建立1万个新账号或100万个新账号，恐怕用图形界面建立就需要很长很长的时间了。这种</font></p>
<p><font face="Verdana">情况下我们可以建立一个脚本，将变量设置成1到100万，再通过Powershell导入脚本运行就可以了。第三，Powershell可以和微软</font></p>
<p><font face="Verdana">今后的几乎所有产品进行衔接。例如对微软Exchange的管理，就可以通过Powershell管理Exchange设置好的脚本来完成。如果将</font></p>
<p><font face="Verdana">Exchange的典型问题解决方案做成脚本，那服务器就可以通过Powershell来完成众多服务器的远程监控和自动解决问题了。</font></p>
<p><font face="Verdana">3、图形的管理中心Server Manager(Windows Server 2008功能异常强大的配置中心) </font></p>
<p><font face="Verdana">Windows Server 2008的Administrator的登录口令安全性提高了很多，你必须使用数字+字母+特出字符或者区分大小写的组合进行</font></p>
<p><font face="Verdana">口令的设置。</font></p>
<p><font face="Verdana">除了Powershell可以对Windows Server 2008进行管理外，Server Manager也可以通过图形的界面对Windows Server 2008进行全面</font></p>
<p><font face="Verdana">的管理。Server Manager的改进之处在于将Windows Server 2003中的各类管理工具，集中展示在一个管理平台之中，大大方便了</font></p>
<p><font face="Verdana">用户对Windows Server 2008的控制。Server Manager还更多的使用了欲知功能来猜测用户的点击意图，以前我们往往会出现想完</font></p>
<p><font face="Verdana">成一个功能，但不记得去那个界面进行设置的情况。所有Server Manager大量的使用超链接，只要用户按照超链接的提示点击，就</font></p>
<p><font face="Verdana">可以找到想要功能的界面了。</font></p>
<p><font face="Verdana">4、更细致的账户权限划分 </font></p>
<p><font face="Verdana">Windows Server 2008在账户权限的划分上也做了很大的调整。在使用Windows Server 2003的时候经常会出现账户权限过大的问题</font></p>
<p><font face="Verdana">，如果赋予一个账户几个权限后往往就要将这个账户放到Administrator的组中，这样这个账户就得到了Administrator组的所有权</font></p>
<p><font face="Verdana">限了。Windows Server 2008在账户权限的划分上更细致了，可以让管理员准确控制账户的权限和更好的管理。 </font></p>
<p><font face="Verdana">5、脱胎换骨的IIS7.0 </font></p>
<p><font face="Verdana">一直以来微软的用户对IIS6.0和IIS5.0都不是很满意，也一直以来期盼微软能发布一个功能更全、性能更强大的IIS服务平台。用</font></p>
<p><font face="Verdana">微软的话来讲，IIS7.0是在IIS6.0的基础上作了翻天覆地的改进，现在的IIS7.0可以算是一个成熟的强大的Web平台了。首先，</font></p>
<p><font face="Verdana">IIS7.0的所有功能全部模块化，而IIS6.0的所有功能是1个模块，这在IIS7.0中，某一个模块受损，不会影响其他模块提供的服务</font></p>
<p><font face="Verdana">的运行。其次，IIS7.0中内部文件的复制技术采用了X拷贝技术，效率比IIS6.0提升了很多，尤其是在大数据量的拷贝情况下提升</font></p>
<p><font face="Verdana">更为明显。Internet Information Services 7.0 简化了 Web 服务器管理。该模块化平台提供了简化的、基于任务的管理界面、</font></p>
<p><font face="Verdana">更好的跨站点控制、安全增强以及集成的 Web 服务健康管理。</font></p>
<p><font face="Verdana">Windows Server 2008 为 Web 发布提供了一个统一平台，该平台集成了 Internet Information Services (IIS) 7.0、ASP.NET、</font></p>
<p><font face="Verdana">Windows 通信基础、Windows Workflow Foundation 和 Windows SharePoint Services 3.0。IIS 7.0 是对现有 Windows Web 服</font></p>
<p><font face="Verdana">务器的主要增强在平台技术集成中，扮演着中心角色。IIS 7.0 通过委派管理、增强的安全性和缩小的攻击面、Web 服务的集成应</font></p>
<p><font face="Verdana">用程序和健康管理以及改进的管理工具等关键功能，帮助开发人员和管理员等最大限度地提高对网络/Internet 接口的控制。</font></p>
<p><font face="Verdana">6、Windows Server虚拟化(全面的虚拟化技术)。微软的Windows Server 2008中将会集成虚拟化功能。 </font></p>
<p><font face="Verdana">微软在并购Virtual PC后，虚拟化技术就成为了Windows Server 2008最大的一个看点。微软在Windows Server 2008展示的虚拟化</font></p>
<p><font face="Verdana">技术不仅仅是Virtual PC虚拟机这么简单，而是服务器虚拟化、桌面虚拟化、应用程序虚拟化和展现层虚拟化的一个整体。微软专</font></p>
<p><font face="Verdana">门开发的Hyper-V(这项技术称作管理技术，是Windows Server 2008发布版的虚拟化技术的基础)技术，加上自家的Windows Server </font></p>
<p><font face="Verdana">2008和Virtual PC估计能让虚拟技术运行更迅速。其应用程序虚拟化可以让应用程序通过往上的发布，完全的为远程用户提供服务</font></p>
<p><font face="Verdana">。例如，你到临时到网吧处理工作，而网吧的计算机上没有安装Word，这种情况在以前就很难解决了。通过应用程序虚拟化技术，</font></p>
<p><font face="Verdana">你就可以登录你企业发布的授权程序，远程的使用虚拟化程序完成操作了。虚拟化技术也能够使用虚拟机技术在一台物理服务器上</font></p>
<p><font face="Verdana">运行多个操作系统。同一台服务器能够多种版本的不同的操作系统，如Windows和Linux等。</font></p>
<p><font face="Verdana">而服务器整合则是其主要的应用场景之一。服务器整合可以极大地提升服务器的利用率（从原本的10~20%提升到60~70%）、可以很</font></p>
<p><font face="Verdana">好地节省服务器采购的费用、可以大大节省电费和降温费用（每台服务器每年的电费和降温费用，超过服务器投资的1/3），更重</font></p>
<p><font face="Verdana">要的是，服务器整合还可以大大提高服务响应的速度。</font></p>
<p><font face="Verdana">问题：一台物理计算机只安装一个关键业务程序。一旦物理硬件损坏，只会影响到该服务器上的关键业务。而采用服务器整合的虚</font></p>
<p><font face="Verdana">拟化技术后，物理主机上可能同时运行多台虚机（每台虚机里跑一个关键业务程序），多个虚机之间可以实现安全隔离。</font><font face="Verdana">这好比把<br />
所有的鸡蛋放在一个篮子里，一旦物理主机硬件损坏，其上的多台虚机，及其中运行的关键业务都会同时中断。&nbsp; </font></p>
<p><font face="Verdana">解决：Hyper-V则支持高可用性群集功能，不管是有计划的主机维护、还是突发的硬件故障，虚机都可以在另外一台主机上快速重</font></p>
<p><font face="Verdana">启，而且服务中断的时间很短，几乎可以忽略不计。</font></p>
<p><font face="Verdana">7、自修复NTFS文件系统。自从DOS时代开始，如果文件系统中发生文件出差问题就意味着磁盘需要脱机进行修复。而在Windows </font></p>
<p><font face="Verdana">Server 2008中，在后台运行的服务能够检测到文件系统的错误并在发现文件出差的情况下启动一个修复进程，而期间并不需要关</font></p>
<p><font face="Verdana">闭服务器。 </font></p>
<font face="Verdana">
<p><br />
8、并行会话创建。在Windows Server 2008之前的系统中，会话创建是一个串行操作。而在终端服务系统中，串行初始化会话会导</p>
<p>致系统出现瓶颈。而这个在Vista和Windows Server 2008中提供的新会话模型至少能够同时对四个会话进行初始化，而且如果服务</p>
<p>器的处理器多于四个时还能够同时初始化更多的会话。 </p>
<p><br />
9、干净的关闭服务。Windows中一个历史性遗留问题是系统关机的过程问题。在XP中，一旦关闭过程开始，系统就会启动一个历时</p>
<p>20秒的计数器。当计数开始后，系统就会向用户发出信号询问是否用户自己中止应用程序。对于Windows Server来说，相同的20秒</p>
<p>机制变成了应用程序的存活时间。 </p>
<p><br />
在Windows Server 2008中这个20秒倒数的机制已经被一个新的服务取代，这个服务会控制应用程序不断的发送程序需要关闭的信</p>
<p>号，只要程序不断保持发送信号那么程序最终会关闭。某些开发人员可能会顾虑这个新服务会让应用程序耗掉太多资源，但从实际</p>
<p>情况看来，性能方面的牺牲物有所值。 </p>
<p><br />
10、内核业务管理器。开发人员可以好好利用这个功能，它能够极大的减少最容易导致系统注册表和文件系统崩溃的发生次数：这</p>
<p>是由于有多个线程同时访问某个资源引起。 </p>
<p><br />
在正式的数据库中，修改过的指令集按顺序先保存在内存中，跟着作为一个业务一次性提交。这种情况下，用户并不能获得数据库</p>
<p>被修改过程中的快照，这些修改看起来是同时进行的。而这一功能最终在Vista和Windows Server 2008的系统注册表中被利用。 </p>
<p><br />
11、SMB2网络文件系统。很久很久以前，SMB就被用作Windows的网络文件系统。而现在，SMB在灵活性、高性能方面已经力不从心</p>
<p>，因此SMB2取而代之。根据内部测试结果显示，在媒体服务器上SMB2的性能是Windows Server 2003的30到40倍之多。 </p>
<p><br />
12、地址空间随机加载(ASLR)。自从它在Vista露面以来，可能这个功能是所有新增功能中最受争议的功能了。ASLR确保同一时间</p>
<p>，在内存中同一区域没有两个相同的操作系统实例被加载。 </p>
<p><br />
13、Windows硬件错误架构(WHEA)。微软最终对硬件错误信息进行了标准化，利用这些面向硬件统一使用相同套接字接口报告的错</p>
<p>误信息，第三方的软件能够方便的迁移并管理问题。 </p>
<p><br />
14、灵活的安全性。Windows Server 2008提供更强的内置安全功能，主要包含BitLocker、RMS、增强防火墙、RODC(Read Only </p>
<p>Domain Controller)、NAP(Network Access Protection)几个方面。BitLocker这个功能，对整个磁盘做加密，Vista中也有此功能</p>
<p>。RMS对所有的Office文档做管理控制，即便文档已经发送给他人，已经不在所有者的手里，所有者仍然可以控制该文档如何被他</p>
<p>人访问。内置的增强防火墙，功能非常强大，管理员可以根据网络不同设置不同的安全策略，如家庭环境与办公环境相比，可能需</p>
<p>要的安全策略就不同。RODC适用于有分支机构的公司，有些分支机构的物理环境不够安全，通过该功能，可以在这种情况保证安全</p>
<p>性。<br />
</font></p>
 <img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1097927.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42098/" target="_blank">[新闻]《孢子》正式发布</a>]]></description></item><item><title>基于Web Services建立Asp与Asp.Net之间Session数据桥的应用研究</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/21/1046641.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Sun, 20 Jan 2008 16:54:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/21/1046641.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1046641.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/21/1046641.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1046641.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1046641.html</trackback:ping><description><![CDATA[<span  style="color: #444444; font-family: tahoma; font-size: 12px; line-height: 17px; ">本文的目的在于提供一种可行的解决方案通过Web Service技术来整合和管理现有的Asp程序到Asp.Net。 此应用解决
<p>方案尽可能从实际出发以迭代更新方式的策略把Asp Web服务器内存中的当前Session更新到Asp.Net。</p>
<p>背景:</p>
<p>现有公司的产品OA是采用asp早先的技术开发，需要与目前最新的asp.net产品进行数据交互的应用。现有的asp应用程序</p>
<p>往往采用&#8220;ASP sessions&#8221;，这是一种经典的asp内置模式，即允许数据临时暂存在web服务器内存中，其最大的限制因素就</p>
<p>是asp的session状态是依赖具体的服务器。而另一个更宽范围的解决方案就是很多web服务器都可能别用于根据请求而指向的</p>
<p>任何网络服务器。实际上就是所有的web服务器都像在一个农场中，因而任何在内存中的session状态将不会自动跟随请求。每</p>
<p>个asp服务器提供自己的session状态，除非用户很凑巧的返回统一服务器，造成系统session丢失。</p>
<p>&#160;&#160;&#160;&#160;&#160; 通过使用服务器管理产品（如bigip）来强制用户会同意服务器内的web农场来解决内存中asp seesion因服务器关系而造</p>
<p>成的问题。为了达到这个目的，采用一个cookie在客户端工作，在服务器端来使用，让用户直接可以回到同一个服务器上的</p>
<p>每个reqeust。这样可以限制扩展性，提高可维护性，避免服务器故障的风险（例如：session丢失服务器 失败）。<br />
&#160;<br />
&#160;&#160;&#160;&#160; 　微软Asp.net技术的出现终于解决了这个问题，可以让我们来存储session信息到web server和database或者其他域</p>
<p>server。不错，问题解决了，我们还有必要用asp代码吗？全部扔掉？如果这样做的话就会需要很大代价去重新使用.net来</p>
<p>重写asp。看来还是不可行。另一种比较好的解决方案就是用迭代方法来部分移植代码到新的模型胜过重写asp代码，在这</p>
<p>个过程中如果旧的ASP代码和新的asp.net代码可以有一个共同的session状态而保持正常的工作，那么在整个生命周期中</p>
<p>将会有益于你更好的规避风险.以下提供了几个解决方案从此略上来解决当采用经典的asp sesssion因服务器关系而造成的</p>
<p>问题。</p>
<p>1、用户自定义组或者使用Asp/ADO脚本去实现直接读写用户session数据到数据库；</p>
<p>2、用户自定义组件去直接访问asp.net seesion数据；</p>
<p>3、通过web servieces建立asp到asp.net的桥共享session；&#160;</p>
<p>在本文中，我们将讨论最后一种方案，其中也会包括一些web services与asp/ADO定制数据库，和asp session 池的基本</p>
<p>性能数据比较，呵呵...看完后你自己选择用哪个。</p>
<p>ASP to ASP.NET Bridge / Web-Service 方案</p>
<p>此方案中只是简单的实现了一个从asp到asp.net的web services桥梁，如果你需要用数据库，只需要进行简单的配置（web.</p>
<p>congfig和aspState 数据库）。代码中用来获得和设置session数据的方法写在一个javascirpt中，该文件必须保存在本地asp</p>
<p>程序中。</p>
<p>此javascirpt实现MSXML， http功能以便和server端交互，并负责将这些cookie回收给用户工作站。</p>
<p>优点：</p>
<p>支持与服务器无关的web-farm部署，提高可扩展性简单的实现asp和asp.net的共同session状态松耦合，以sessioni管理</p>
<p>（无连接的HTTP接口， 80端口，可防火墙等）利用久经时间考验的asp.net session实施。</p>
<p>缺点： 比asp session 内存池实现和数据库实现会慢。</p>
<p>&#160;</p>
<p><img src="http://blog.crfly.com/image.axd?picture=ASPWS.gif" alt="" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></p>
<p>&#160;</p>
<p>Asp内存共享机制:</p>
<p>&#160;&#160;&#160;&#160; Session是采用类似字典或者哈希表的形势保存在web server内存中，ASP会保持session状态，提过一个特别的key给</p>
<p>用户，当session会话开始时，这个key将保存cookie来纪录客户端发送到服务器的每一项请求，在服务器端，获得cookie</p>
<p>的key,就可以知道request对应的session.这种机制的一个明显的优势就是速度和方便，所有的session都会在一台服务器上</p>
<p>保存，所以很开，但是正如前面所说的，将数据保存在一台服务器也是一个重大缺点，迫使用户返回同一台服务器检索</p>
<p>session数据。这个减少了webform的优势，它只是一种低成本，大淘汰的策略，如果你只想实现简单功能，就可以用它。</p>
<p>优点：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; 内存纪录seesion,速度快,使用标准的ASP代码基础利用久经时间考验的ASP session实施。</p>
<p>缺点：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;它承载的能力有限，无法大规模开展网络农场（服务器依赖度高） ,服务器故障导致session丢失，内存占有率太大。</p>
<p>&#160;</p>
<p><img src="http://blog.crfly.com/image.axd?picture=ASPDB.gif" alt="" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></p>
<p>&#160;</p>
<p>Asp/ADO数据库实现解决方案</p>
<p>&#160;&#160;&#160;&#160;&#160; 建立了一个数据库连接之间的ASP应用服务器和数据库服务器。使数据被存在一个中央数据库或者数据库集群，然后分</p>
<p>别从不同的服务器上的asp程序执行。本文种只给出方案。获取和设置session的代码可以被放进一个javascirpt文件中，支</p>
<p>持基于webservices获取的方法，允许asp取代javascirpt定制数据库模式，直接访问asp.netsession数据（如建立aspstate</p>
<p>数据库）。</p>
<p>优点：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160; 1、支持不依赖服务器的webform部署；</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160; 2、比asp.net Web服务更快；</p>
<p>缺点：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160; 1、代码为定制执行(比较死板)；</p>
<p>&#160;&#160;&#160;&#160;&#160; &#160;2、比内存共享ASP sessions 慢；</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160; 3、需要数据库连接，从网络服务器到数据库服务器；</p>
<p><img src="http://blog.crfly.com/image.axd?picture=ASPClassic.gif" alt="" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></p>
<p>性能：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;在下面数据中，列出了每种方案的性能比较，强调的是内存共享aspsession池最快小型用户可以使用，采用数据库的话</p>
<p>也会增加额外的开支，增加成本（除非你很有钱）。减 少网络回传，服务器请求是提高性能的唯一方法，微软的Web应用程</p>
<p>序压力工具，是用来执行测试压力水平的25个线程为1分钟的时间从表中可以明显的看出用内存存储aspsession比另外两种方</p>
<p>式更快。</p>
<p>Method Get Data (ms) Set Data (ms)<br />
&#160;5 values 1 value 5 values 1 value<br />
In-memory ASP Sessions 46 9 34 7<br />
ASP/ASP.NET web service individually 4321 864 3397 679<br />
ASP/ASP.NET web service grouped 711 142 990 198<br />
ASP/ADO database individually 346 69 841 168<br />
ASP/ADO database grouped 163 33 860 172</p>
<p>代码描述ASP机制，在asp中创建sessioni 如下：</p>
<p>Session("Sky") = "Blue";<br />
在其他的页面中访问这些值采用：<br />
var skyString = Session("Sky");</p>
<p>新的API语法：</p>
<p>下面的语法将会代替原来的asp session 语法，目的是在桥的使用中javascript 函数可以进行封装<br />
设置一个关键值对；<br />
设置一个kye-value 类型session 数据，语法和值钱的asp Session 语法很相似，采用下面的代码可以把现有的设置asp session代码替换；</p>
<p>设置sessioni数据：<br />
SetSessionValue("Sky", "Blue");<br />
获取 session :&#160;<br />
var SkyString = GetSessionValue("Sky");<br />
这种方法建议在设置比较少的情况下用<br />
设置多个key-valus对值<br />
这些方法的最大开销在于设置每一个key-value，然后返回给webservice,推荐用以下方法来设置（当超过3对以上的key-values)<br />
设置session<br />
var sessionInfo = NewSession();<br />
sessionInfo.Add(&#8220;Sky&#8221;, "Blue");<br />
sessionInfo.Add(&#8220;Grass&#8221;, &#8220;Green&#8221;);<br />
<br />
SetSession(sessionInfo);</p>
<p>获得session<br />
var sessionInfo = GetSession();<br />
var skyString = sessionInfo.Item(&#8220;Sky&#8221;);<br />
var grassString = sessionInfo.Item(&#8220;Grass&#8221;);<br />
<br />
Java Script Example<br />
&lt;%@ Language="JScript" %></p>
<p>&lt;script language="JScript" runat="server" src="ASPSessionWS.js" /></p>
<p>&lt;%<br />
&#160;&#160;&#160; var sessionInfo = NewSession();<br />
&#160;&#160;&#160; sessionInfo.Item("Sky") = "Blue";<br />
&#160;&#160;&#160; sessionInfo.Item("Grass") = "Green";<br />
&#160;&#160;&#160; SetSession(sessionInfo);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<p>&#160;&#160;&#160; var retrievedSession = GetSession();<br />
&#160;&#160;&#160; var sSky = retrievedSession.Item("Sky");<br />
&#160;&#160;&#160; var sGrass = retrievedSession.Item("Grass");</p>
<p>&#160;&#160;&#160; Response.Write(sSky + "&lt;br>");<br />
&#160;&#160;&#160; Response.Write(sGrass + "&lt;br>");<br />
%></p>
<p>Visual BASIC Example<br />
&lt;%@ Language="VBSCRIPT" %></p>
<p>&lt;script language="JScript" runat="server" src="ASPSession.js" /></p>
<p>&lt;%<br />
&#160;&#160;&#160; Dim sessionInfo&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; Set sessionInfo = NewSession()<br />
&#160;&#160;&#160; sessionInfo.Item("Sky") = "Blue"<br />
&#160;&#160;&#160; sessionInfo.Item("Grass") = "Green"<br />
&#160;&#160;&#160; SetSession(sessionInfo)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</p>
<p>&#160;&#160;&#160; Dim retrievedSession<br />
&#160;&#160;&#160; Set retrievedSession = GetSession()<br />
&#160;&#160;&#160; Dim sSky<br />
&#160;&#160;&#160; sSky = retrievedSession.Item("Sky")<br />
&#160;&#160;&#160; Dim sGrass<br />
&#160;&#160;&#160; sGrass = retrievedSession.Item("Grass")</p>
<p>&#160;&#160;&#160; Response.Write(sSky &amp; "&lt;br>")<br />
&#160;&#160;&#160; Response.Write(sGrass &amp; "&lt;br>")<br />
%></p>
<p>Web Service 实现代码</p>
<p>此webservice有4个简单方法组成，它支持再asp.net sessioni中设置和获得单独的values，以及简化通过装载xml来设置</p>
<p>session变量的复杂度。</p>
<p>public string getSessionValue(string sessionVariable)<br />
public bool setSessionValue(string sessionVariable, string sessionValue)<br />
public string getSessionValues()<br />
public bool setSessionValues(string xmlSessionValues)<br />
为了让asp.net web service能够来支持创建和维护sessions,要通过下面包含在每个方法中的属性，这将返回一个asp.net_</p>
<p>sessionID的cookie到响应中可以作为使用asp Session代码的桥。</p>
<p>[WebMethod(EnableSession=true)]</p>
<p>你也可以增加很多webservices接口来实现其他你想要的功能。</p>
<p>ASP 桥的实现:</p>
<p>Asp端的桥，其实就是一个依赖msxml2.serverXMLhttp COM接口为访问web services的服务端和Scripting.Dictionary 提</p>
<p>供一个哈希表。在当前页中保持一个临时的副本session.</p>
<p>var xmlHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP");<br />
xmlHTTP.open("POST", sURL, false);&#160;&#160;&#160;&#160;<br />
var clientCookie = "" + Request.Cookies("ASP.NET_SessionId");<br />
xmlHTTP.setRequestHeader("cookie", "ASP.NET_SessionId=" +&#160;<br />
&#160; clientCookie + "; path=/;");<br />
.<br />
.<br />
.<br />
Response.Cookies("ASP.NET_SessionId") = httpCookie;<br />
字典对象转化<br />
var dctSession = new ActiveXObject("Scripting.Dictionary");<br />
var re = new RegExp("&lt;SessionItem ", "g");<br />
部署<br />
文件aspseesionws.js必须放在asp程序下，并且在asp.net程序中写上如下代码<br />
&lt;script language="&#8221;Jscript&#8221;" runat="&#8221;server&#8221;" src=&#8221;\Script\ASPSessionWS.js&#8221; ><br />
&lt;/script><br />
采用80端口访问web server,在脚本文件中写如下函数，用来维护session状态<br />
function GetWebService(Function, Parameters)<br />
{<br />
&#160;&#160;&#160; var xmlPayload = "";<br />
&#160;&#160;&#160; var sURL = "<a href="http://www.fullerdata.com/ASPBridge/bridge.asmx" style="text-decoration: none; color: #5c80b1; background-image: url(http://blog.crfly.com/pics/remote.gif); background-repeat: no-repeat; background-attachment: initial; background-color: initial; padding-right: 10px; white-space: nowrap; background-position: 100% 0%; ">http://www.xxxx.com/ASPBridge/bridge.asmx</a>" + "/" +&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; Function;</p>
<p>总之，采用webservice 建立从遗留的asp session 到新的asp.net 的session，只要的目的是为了采用新的技术整合旧的程序，</p>
<p>允许2个程序共享一个session内容，虽然性能很重要，但是目前还没有更完美的方法完全的把原有程序整合进.net。</p>
</span>
<p>示例下载:<a href="http://blog.crfly.cn/file.axd?file=ASPBridge.rar" rel="enclosure">ASPBridge.rar (5.59 kb)</a> </p>
<img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1046641.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42097/" target="_blank">[新闻]微软CFO:仍对收购雅虎搜索业务感兴趣</a>]]></description></item><item><title>微软Asp.Net架构与项目团队管理建设模型分析</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/20/1045966.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Sat, 19 Jan 2008 19:26:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/20/1045966.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1045966.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/20/1045966.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1045966.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1045966.html</trackback:ping><description><![CDATA[<p>Microsoft Visual Studio 2008 RTM版本已经发布好久了，最近的项目准备用最新的微软技术Microsoft Visual Studio 2008 </p>
<p>RTM ＋Microsoft SQL Server Compact 3.5＋Microsoft SQL Server 2005模型来实现；好的Team应该有学习新技术的探 </p>
<p>索精神， 一个好的管理者，作用和能力不一定是技术狂人，但一定是懂得管理并不断掌握最新技术的人；能在不同的环境， </p>
<p>采用适合 团队的不同的管理方法，（包括用新技术解决技术题，导引事物发展方向），微软人性化的管理方法，使项目组成 </p>
<p>员没有压抑 工作感（愉快的工作），管理目的是使项目组成员在能 把整个团队的探索精神和积极性调动起来，创建一个好 </p>
<p>的工作和学习氛 围，制定一定的宽松的规则，每个人都自觉的遵守和工作，把团队中每个人潜力挖掘出來，发挥到最大， </p>
<p>以一当十，有很强的 向心力并能够帮助团队每个成员确定适合自己的职业规划，这就是一个成 功管理者的价值体现之一。 </p>
<p>微软团队的建设上，不同方式的沟通就是Team具有凝聚力和战斗力的法宝。 </p>
<p>微软方向优秀项目管理者，不能不熟悉MSF(<strong>Microsoft Solutions Framework </strong>)：它是一组建立、开发和实现分布式 </p>
<p>企业系统应用的工作模型、开发准则和应用指南。它帮助企业融合商业和技术的目标，降低采用新技术后系统整体的费用， </p>
<p>以及成功的应用微软技术整合商业过程控制的方法。 </p>
<p>结合很清晰的管理理念，会很轻松的管理好整个团队的项目任务。CodeSmith Professional 是非常优秀的代码生成工具， </p>
<p>它的特点是可编程、可复用、灵活方便的可编程的代码生成工具，它是团队建设模型中不可缺少的武器之一。项目管理者、 </p>
<p>架构师，掌握CodeSmith编程和应用，把你的架构思想智慧融入到工具模板载体中，可以让你的Team不同技术能力的成员， </p>
<p>写出高质量的代码。 </p>
<p><img style="width: 733px; height: 603px" height="603" alt="" src="http://blog.crfly.cn/image.axd?picture=Snap%e9%a5%bf1.jpg" width="733" />&nbsp; </p>
<p>微软Asp.Net架构设计结合项目团队管理建设模型分析设计，我们可以用Pet Shop架构为示例，来组织团体开发模型。 </p>
<p>微软的Microsoft .NET Pet Shop 4.0架构设计，是一个非常优秀的示例；我们可以抽象出它的架构设计，编写CodeSmith模板代码， </p>
<p>生成 符合你的项目，含有架构模式的代码： </p>
<p><img height="273" alt="" src="http://blog.crfly.cn/image.axd?picture=Snap2.jpg" width="437" />&nbsp;&nbsp; <img height="284" alt="" src="http://blog.crfly.cn/image.axd?picture=Snap81.jpg" width="296" /> </p>
<p>&nbsp; </p>
<p>petshop项目示例架构图： </p>
<p><img height="330" alt="" src="http://blog.crfly.cn/image.axd?picture=3.jpg" width="693" /> </p>
<p>Petshop是完全基于面对接口的编程模式，适合团队协同开发，纵向引擎存储的方式编写代码；代码清晰度高，即使是初级程序员 </p>
<p>也会很快的 熟悉架构，轻松短时间上手；可以较少项目开始后的人员流动所带来的风险；缺点是分层太多，不适合单人开发的项 </p>
<p>目，但是可以采用 CodeSmith来代替繁琐重复的基类接口实现的工作。 </p>
<p><img height="321" alt="" src="http://blog.crfly.cn/image.axd?picture=hhh.jpg" width="738" /> </p>
<p>上图是Asp.Net petshop架构缓存与反射机制工厂模式时序图; </p>
<p>写到这，作为项目经理或者系统架构师的您，是否能总结出一套适合你们团队自己的&#8220;Asp.Net架构与项目团队管理建设模型&#8221;呢? </p>
<p>hehe... </p>
<p>下图是，我为团队编写的代码生成器，采用Microsoft Visual Studio 2008开发，支持多标签Vista风格，原打算结合更多的3.5新架 </p>
<p>构代码特性，生成Linq等代码，由于工作时间紧张只能以后慢慢开发吧；过几天修改好程序BUG，我会发上来给大家共享。 <br />
<br />
<img style="width: 744px; height: 571px" height="571" alt="" src="http://blog.crfly.cn/image.axd?picture=ffffsd.jpg" width="744" />&nbsp;</p>
<img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1045966.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42095/" target="_blank">[新闻]SQL Server2008十月亮相 标榜智能数据平台</a>]]></description></item><item><title>Silverlight整合Asp.net AjAX的技术应用</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045863.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Sat, 19 Jan 2008 15:43:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045863.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1045863.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045863.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1045863.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1045863.html</trackback:ping><description><![CDATA[摘要: Silverlight 将支持开发人员在创建丰富的web应用程序，我们即将看到web应用的一个在视觉是很有吸引力的浪潮的到来， <br><br>网页将能够利用灵活的媒体播放，动画和矢量图形绘制。这将有利于扩展web应用。本文描述的是一个股票跑马灯的例子。 <br><br>本例选择一个代码为3209的应用股票作为样本，它可以嵌入到现有的代码，并且提供一个比html marquee标签更好查 <br><br>看的ticker。为了能够让用户得到最多的价值，需要有效地通过互联网从服务器获得信息进行交易。 本文将讨论通过整合 <br><br>silverlight和asp.net AjAx来创造一个丰富的b/s应用。同样通过其他途径也能创造出类似的视觉效果，本文的主要焦点是 <br><br>如何这两项技术。通过ajax不断获取新的股票信息抛给silverlight来展现。<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045863.html'>阅读全文</a><img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1045863.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42091/" target="_blank">[新闻]淘宝将与阿里妈妈合并 大淘宝战略启动</a>]]></description></item><item><title>Visual Studio 2008和ASP.NET 3.5的最新技术探索</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045832.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Sat, 19 Jan 2008 14:40:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045832.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1045832.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1045832.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1045832.html</trackback:ping><description><![CDATA[<h1><span style="font-size: 10pt">ASP.NET 3.5 and Visual Studio 2008为基于Web的开发和设计，带来了巨大的功能性变化，这使得创建标准Web程序比以前更 </span></h1>
<div class="postcontent">
<p>容易。 在运行时中包含的ASP.NET AJAX，增加了新的控件，新的LINQ数据数据能力，增强了对CSS、JavaScript和其他内容 </p>
<p>的支持，Web开 发人员从此迈出了更为重要的一步。 </p>
<p>1、使用AJAX，开发人员可以快速的创建灵活多变、快速响应得用户界面，而实现这些功能，只需要在页面中添加几个服务器控件， </p>
<p>以前AJAX 只是ASP.NET运行时的一个扩展，现在它被集成在.NET平台上，而且能够完成更负责的跨平台任务，创建标准的AJAX </p>
<p>应用程序变得更简单。 </p>
<p>2、<strong>LINQ解决对象与数据对应的问题</strong> </p>
<p>NET Framework 3.5中增加了LINQ查询语言，以前我们在使用SQL查询字符串时总是容易出错；现在，LINQ为C#和VB提供了更 </p>
<p>安全的架构，并提供更智能的支持。对于Web应用程序，ASP.NET中的LinqDataSource数据源控件允许我们轻松的去查询、过滤 </p>
<p>等数据操作。.NET Framework 3.5其他的特性还包括：HashSet集合，DateTime offset支持，diagnostics异常（诊断）处理， </p>
<p>garbage（垃圾回收）集合，更好的线程锁定支持等等。&nbsp; </p>
<p><a href="javascript:ToggleImages('234332002',%20'382541002');"><img height="234" alt="图 1 LINQ 体系结构" src="http://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/zh/fig01.gif" width="332" border="0" /></a> </p>
<p>　　对象导向是目前程序开发的主流技术，当关系型数据库对应到对象导向的开发方法，要以对象导向的展现方式，存取关系型数据 </p>
<p>库，若没有工具的协助，必须付出相当的成本。一般数据库的应用，结合或参照多个数据表是很普遍的需求，但是利用对象导向技术 </p>
<p>，要实时且灵活的运用资料，目前仍是很费工的事情。针对这样的问题，目前有架构(Framework)层级与程序语言层级两种解决方案 </p>
<p>。 目前网络上开放源码的Hibernate、Borland的ECO(Enterprise Core Objects)、微软未来将推出的ADO.NET vNEXT，均是架构 </p>
<p>层级的 O/R Mapping(对象与关连式数据库对应)解决方案。架构层级O/R Mapping的缺点，在于除错不易，数据对应、属性设定的 </p>
<p>错误，以及 对象查询语言 (Object Query Language)的错误，在执行阶段才会发现问题 </p>
<p>3、在.NET Framework 3.5中，WCF支持创建Web服务（被大多数网络标准协议支持，如SOAP,RSS,JSON,POX等），无论你是 </p>
<p>使用 JSON开 发AJAX程序，还是RSS，或是标准的SOAP Web服务。&nbsp;WCF使你可以轻松的创建终端程序，现在，.NET Framew </p>
<p>ork 3.5 还支持在局部信 任领域（类似一个典型的主机共享环境）创建Web服务。 </p>
<p>4、Visual Studio 2008提供了新的界面，这也算是VS一贯的做法了（界面风格每次都在变）。VS2008去除了设计器和源代码视 </p>
<p>图， 这 使得打开 VS2008的界面比以前更快。新的分割视图，允许你编辑HTML源代码，并查看页面效果。对层叠样式表的支持 </p>
<p>能力大大 增强 。控件的样式可以 立刻显现出来，这也是鼎鼎大名的WYSIWYG（所见即所得），并且VS2008支持嵌套母版页 </p>
<p>开发。&nbsp;&nbsp;在VS2008中，客户端不再仅仅支持标准JavaScript的对象，而且能自动地显示那些自定义的变量和方法，更强的脚本调 </p>
<p>试功能。 </p>
<p>5、在以前的VS中，你只能创建一个版本下的工程（如只能创建2.0版本或1.1版本），在VS2008中，我们可以包含多个版本了， </p>
<p>通过 一个 简单的下 拉操作，你就可以决定要创建哪个版本下的项目（包括2.0，3.0，3.5）。不管采用哪个版本，你都可以 </p>
<p>使用 VS2008提供的新 功能，如在Web开 发中，你可以在旧的项目中，使用VS2008提供的对JavaScript的支持。 </p>
</div>
 <img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1045832.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42091/" target="_blank">[新闻]淘宝将与阿里妈妈合并 大淘宝战略启动</a>]]></description></item><item><title>基于元数据驱动模型架构在ASP.Net的应用研究</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045761.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Sat, 19 Jan 2008 13:18:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045761.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1045761.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045761.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1045761.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1045761.html</trackback:ping><description><![CDATA[<div class="postcontent">
<div class="postcontent">
<p>目前流行的asp.net架构很多，有开源的有模式与实践(Microsoft patterns &amp; practices)小组的开源项目Web Service </p>
<p>Factory,Nhibernet, Nbear　ORM, Petshop等架构； 下面我又介绍另一种基于元数据(XML)架构，在ASP.net2.0的程 </p>
<p>序应用，而且这种架构目前很多 IT公司使 用较少，它的特点灵活度较高， 简单高效，方便的IOC依赖注入，对象 间 </p>
<p>解偶性好，开发效率较高，可以结合微软企业库进行 高效率的存储。 我在微软互联星空项目中，微软有很好的成功案例。 </p>
<p><img height="344" alt="" src="http://blog.crfly.cn/image.axd?picture=2.png" width="533" />&nbsp; </p>
<p>总体思想是采用XML（Template模板）进行权限控制，参考下图： </p>
<p><img style="width: 754px; height: 587px" height="587" alt="" src="http://blog.crfly.cn/image.axd?picture=gg1.jpg" width="754" /> </p>
<p>首先在Global.asax设置全局对象，系统启动后会把相关持久对象装入内存，提高系统运行速度： </p>
<p>相关代码如下： </p>
<p>&lt;%@ Application Language="C#" %&gt;<br />
&lt;%@ Import Namespace="Microsoft.XXXXX.Advertising.SystemFrameWork" %&gt; </p>
<p>&lt;script runat="server"&gt; </p>
<p>&nbsp;&nbsp;&nbsp; void Application_Start(object sender, EventArgs e) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SystemVM VM = new SystemVM();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Application.Lock();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Application["VM"] = VM;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Application.UnLock();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; void Application_End(object sender, EventArgs e) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; 在应用程序关闭时运行的代码 </p>
<p>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; void Application_Error(object sender, EventArgs e) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 在出现未处理的错误时运行的代码 </p>
<p>&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp; void Session_Start(object sender, EventArgs e) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 在新会话启动时运行的代码 </p>
<p>&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp; void Session_End(object sender, EventArgs e) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 在会话结束时运行的代码。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // InProc 时，才会引发 Session_End 事件。如果会话模式设置为 StateServer <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 或 SQLServer，则不会引发该事件。 </p>
<p>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;/script&gt;&nbsp;&nbsp; </p>
<p>第二，建立SystemVM.cs驱动模型类，包括一些相关属性和装载相关Template模板： </p>
<p><img style="width: 772px; height: 327px" height="327" alt="" src="http://blog.crfly.cn/image.axd?picture=ggsystemVM1.jpg" width="772" />&nbsp; </p>
<p><img height="269" alt="" src="http://blog.crfly.cn/image.axd?picture=ggsystemVM2.jpg" width="760" /> </p>
<p>部分逻辑流程如下： </p>
<p><img height="740" alt="" src="http://blog.crfly.cn/image.axd?picture=ggsystemVMLC1.jpg" width="624" /> </p>
<p>简略代码如下：&nbsp;<br />
&nbsp;&nbsp;&nbsp; public class SystemVM<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //角色模板<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private SystemService m_system = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private OrderService m_order = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private QueryService m_query = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private FoundationService m_found = null; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public XmlNode XmlDimension<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; if (HttpContext.Current.Cache["dimension"] == null)<br />
&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;&nbsp;&nbsp;&nbsp; LoadXmlDimension();<br />
&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; return (XmlNode)HttpContext.Current.Cache["dimension"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 查询模板<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public XmlNode XmlQueryList<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; if (HttpContext.Current.Cache["querylist"] == null)<br />
&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;&nbsp;&nbsp;&nbsp; LoadXmlQueryList();<br />
&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; return (XmlNode)HttpContext.Current.Cache["querylist"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// JavaScript模板<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public XmlNode XmlJavaScript<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; if (HttpContext.Current.Cache["javascript"] == null)<br />
&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;&nbsp;&nbsp;&nbsp; LoadXmlJavaScript();<br />
&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; return (XmlNode)HttpContext.Current.Cache["javascript"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 省分模板<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public XmlNode XmlProvince<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; if (HttpContext.Current.Cache["province"] == null)<br />
&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;&nbsp;&nbsp;&nbsp; LoadXmlProvince();<br />
&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; return (XmlNode)HttpContext.Current.Cache["province"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region 多角色模板<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 系统角色模板<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public XmlNode XmlTemplate<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; XmlNode xmlNode = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (HttpContext.Current.Request.Cookies["user"] != null)<br />
&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;&nbsp;&nbsp;&nbsp; string sWebSiteType = HttpContext.Current.Request.Cookies["user"]["WebSiteType"]; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (sWebSiteType == "0")<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlNode = XmlCenterTemplate;<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; if (sWebSiteType == "1")<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlNode = XmlProvinceTemplate;<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; if (sWebSiteType == "2")<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlNode = XmlCityTemplate;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&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; return xmlNode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public XmlNode XmlCenterTemplate<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; if (HttpContext.Current.Cache["CenterTemplate"] == null)<br />
&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;&nbsp;&nbsp;&nbsp; LoadXmlCenterTemplate();<br />
&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; return (XmlNode)HttpContext.Current.Cache["CenterTemplate"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public XmlNode XmlProvinceTemplate<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; if (HttpContext.Current.Cache["ProvinceTemplate"] == null)<br />
&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;&nbsp;&nbsp;&nbsp; LoadXmlProvinceTemplate();<br />
&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; return (XmlNode)HttpContext.Current.Cache["ProvinceTemplate"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public XmlNode XmlCityTemplate<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; if (HttpContext.Current.Cache["CityTemplate"] == null)<br />
&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;&nbsp;&nbsp;&nbsp; LoadXmlCityTemplate();<br />
&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; return (XmlNode)HttpContext.Current.Cache["CityTemplate"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 加栽角色权限模板<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void LoadXmlCenterTemplate()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strBasePath = AppDomain.CurrentDomain.BaseDirectory;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlDocument doc = new XmlDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sPath = strBasePath + @"Template\" + "CenterTemplate.Config";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Load(sPath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlNode xmlNode = doc.DocumentElement;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpContext.Current.Cache.Insert("CenterTemplate", doc.DocumentElement,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new CacheDependency(sPath));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void LoadXmlProvinceTemplate()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strBasePath = AppDomain.CurrentDomain.BaseDirectory;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlDocument doc = new XmlDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sPath = strBasePath + @"Template\" + "ProvinceTemplate.Config";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Load(sPath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlNode xmlNode = doc.DocumentElement;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpContext.Current.Cache.Insert("ProvinceTemplate", doc.DocumentElement,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new CacheDependency(sPath));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void LoadXmlCityTemplate()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strBasePath = AppDomain.CurrentDomain.BaseDirectory;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlDocument doc = new XmlDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sPath = strBasePath + @"Template\" + "CityCenterTemplate.Config";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Load(sPath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlNode xmlNode = doc.DocumentElement;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpContext.Current.Cache.Insert("CityTemplate", doc.DocumentElement,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new CacheDependency(sPath));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 系统服务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public SystemService SystemService<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; return m_system;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 查询服务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public QueryService QueryService<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; return m_query;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 基础信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public FoundationService FoundationService<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; return m_found;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 订单管理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public OrderService OrderService<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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;&nbsp;&nbsp;&nbsp; return m_order;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public SystemVM()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadBusinessObj();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 根据模板类型，返回系统可以选择的模板种类。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="sType"&gt;&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public XmlNodeList GetXmlJavaScriptByType(string sType)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlNodeList xmlNodeList = XmlJavaScript.SelectNodes("//项[@类型='" + sType + "']");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xmlNodeList.Count&lt;0)<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;&nbsp;&nbsp;&nbsp; throw new Exception("找不到类型为["+sType+"]的节点！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return xmlNodeList;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 根据模板名称，获取JavaScript模板<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="sName"&gt;&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string GetXmlJavaScriptTpl(string sName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder sJsTemplate = new StringBuilder("");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlNode xmlNode = XmlJavaScript.SelectSingleNode("//项[@名称='" + sName + "']");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xmlNode == null)<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;&nbsp;&nbsp;&nbsp; throw new Exception("找不到名称为[" + sName + "]的节点！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sPath = ToolFunc.GetXmlString(xmlNode, "@模版");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sPath = AppDomain.CurrentDomain.BaseDirectory + sPath;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using (TextReader sr = File.OpenText(sPath))<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;&nbsp;&nbsp;&nbsp; String line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((line = sr.ReadLine()) != null)<br />
&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;&nbsp;&nbsp;&nbsp; sJsTemplate.AppendLine(line);<br />
&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; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sJsTemplate.ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string GetUrlFromJavaScript(string sName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sUrl = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlNode xmlNode = XmlJavaScript.SelectSingleNode("//项[@名称='" + sName + "']");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xmlNode == null)<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;&nbsp;&nbsp;&nbsp; throw new Exception("找不到名称为[" + sName + "]的节点！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlElement el = (XmlElement)xmlNode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sUrl = el.GetAttribute("Url");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sUrl;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void LoadXmlProvince()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strBasePath = AppDomain.CurrentDomain.BaseDirectory;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlDocument doc = new XmlDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sPath = strBasePath + @"Template\" + "Province.Config";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Load(sPath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlNode xmlNode = doc.DocumentElement;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpContext.Current.Cache.Insert("province", doc.DocumentElement,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new CacheDependency(sPath));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void LoadXmlJavaScript()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strBasePath = AppDomain.CurrentDomain.BaseDirectory;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlDocument doc = new XmlDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sPath = strBasePath + @"Template\" + "JavaScript.Config";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Load(sPath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpContext.Current.Cache.Insert("javascript", doc.DocumentElement, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new CacheDependency(sPath));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void LoadXmlDimension()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strBasePath = AppDomain.CurrentDomain.BaseDirectory;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlDocument doc = new XmlDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sPath = strBasePath + @"Template\" + "Dimension.Config";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Load(sPath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpContext.Current.Cache.Insert("dimension", doc.DocumentElement,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new CacheDependency(sPath));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void LoadXmlQueryList()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strBasePath = AppDomain.CurrentDomain.BaseDirectory;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlDocument doc = new XmlDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sPath = strBasePath + @"Template\" + "QueryList.config";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Load(sPath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpContext.Current.Cache.Insert("querylist", doc.DocumentElement,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new CacheDependency(sPath));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 加载业务对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void LoadBusinessObj()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_system = new SystemService(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_order = new OrderService(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_found = new FoundationService(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_query = new QueryService(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>此时可以根据数据库的角色记录，通过元数据模型进行权限与模板匹配，从而达到非常棒的架构设计。 </p>
<p><img height="456" alt="" src="http://blog.crfly.cn/image.axd?picture=4.jpg" width="325" />&nbsp;<img height="383" alt="" src="http://blog.crfly.cn/image.axd?picture=r.jpg" width="325" /> </p>
</div>
</div>
 <img src ="http://www.cnblogs.com/xiaoyin_net/aggbug/1045761.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42091/" target="_blank">[新闻]淘宝将与阿里妈妈合并 大淘宝战略启动</a>]]></description></item><item><title>基于MVP架构设计ASP.Net的应用研究</title><link>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045182.html</link><dc:creator>ξ箫音ξ</dc:creator><author>ξ箫音ξ</author><pubDate>Sat, 19 Jan 2008 02:31:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045182.html</guid><wfw:comment>http://www.cnblogs.com/xiaoyin_net/comments/1045182.html</wfw:comment><comments>http://www.cnblogs.com/xiaoyin_net/archive/2008/01/19/1045182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xiaoyin_net/comments/commentRss/1045182.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xiaoyin_net/services/trackbacks/1045182.html</trackback:ping><description><![CDATA[<div class="postcontent">
<p>微软的Microsoft patterns &amp; practices小组， Web Client Software Factory采用是Mode View Presenter+Controller模式(MVPC模式)，它可以使Model-View-Presenter 模式实现业务逻辑与表现层的适当分离，高效的简单的进行单元测试，更方便的隐藏技术的复杂度，方便的与各种系统集成等特点。以后我会单独来的来说明Web Client Software Factory的架构应用。 </p>
<p>传统的ASP.NET开发设计是使用后置代码页面方式隔离业务逻辑。虽然大大方便了开发设计，但是ASP.NET在企业级应用开发方面还是存在如下的不足： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 后置代码页中混合了表现层，业务逻辑层，数据访问层的代码。之所以出现这种情况是因为后置代码充当了事件引发，流程控制，业务规则和表现逻辑，业务逻辑和数据访问的协调者等多种角色。后置代码页充当这么多的职责导致许多难处理的代码。在企业应用中，一个良好的设计原则是各层之间的适当分离和保持后置代码页内容的尽可能干净。使用Model-View-Presenter 模式，后置代码的内容将非常简单，严格的管理表现层内容。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 后置代码模型的另一个缺点是它难以不借助帮助类/工具类实现重用后置代码页面之间的可重用代码。很明显的，这也是提供了一个适当的解决方案，但往往导致ASP式的类，不像是一流的对象。通过适当的设计，每个类都应有清晰的职责。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后，对后置代码页进行单元测试非常困难因为它们同表现层的太紧密了，当然可以选择NUnitASP这样的工具，但是他们非常的耗费时间，并且难以维护。单元测试应当是简单快速的。 </p>
<p>&nbsp; 可以采用各种技术手段是后置代码页保持分离。例如Castle MonoRail项目仿效Ruby-On-Rails ，但是放弃了ASP.NET的事件模型。Maverick.NET是一个支持ASP.NET事件模型的框架但是保留后置代码页作为程序的控制器。理想的解决方案是使用ASP.NET的事件模型并保持后置代码页的尽可能简单。Model-View-Presenter 模式是一个不需要借助第三方框架实现这个目标。 </p>
<p>Model-View-Presenter </p>
<p>Model-View-Presenter (MVP) 模式是 Model-View-Controller (MVC) 模式的增强，（MVC均指<font color="#000000">ASP.NET MVC Framework）</font>针对事件模型，像ASP.NET这样的框架。MVP最初使用主要的变化是Presenter实现MVC的Observer设计，基本设计和MVC相同：Model存储数据，View表示Model的表现，Presenter协调两者之间的通信。在 MVP 中 View 接收到事件，然后会将它们传递到 Presenter, 如何具体处理这些事件，将由 Presenter 来完成。关于在 MVC 和 MVP的深入比较: </p>
<p><img style="width: 382px; height: 220px" height="220" alt="" src="http://blog.crfly.cn/image.axd?picture=MVCVSMVP_001_thumb.gif" width="382" mce_src="/image.axd?picture=MVCVSMVP_001_thumb.gif" />&nbsp;　<img style="width: 373px; height: 221px" height="221" alt="" src="http://blog.crfly.cn/image.axd?picture=MVCVSMVP_002_thumb.gif" width="373" mce_src="/image.axd?picture=MVCVSMVP_002_thumb.gif" /> </p>
<p>MVC（模型-视图-控制器）模式是80年代Smalltalk-80出现的一种软件设计模式，后来得到了广泛的应用，其主要目的在于促进应用中模型，视图，控制器间的关注的清晰分离。（模型-视图-表示器）模式则是主要用来隔离UI、UI逻辑和业务逻辑、数据。<br />
<br />
对于处理流程方面两者的区别： </p>
<p>在MVC中，用户的请求首先会到达Controller，由Controller从Model获取数据，选择合适的View，把处理结果呈现到View上；在<font color="#000000">MVP</font>中，用户的请求首先会到