<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_MagicHu</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/58366/rss</id><updated>2012-04-08T09:40:42Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/58366/rss"/><entry><id>http://www.cnblogs.com/TextEditor/archive/2012/04/05/2433568.html</id><title type="text">[NET] 如何从 Winform 移植到 Webform [自己搞定HTTP协议]</title><summary type="text">Winform 如何移植到 WebForm。这个问题其实也就是要找一个好的方案，最大程度的复用现有的资源。同时，WebForm的话，不一定要走ASPNET这条路，可以自己搞定HTTP协议的。 下图是Winform版 下图是Web版本 1。如何自己搞定HTTP协议 WebForm，可以重头老老实实的用ASPNET来做，不过，现在Oracle，MongoDB这样的数据库都支持本地的浏览器方式管理了，这样的应用，不用安装ASP，PHP这样的服务器，完全自己实现一个简单的HTTP服务器。 OK，我们也实现一个吧，侦听13000（这里随便什么都可以的，不过推荐使用10000以上的端口号）...</summary><published>2012-04-05T11:34:00Z</published><updated>2012-04-05T11:34:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2012/04/05/2433568.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2012/04/05/2433568.html"/><content type="html">&lt;p&gt;Winform 如何移植到 WebForm。&lt;/p&gt;&lt;p&gt;这个问题其实也就是要找一个好的方案，最大程度的复用现有的资源。&lt;/p&gt;&lt;p&gt;同时，WebForm的话，不一定要走ASPNET这条路，可以自己搞定HTTP协议的。&lt;/p&gt;&amp;nbsp; &amp;nbsp; 下图是Winform版 &lt;br /&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Winform.PNG" width="386" height="483" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下图是Web版本&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/WebForm.PNG" width="311" height="527" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;1。如何自己搞定HTTP协议&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; WebForm，可以重头老老实实的用ASPNET来做，不过，现在Oracle，MongoDB这样的数据库都支持本地的浏览器方式管理了，这样的应用，不用安装ASP，PHP这样的服务器，完全自己实现一个简单的HTTP服务器。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; OK，我们也实现一个吧，侦听13000（这里随便什么都可以的，不过推荐使用10000以上的端口号）端口，开启多线程，做HTTP服务吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;Start()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TcpListener&amp;nbsp;server&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Set&amp;nbsp;the&amp;nbsp;TcpListener&amp;nbsp;on&amp;nbsp;port&amp;nbsp;13000.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Int32&amp;nbsp;port&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;13000&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IPAddress&amp;nbsp;localAddr&amp;nbsp;=&amp;nbsp;IPAddress.Parse(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;127.0.0.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;TcpListener&amp;nbsp;server&amp;nbsp;=&amp;nbsp;new&amp;nbsp;TcpListener(port);&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;TcpListener(localAddr,&amp;nbsp;port);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Start&amp;nbsp;listening&amp;nbsp;for&amp;nbsp;client&amp;nbsp;requests.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server.Start();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Enter&amp;nbsp;the&amp;nbsp;listening&amp;nbsp;loop.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;对于每个请求创建一个线程，线程的参数是TcpClient对象&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TcpClient&amp;nbsp;client&amp;nbsp;=&amp;nbsp;server.AcceptTcpClient();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutputLog(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;[Init]&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;DateTime.Now&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Connected!&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ParameterizedThreadStart&amp;nbsp;ParStart&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;ParameterizedThreadStart(ProcessFun);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Thread&amp;nbsp;t&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;Thread(ParStart);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.Start(client);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;&amp;nbsp;(SocketException&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutputLog(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SocketException:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;e,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;finally&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Stop&amp;nbsp;listening&amp;nbsp;for&amp;nbsp;new&amp;nbsp;clients.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server.Stop();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这里就是不停的启动ProcessFun来响应客户端（写客户端），同时用一个无限循环来侦听请求。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;ProcessFun(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&amp;nbsp;clientObj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TcpClient&amp;nbsp;client&amp;nbsp;=&amp;nbsp;clientObj&amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&amp;nbsp;TcpClient;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Buffer&amp;nbsp;for&amp;nbsp;reading&amp;nbsp;data&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte[]&amp;nbsp;bytes&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;Byte[&lt;span style="color: #800080;"&gt;512&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutputLog(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;[Init]Waiting&amp;nbsp;for&amp;nbsp;a&amp;nbsp;connection...&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Get&amp;nbsp;a&amp;nbsp;stream&amp;nbsp;object&amp;nbsp;for&amp;nbsp;reading&amp;nbsp;and&amp;nbsp;writing&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NetworkStream&amp;nbsp;stream&amp;nbsp;=&amp;nbsp;client.GetStream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Loop&amp;nbsp;to&amp;nbsp;receive&amp;nbsp;all&amp;nbsp;the&amp;nbsp;data&amp;nbsp;sent&amp;nbsp;by&amp;nbsp;the&amp;nbsp;client.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt;&amp;nbsp;((client.Available&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;(i&amp;nbsp;=&amp;nbsp;stream.Read(bytes,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;,&amp;nbsp;bytes.Length))&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Translate&amp;nbsp;data&amp;nbsp;bytes&amp;nbsp;to&amp;nbsp;a&amp;nbsp;ASCII&amp;nbsp;string.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;data&amp;nbsp;=&amp;nbsp;System.Text.Encoding.ASCII.GetString(bytes,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;,&amp;nbsp;i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;OutputLog("Received:"&amp;nbsp;+&amp;nbsp;data);&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[]&amp;nbsp;OrgRequest&amp;nbsp;=&amp;nbsp;data.Split(Environment.NewLine.ToCharArray());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(OrgRequest[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String[]&amp;nbsp;Request&amp;nbsp;=&amp;nbsp;OrgRequest[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Split(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;.ToCharArray());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;RequestItem&amp;nbsp;=&amp;nbsp;HttpUtility.UrlDecode(Request[&lt;span style="color: #800080;"&gt;1&lt;/span&gt;],&amp;nbsp;System.Text.Encoding.UTF8);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutputLog(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;[RequestItem]Received&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;RequestItem,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String[]&amp;nbsp;RequestPath&amp;nbsp;=&amp;nbsp;RequestItem.Split(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;?&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;.ToCharArray());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt;&amp;nbsp;(RequestPath[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;根节点&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GETPage(stream,&amp;nbsp;GetPage.ConnectionList());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/Connection&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GETPage(stream,&amp;nbsp;GetPage.Connection(RequestPath[&lt;span style="color: #800080;"&gt;1&lt;/span&gt;]));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GETFile(stream,&amp;nbsp;RequestItem.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(OrgRequest[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;POST&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Shutdown&amp;nbsp;and&amp;nbsp;end&amp;nbsp;connection&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;这里响应请求，我只写完了GET，POST还没有开始动手呢。这里我们通过Stream.Read来获取请求，然后根据请求内容来寻找资源，将资源返还给客户端。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="stream"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="FileName"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;GETFile(NetworkStream&amp;nbsp;stream,&amp;nbsp;String&amp;nbsp;FileName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[]&amp;nbsp;msg&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[]&amp;nbsp;bFile&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;data&amp;nbsp;=&amp;nbsp;String.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Boolean&amp;nbsp;IsFound&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(File.Exists(ServerPath&amp;nbsp;+&amp;nbsp;FileName))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IsFound&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bFile&amp;nbsp;=&amp;nbsp;ReadFile(ServerPath&amp;nbsp;+&amp;nbsp;FileName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;资源文件里面获得&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(FileName.StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\MainTreeImage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;MainTreeImage00.png&amp;nbsp;--&amp;nbsp;从MainTreeImage&amp;nbsp;里面获得&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;MainTreeImageIndex&amp;nbsp;=&amp;nbsp;Convert.ToInt32(FileName.Substring(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\MainTreeImage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;.Length,&amp;nbsp;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Image&amp;nbsp;img&amp;nbsp;=&amp;nbsp;GetSystemIcon.MainTreeImage.Images[MainTreeImageIndex];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bFile&amp;nbsp;=&amp;nbsp;GetSystemIcon.imageToByteArray(img,ImageFormat.Png);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IsFound&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(IsFound)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Process&amp;nbsp;the&amp;nbsp;data&amp;nbsp;sent&amp;nbsp;by&amp;nbsp;the&amp;nbsp;client.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;HTTP/1.1&amp;nbsp;200&amp;nbsp;OK&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;Environment.NewLine;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;if&amp;nbsp;content-type&amp;nbsp;is&amp;nbsp;wrong,FF&amp;nbsp;can;t&amp;nbsp;render&amp;nbsp;it,but&amp;nbsp;IE&amp;nbsp;can&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;nbsp;filetype&amp;nbsp;=&amp;nbsp;String.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;FileInfo(FileName).Extension)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.css&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filetype&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;text/css&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.js&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filetype&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;text/javascript&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.png&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filetype&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;image&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Content-Type:&amp;nbsp;@filetype;&amp;nbsp;charset=utf-8&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@filetype&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;filetype)&amp;nbsp;+&amp;nbsp;Environment.NewLine;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Content-Length:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;+=&amp;nbsp;(bFile.Length).ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;+=&amp;nbsp;Environment.NewLine&amp;nbsp;+&amp;nbsp;Environment.NewLine;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msg&amp;nbsp;=&amp;nbsp;System.Text.Encoding.ASCII.GetBytes(data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Send&amp;nbsp;back&amp;nbsp;a&amp;nbsp;response.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stream.Write(msg,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;,&amp;nbsp;msg.Length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stream.Write(bFile,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;,&amp;nbsp;bFile.Length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutputLog(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;[System]Sent&amp;nbsp;HTML&amp;nbsp;OK&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;HTTP/1.1&amp;nbsp;404&amp;nbsp;Not&amp;nbsp;Found&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;Environment.NewLine;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msg&amp;nbsp;=&amp;nbsp;System.Text.Encoding.ASCII.GetBytes(data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Send&amp;nbsp;back&amp;nbsp;a&amp;nbsp;response.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stream.Write(msg,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;,&amp;nbsp;msg.Length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutputLog(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;[System]FileName&amp;nbsp;Not&amp;nbsp;Found:&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;FileName,&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stream.Flush();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;将资源（文件）给客户端，就是将资源转换为Bytes字节流，然后写入NetStream里面去。&lt;/p&gt;&lt;p&gt;&amp;nbsp;当然，为了&amp;#8220;欺骗&amp;#8221;浏览器，我们还要在成功找到资源的时候，给个200 OK的标记，如果没有资源的话，给个404的标记。&lt;/p&gt;&lt;p&gt;&amp;nbsp;以后，还要考虑 缓存的问题，已经请求过的资源，就给个3XX的，不用再重复取得资源了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;对于有些资源内容，这里干脆不从实体文件里面取了，直接从资源里面取了。客户才不知道这个文件到底怎么来的。 &amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2。最大程度的复用代码&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 为了展示这个树形结构，原来的Windows代码非常的冗长（不是冗余）。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 如何将这个树形Winform转为WebForm？如果最大程度的复用代码，这是必须要考虑的。树形展示，我使用了zTree这个Jquery插件。只要能够给他一个JSON的节点信息，就可以帮你自动完成树形了。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 原来的代码的目标是生成一个Treeview，现在的目标是做个JSON。当然，可以将原来的代码里面的TreeNode的构成逻辑化为BsonDocument（MongoDB的概念，类似JSON）。不过，最最正确的做法是，直接将Treeview的结果转换为JSON。不用修改任何原来的代码，最大限度的使用原来的代码。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt;"展示数据库结构&amp;nbsp;WebForm"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="ConnectionName"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;String&amp;nbsp;FillConnectionToJSON(String&amp;nbsp;ConnectionName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;strJSON&amp;nbsp;=&amp;nbsp;String.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TreeView&amp;nbsp;tree&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;TreeView();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FillConnectionToTreeView(tree);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Transform&amp;nbsp;Treeview&amp;nbsp;To&amp;nbsp;JSON&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;必须这样做，防止二重管理的问题。如果这里的逻辑有两套的话，维护起来比较麻烦。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;一套逻辑，来控制树的内容。然后将TreeView的内容转换为JSON。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;递归GetSubTreeNode&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strJSON&amp;nbsp;=&amp;nbsp;GetSubTreeNode(tree.Nodes[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;]).ToJson(SystemManager.JsonWriterSettings);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&amp;nbsp;strJSON;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="SubNode"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&amp;nbsp;BsonDocument&amp;nbsp;GetSubTreeNode(TreeNode&amp;nbsp;SubNode)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(SubNode.Nodes.Count&amp;nbsp;==&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BsonDocument&amp;nbsp;SingleNode&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;BsonDocument();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SingleNode.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;SubNode.Text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SingleNode.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;icon&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MainTreeImage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;String.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{0:00}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,SubNode.ImageIndex)&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.png&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&amp;nbsp;SingleNode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BsonDocument&amp;nbsp;MultiNode&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;BsonDocument();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MultiNode.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;SubNode.Text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BsonArray&amp;nbsp;ChildrenList&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&amp;nbsp;BsonArray();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt;&amp;nbsp;(TreeNode&amp;nbsp;item&amp;nbsp;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&amp;nbsp;SubNode.Nodes)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ChildrenList.Add(GetSubTreeNode(item));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MultiNode.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;children&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;ChildrenList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MultiNode.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;icon&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MainTreeImage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;String.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{0:00}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;SubNode.ImageIndex)&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.png&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&amp;nbsp;MultiNode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 原来的FillConnectionToTreeView(tree);是一个很庞大的方法，用来构建一个Treeview，里面存放着数据库的完整结构。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这里我们将这个Treeview ，通过GetSubTreeNode 这个方法转换为了BsonDocument，然后直接使用内置方法转为JSON，一切搞定了。10来行代码，非常优雅。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 通过这个例子，我想说，作为程序员，一定要时刻注意，不要出现同样的代码，不要双重管理代码，不要改了一个地方，另一个地方也必须改动。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 明天去 埃森哲 入职，上海埃森哲的朋友，多多关照阿。。。。 &lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2433568.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2012/04/05/2433568.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TextEditor/archive/2012/03/31/2427195.html</id><title type="text">开源MongoDB管理工具MongoCola1.20 发布   离开IBM GDC的最后一个版本</title><summary type="text">开源的MongoDB管理工具 MongoCola-1.20 正式发布了。虽然不敢说完全没有Bug，但是在我能力范围之内的，能改正的Bug都改正了。没有正规的测试团队，靠着零星的网友的帮忙，品质保证很难啊。下周开始去新公司上班了，由于种种原因，我要连续上9天的班，o(╯□╰)o。。。。这次新增的功能包括：（和1.13相比）1.Replset副本的初始化功能 通过工具，将任何一个普通的服务器提升为一个副本的Primary。2.副本服务器的管理： 通过工具，增加，移除副本服务器。3.Sharding的配置管理 增加Sharding，移除Sharding，配置Sharding数据库和数据集。4....</summary><published>2012-03-31T08:19:00Z</published><updated>2012-03-31T08:19:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2012/03/31/2427195.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2012/03/31/2427195.html"/><content type="html">&lt;p&gt;开源的MongoDB管理工具 MongoCola-1.20 正式发布了。&lt;/p&gt;&lt;p&gt;虽然不敢说完全没有Bug，但是在我能力范围之内的，能改正的Bug都改正了。没有正规的测试团队，靠着零星的网友的帮忙，品质保证很难啊。&lt;/p&gt;&lt;p&gt;下周开始去新公司上班了，由于种种原因，我要连续上9天的班，o(&amp;#9583;&amp;#9633;&amp;#9584;)o。。。。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这次新增的功能包括：（和1.13相比）&lt;/p&gt;&lt;p&gt;1.Replset副本的初始化功能&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 通过工具，将任何一个普通的服务器提升为一个副本的Primary。&lt;/p&gt;&lt;p&gt;2.副本服务器的管理：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 通过工具，增加，移除副本服务器。&lt;/p&gt;&lt;p&gt;3.Sharding的配置管理&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 增加Sharding，移除Sharding，配置Sharding数据库和数据集。&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Replset_Mgr.PNG" height="320" width="593" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.服务器列表中，同时列出Connection的逻辑内容和ServerInstance的物理实际内容。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; Replset列出MemberHost的服务器&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Replset_TwoServer.PNG" height="221" width="332" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; Sharding列出每个分片的服务器信息，如果分片是Replset，同样列出MemberHost的信息&lt;/p&gt;&lt;p&gt;5.GFS，文件系统，增加了上传文件夹功能，同时有了丰富的选择配置功能，在同名文件的时候可以有多种选择项。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/GFS_Insert_Option.PNG" height="345" width="310" /&gt;&lt;/p&gt;&lt;p&gt;6.真正的多视图功能：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 每个数据集独自一个视图，可以同时打开多个数据集，方便数据集之间的切换&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/MultipleView.PNG" height="190" width="784" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这次新的功能都是很重大的更新，由于要做多视图，将原来的视图从主窗体中剥离了出来，做成了控件。，这个更新涉及到的代码修正量非常的大。&lt;/p&gt;&lt;p&gt;同时，由于要在Connection的逻辑内容以外要显示服务器的内容，所以，整个数据库对象的路径Tag系统也做了很大的修改。&lt;/p&gt;&lt;p&gt;Sharding的操作，在Google-Group（被墙了）上咨询了C#Driver的开发者后才知道怎么做的。&lt;/p&gt;&lt;p&gt;通过这些更新，已经在某种程度上可以和 MongoVUE抗衡了。当然MongoVUE作为一个商业产品，在品质（有稳定的测试团队）和外观（可以使用商业控件）还是有差距的。&lt;/p&gt;&lt;p&gt;我也不知道MongoDB的未来会不会大红大紫，我也不敢肯定有多少人愿意帮我测试，使用，宣传这个软件。&lt;/p&gt;&lt;p&gt;不管怎么样，近期还是会一如既往的维护这个产品的，当然，真的有一天，没有人愿意使用这个软件了，就算了。&lt;/p&gt;&lt;p&gt;需要看代码的：&lt;a title="https://github.com/magicdict/MagicMongoDBTool" href="https://github.com/magicdict/MagicMongoDBTool"&gt;https://github.com/magicdict/MagicMongoDBTool&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;直接想使用的：&lt;a title="https://github.com/magicdict/MagicMongoDBTool/downloads" href="https://github.com/magicdict/MagicMongoDBTool/downloads"&gt;https://github.com/magicdict/MagicMongoDBTool/downloads&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;一直做Mainframe的对日外包，没有机会在工作中用NET，同时喜欢阶层数据库，所以才会自发的开发这样的一个东西。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;通过这个软件的开发，C#水平有了提高，对于MongoDB的认识了上了一个高度了。&lt;/p&gt;&lt;p&gt;30之前为了钱，30后为了兴趣开发了。&lt;/p&gt;&lt;p&gt;下一家公司，应该有机会做NET了。面试的时候问过我会不会MOSS，我现在不会，希望能在新公司将MOSS学会。如果能够使SAP的项目就更好了。。。。。&lt;/p&gt;&lt;p&gt;又一次上路开始学习了。。。。。。加油啊O(&amp;#8745;_&amp;#8745;)O~ &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2427195.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2012/03/31/2427195.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TextEditor/archive/2012/03/29/2423115.html</id><title type="text">MongoCola使用教程 2 - MongoDB的Replset 初始化和配置</title><summary type="text">前言 首先再次感谢博客园的各位朋友。正是你们的关注才让我有信心将这个工具开发下去。这周同样也有热心网友对于MongoCola存在的问题给予了反馈。这次工具更新到了版本1.20，强化的地方是增加了Replset和Sharding的管理能力。MongoVUE和Mongocola以前在显示一个Replset或者Sharding的时候只是将Connection里面的内容，也就是Server的内容显示出来，而没有将Sharding的构造给显示出来，例如，Sharding可能是一个Replset，Replset里面可能有2台服务器。这个版本能够表示这些服务器的Instance的结构了。 当然这个版本还是无</summary><published>2012-03-29T04:50:00Z</published><updated>2012-03-29T04:50:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2012/03/29/2423115.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2012/03/29/2423115.html"/><content type="html">&lt;p&gt;&lt;strong&gt;前言 &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;首先再次感谢博客园的各位朋友。正是你们的关注才让我有信心将这个工具开发下去。&lt;/p&gt;&lt;p&gt;这周同样也有热心网友对于MongoCola存在的问题给予了反馈。&lt;/p&gt;&lt;p&gt;这次工具更新到了版本1.20，强化的地方是增加了Replset和Sharding的管理能力。MongoVUE和Mongocola以前在显示一个Replset或者Sharding的时候只是将Connection里面的内容，也就是Server的内容显示出来，而没有将Sharding的构造给显示出来，例如，Sharding可能是一个Replset，Replset里面可能有2台服务器。这个版本能够表示这些服务器的Instance的结构了。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;当然这个版本还是无法获得Sharding的Config服务器的信息，C#Driver的作者也表示不能确定是不是能够从Mongos获得Config的信息。。。。&lt;/p&gt;&lt;p&gt;注意：这个版本现在还是测试版，可能有BUG，如果您发现了，请联系我，谢谢。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Replset的初始化&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;请先准备好这样两个服务器 &lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;mongod&amp;nbsp;--port&amp;nbsp;10001&amp;nbsp;--dbpath&amp;nbsp;&amp;nbsp;C:\mongodb\shard1&amp;nbsp;--replSet&amp;nbsp;set1&amp;nbsp;--rest&amp;nbsp;&lt;br /&gt;&lt;br /&gt;mongod&amp;nbsp;--port&amp;nbsp;10002&amp;nbsp;--dbpath&amp;nbsp;&amp;nbsp;C:\mongodb\shard2&amp;nbsp;--replSet&amp;nbsp;set1&amp;nbsp;--rest&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;使用工具将 localhost：10001的主机打开。&lt;/p&gt;&lt;p&gt;注意，配置Connection的时候，除了连接名称，主机，端口以外，一定要选中 SlaveOK。这个选项在OptionTab里面。原因是Replset里面，所有的非Primary的机器都是不可读的。&lt;/p&gt;&lt;p&gt;在Replset没有启动的时候，如果这台机器已经标识为Replset的话，如果没有SlaveOk，就是不可读的。（Replset暂时不用填写） &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/ServerConnection_Option.PNG" width="815" height="336" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;好了，第一台服务器配置好了。试着连接好以后，在主界面上面就可以查看和操作它了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;注意，现在这台服务器还不是一个Replset，我们要以这台服务器为主（Primary）服务器，初始化一个Replset（副本）。&lt;/p&gt;&lt;p&gt;选中这台服务器的连接（Connection，第一层得节点，根结点）右键菜单，初始化副本。在弹出框中填上副本的名称。一定要使用启动时候的名称。例如这个例子里面&amp;#8220;--replSet&amp;nbsp;set1&amp;#8221; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;那么，这里就要填上 set1.确认之后，如果工具将会做初始化操作，这个操作将耗时30秒左右，30秒后，请刷新界面（F5）。&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Replset_OneServer.PNG" width="341" height="258" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Connection节点将现实逻辑的数据库内容，Servers里面是物理的数据库结构。&lt;/p&gt;&lt;p&gt;&amp;nbsp;注意，这个操作会自动更新Connection的配置信息，将普通服务器的配置改为副本。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;div&gt;&lt;p&gt;&lt;strong&gt;Replset的成员和删除添加&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好了，我们将另一台服务器也添加到这个副本里面去吧。选中根节点，右键菜单：副本设定&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Replset_Mgr.PNG" width="593" height="320" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;填上主机名称，端口，设置一下优先度，就可以添加主机了。ArbiterOnly的意思是将这台服务器作为仲裁服务器。当主服务器出问题的时候，靠优先度无法仲裁谁来接替主服务的时候，由这台机器的信息来仲裁。一般不用这样的仲裁服务器。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;div&gt;注意，这个操作会自动更新Connection的配置信息，将添加副本的成员。&lt;/div&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Replset_TwoServer.PNG" width="332" height="221" /&gt;&amp;nbsp;&lt;/p&gt;&amp;nbsp;（由于是测试版本，这个功能会出现一些异常，请无视。这个异常已经报告给C#的驱动开发者了，功能还是正常的）&lt;/p&gt;&lt;p&gt;&amp;nbsp;添加之后，也请等待30秒后重新刷新（F5）&lt;/p&gt;&lt;p&gt;至于删除，大家看了界面后，一定都会了。。。\(^o^)/~ &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;下载地址：&lt;a href="https://github.com/magicdict/MagicMongoDBTool/downloads" title="https://github.com/magicdict/MagicMongoDBTool/downloads"&gt;https://github.com/magicdict/MagicMongoDBTool/downloads&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/div&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2423115.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2012/03/29/2423115.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TextEditor/archive/2012/03/22/2410072.html</id><title type="text">MongoCola使用教程 1 -  MongoDB的基本操作和聚合功能</title><summary type="text">前言 在开始正文之前，感谢博客园的Nosql爱好者对于MongoCola工具的试用(使用）。特别感谢 呆呆 这位朋友的Bug报告，让我纠正了一个很严重的Bug。同时也感谢以前的多个网友在博客留言中给我的意见，建议，以及BUG的修正方案。这个工具的进步离不开你们的贡献。最新版的MongoCola为1.13.主要改进了一些视觉效果上的东西，毕竟这个工具不是个人的工具了，在保证品质的前提下，也要考虑到美观和易用性了。如何得到MongoDB MongoDB是一个开源的项目，你可以从GitHub上获取MongoDB的源代码，当然对于大部分用户来说，我们并不需要源代码，直接下载可执行的文件即可。最新...</summary><published>2012-03-22T03:00:00Z</published><updated>2012-03-22T03:00:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2012/03/22/2410072.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2012/03/22/2410072.html"/><content type="html">&lt;p&gt;&lt;strong&gt;前言 &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在开始正文之前，感谢博客园的Nosql爱好者对于MongoCola工具的试用(使用）。特别感谢 呆呆 这位朋友的Bug报告，让我纠正了一个很严重的Bug。同时也感谢以前的多个网友在博客留言中给我的意见，建议，以及BUG的修正方案。这个工具的进步离不开你们的贡献。最新版的MongoCola为1.13.主要改进了一些视觉效果上的东西，毕竟这个工具不是个人的工具了，在保证品质的前提下，也要考虑到美观和易用性了。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;如何得到MongoDB &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; MongoDB是一个开源的项目，你可以从GitHub上获取MongoDB的源代码，当然对于大部分用户来说，我们并不需要源代码，直接下载可执行的文件即可。最新版的MongoDB是2.0.4.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 你可以从MongoDB的官方网站下载。 官方网站下载地址：&lt;a title="http://www.mongodb.org/downloads" href="http://www.mongodb.org/downloads"&gt;http://www.mongodb.org/downloads&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 温馨提示：各种平台的版本很多，请选择正确的版本下载。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 下载后的文件是一个压缩包，直接解压就可以了。解压后，你会看到若干个 EXE 可执行文件，其中 mongod.exe 是重点文件（Mongo device）启动新的Mongo服务器必须要用到这个。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;如何启动一个MongoDB服务器 &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 启动一个MongoDB服务器的实例，有很多方法，这里将一个最简单的方法（注意，不是最合适的方法）。这个方法非常适合我们学习者使用。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 首先，请准备好一个目录，用于存放MongoDB的数据库文件。例如 C:\mongodb\master 这样的目录。MongoDB的数据库文件和日志文件等等都会生成在这个目录下面。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 确保了目录已经存在后，我们可以在DosCommand里面启动一个MongodB服务器了。（我想大部分在这里的人是知道如何启动DosCommand命令行的）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 然后依次输入以下两条命令：（我们假设你的mongod.exe放在C:\runmongo\bin 文件夹里面了）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&amp;nbsp;&lt;br /&gt; &lt;/div&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;cd&lt;/span&gt;&amp;nbsp;C:\runmongo\bin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mongod&amp;nbsp;--port&amp;nbsp;&amp;nbsp;28018&amp;nbsp;--dbpath&amp;nbsp;C:\mongodb\master&amp;nbsp;--master&amp;nbsp;--rest&amp;nbsp;--journal&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 第一条指令是将工作目录切换到Mongo的Bin下面，第二条命令是启动一个Mongodb的服务器。 启动命令的详细细节，暂时不介绍，请大家试试看能不能启动。（这里我选择了28018这个端口作为Mongodb的TCP/IP端口，一般建议使用10000以上的端口）。&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一般，我会将这两条命令放在一个扩展名为 .bat 的批处理文件里面，以后只需要执行这个批处理文件就可以了。例如 你可以新建一个名为master.bat的文件，然后将这两句指令保存到这个文件中，以后通过双击master.bat就可以进行服务器的启动了。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/StartupbyDos.PNG" height="338" width="669" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;div align="center"&gt;正常启动的Dos界面&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;使用工具监视操作MongoDB&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 你可以使用Mongo原生的命令行工具来监视和操作MongoDB，也可以使用各种MongoDB的工具来操作MongoDB。这里我使用自己开发的工具来监视和操作MongoDB。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 1.启动MongoCola：如果你是第一次使用MongoCola，先选择界面语言。由于工具是面向全球的，所以使用英语为默认语言。当然，你可以选择 中文 为界面语言，&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/LanguagePicker.PNG" height="81" width="475" /&gt;&lt;/div&gt; &lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然后，请设定一下你的Mongo的可执行文件的路径，软件的一些功能需要使用一些原生的可执行文件&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Option.PNG" height="176" width="692" /&gt;&lt;/div&gt; &lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 例如我的路径是C:\runmongo\bin&amp;nbsp; 当然，你也可以在以后进行设置。不过强烈建议一开始就设置。不然影响部分功能的使用。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 2.接下来，我们新建一个数据库连接。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/ConnectionManager.PNG" height="265" width="452" /&gt;&lt;/div&gt; &lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由于第一次使用，所以没有任何登录过的连接。首先，我们新建一个新的连接。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/NewConfig_Master.PNG" height="411" width="742" /&gt;&lt;/div&gt; &lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 一个最最基本的链接，只需要Host名称和Port就可以了。我将这个链接的名字定为 Master，然后由于是本地的服务器，所以Host就填为localhost，端口是28018.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 设定好了以后，可以按下Test来测试一下是否设置正确，或者直接按下 Add 来登录一个新的连接。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; OK，登录好了之后，在连接管理面板里面双击这个链接，就可以打开主界面了。（你也可以选中一个链接，然后按下OK按钮）。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff0000;"&gt;【注意：密码将以明文形式放入Config.xml文件中】&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;界面基本介绍 &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Main_Master.PNG" height="596" width="998" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 界面分为左右两个区域，左边的是连接列表（通常1个连接代表一个服务器，但是连接的概念和服务器的概念并不是等价的）。你可以在这个区域里面看到服务器的大致结构，例如数据库和数据集的整体状况。右边是各种数据库对象的详细信息表示区域，这里可能显示一个数据集的记录，或者显示文件系统和用户系统。在初始化的状态下，这里显示当前连接的状态。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 这里我们看到服务器下面有一个local的数据库，现在他是我们唯一拥有的数据库。local数据库下面没有 User，没有GFS（文件系统),没有Javascript文档，没有系统和普通的数据集。说到底，什么都没有。。。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 由于local是系统数据库，软件认为不能由用户来操作，所以，我们先要新建一个数据库。我们选中服务器的图标，然后从右键菜单中选择 新建数据库（createNewDatabase），输入数据库名称之后，一个新的数据库就建成了。（由于已经知道的Mongodb的Bug，请使用英文作为数据库名称）。作为例子，我新建了一个Cnblogs的数据库。然后选中这个数据库，右键菜单里面有新建数据集的菜单项（Create New Collection）。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/NewCollectionInput.PNG" height="258" width="356" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这里的数据集名称，也暂时不要使用中文。关于使用中文数据集名称的Bug，我已经报告Mongo官方了，但是现在还没有修正好。Bug票：&lt;a title="https://jira.mongodb.org/browse/SERVER-4412" href="https://jira.mongodb.org/browse/SERVER-4412"&gt;https://jira.mongodb.org/browse/SERVER-4412&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一般用户，直接填写数据集名称就可以了，一些高级选项，请在知道确切含义后选择。特别是Iscapped属性，用这个属性后，数据集里面的文档（数据）可能无法修改。好了，我们新建一个NoSql的数据集。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/NoSql_Srvlst.PNG" height="635" width="339" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果没有问题，左边的数据库一览的Cnblogs下面将会有一个Nosql数据集挂在一般数据集下面。由于使用了索引，系统数据集里面也会有一个System.index数据集。双击一下这个数据集看看。右边的数据视图将会展示数据集内容，当然现在什么都没有。&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Nosql_empty_view.PNG" height="548" width="777" /&gt;&lt;/div&gt;&amp;nbsp;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;尝试加入第一个文档&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; OK，接下来我们加入一条数据到数据集中，Mongo里面将数据记录叫做 文档。按下工具栏的第一个图标，添加一个文档吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这里我们使用Json作为描述文档的语言，它看起来像这样&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"Name":"MongoDB","Type":"Nosql"&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/NewDocument.PNG" height="296" width="469" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;注意：一般我们不用（不能输入)_id这个索引字段，这个是Mongo自动维护的字段。这里我们添加两个字段，一个是Name，值是MongoDB，一个是Type，值是Nosql。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/FirstDocument_Nosql.PNG" height="184" width="888" /&gt;&lt;/div&gt;&amp;nbsp;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 插入成功后，你可以看到第一条记录了。由于时间问题，TreeListView还比较粗糙，有时间再改了。。。。&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; （不知道有没有朋友 对于 绘制自定义TreeView 有经验吗，能不能帮忙绘制一下Node的连线和前面的加减号，我画得不是很好）&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这里_id是系统自动生成的主键。（一般情况下，这个id不会重复，不过，通过一些方法，是可以让这个id重复的。。。。O(&amp;#8745;_&amp;#8745;)O~）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 软件为你准备了3种视图来查看数据：树形视图，列表视图，和Json文本视图。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;聚合功能&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 介绍这个功能前，我们现在数据库里面追加一些数据吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Nosql_4documents.PNG" height="178" width="870" /&gt;&lt;/div&gt; &lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们一共有4条数据，2条Nosql的，2条Sql的数据。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 数据统计：Count&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 这个功能很简单，就是看看数据集里面的文档（数据）件数。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 从左边的服务器视图中，选中数据集，在右键菜单中选中聚合（aggregation）菜单项里面的Count功能，记录条数就会以弹出框的形式告诉用户。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 数据统计：Distinct&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 启动Distinct的方法和Count一样，在右键菜单中选中聚合（aggregation）菜单项里面的Distinct功能。这个时候，你需要在弹出窗体里面选择你需要做Distinct的字段名称了。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 如果我们以Name做Distinct，结果是4件记录，如果我们以Type做Distinct，结果是2件记录。看了下面的图，我想各位都知道这个结果是怎么得出来的了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/distinct_Result2.PNG" height="653" width="562" /&gt;&lt;/div&gt;&amp;nbsp;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 数据统计：Group和MapReduce&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 暂时不做说明。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;简单的查询功能&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; Nosql的查询功能一直是一个软肋，这里我开发了一个简单的查询器。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 例如，我想查找所有的Nosql的数据。那么我们可以使用查询功能，你可以在视图的工具栏里面按下那个双筒望远镜的图标。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 然后进行如下设置即可。字段是下拉表里面选中的Type，EQ表示&amp;#8220;等于&amp;#8221;的意思，然后类型是BsonString，需要等于的值是 &amp;#8220;Nosql&amp;#8221;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 执行这个过滤器后数据就只有2条被表示到数据视图中了。（&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;这个时候如果再使用聚合的话，结果将默认建立在这个过滤器的基础上，这个时候做Count，结果是2）&lt;/span&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Query_Condition_Nosql.PNG" height="586" width="628" /&gt;&lt;/div&gt; &lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 你可以使用工具栏上的 过滤器图标来切换 数据过滤的启停状态。注意：id字段比较特殊，不能屏蔽。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;如何得到Mongocola1.13&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 你可以从Github下载本软件：&lt;a title="https://github.com/magicdict/MagicMongoDBTool/downloads" href="https://github.com/magicdict/MagicMongoDBTool/downloads"&gt;https://github.com/magicdict/MagicMongoDBTool/downloads&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 本软件是开源软件，所以没有任何功能限制。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MongoCola 最新版本：1.13&amp;nbsp; Mongodb 最新版本 2.0.4 C# Driver 最新版本&amp;nbsp; 1.3.1&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;未完待续&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;3月31日，MongoDB在上海召开技术者大会，有人去吗？详细情况：&lt;a title="http://www.10gen.com/events/mongodb-shanghai" href="http://www.10gen.com/events/mongodb-shanghai"&gt;http://www.10gen.com/events/mongodb-shanghai&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2410072.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2012/03/22/2410072.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TextEditor/archive/2012/03/16/2400092.html</id><title type="text">MongoDB 可视化管理工具 MongoCola-1.1.0 测试版发布</title><summary type="text">首先，感谢大家对于本工具的支持。 经过一周的努力，最新版的工具测试版出炉了，这个版本是一个很重要的版本。为什么说这个版本重要？以前的工具，只支持一个视图窗口，也就是说了，一次只能看一个数据集的数据。而从这个版本开始，支持多数据集了。你可以同时打开多个数据集，然后通过切换Tab来查看多个数据集的内容。当然，这个版本只是一个测试版，肯定有一些未知的BUG，同时在语言的汉化上还有一定的问题。好了，先来展示一些图片吧：原先的数据集没有经过分类，统一放在了数据库的节点下面，现在的数据集被分成了5个类别。1.USER 用户组 对应 system.users 这个数据集2.GFS 文件系统 对应 fs.f.</summary><published>2012-03-16T05:20:00Z</published><updated>2012-03-16T05:20:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2012/03/16/2400092.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2012/03/16/2400092.html"/><content type="html">&lt;p&gt;首先，感谢大家对于本工具的支持。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;经过一周的努力，最新版的工具测试版出炉了，这个版本是一个很重要的版本。&lt;/p&gt;&lt;p&gt;为什么说这个版本重要？以前的工具，只支持一个视图窗口，也就是说了，一次只能看一个数据集的数据。而从这个版本开始，支持多数据集了。你可以同时打开多个数据集，然后通过切换Tab来查看多个数据集的内容。&lt;/p&gt;&lt;p&gt;当然，这个版本只是一个测试版，肯定有一些未知的BUG，同时在语言的汉化上还有一定的问题。&lt;/p&gt;&lt;p&gt;好了，先来展示一些图片吧：&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Main_MagicDict.PNG" height="636" width="1008" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;原先的数据集没有经过分类，统一放在了数据库的节点下面，现在的数据集被分成了5个类别。&lt;/p&gt;&lt;p&gt;1.USER 用户组 对应 system.users 这个数据集&lt;/p&gt;&lt;p&gt;2.GFS &amp;nbsp; 文件系统 对应 fs.files fs.chunks&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.Javascript 对应 system.javascript&lt;/p&gt;&lt;p&gt;4.System 数据集&amp;nbsp;&lt;/p&gt;&lt;p&gt;5.普通数据集&lt;/p&gt;&lt;p&gt;整个数据库的结构和内容将比以往更加清晰了。同时，将一些操作从菜单移到了视图窗口的工具栏，使得操作更加方便灵活。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这次对于 Capped Collection 禁止了很多操作的权限，这个也是看了Mongo的官方文档才知道的，也算是一个BUG的修正了。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;新增加的功能：&lt;/p&gt;&lt;p&gt;//Profiling Level的设定：&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Profile.PNG" height="159" width="332" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;你可以设定Mongo是不是要记录下你所有的动作，或者只是将耗时的动作记录下来，或者什么都不记录。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 这些记录会存放在system.profile数据集中间。&lt;/p&gt;&lt;p&gt;//用户的添加，确认密码的增加：&lt;/p&gt;&lt;p&gt;以前的添加用户，忘记了让用户输入两次密码（一次作为验证），这次补上了&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/NewUserInput.PNG" height="206" width="347" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;同时，这次可以在User视图里面使用 Change password功能了。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;//数据在默认文本编辑器中打开。&lt;/p&gt;&lt;p&gt;这个是模仿MongeVUE的，你可以在默认的文本编辑器中，打开当前的数据的BSON文档。&lt;/p&gt;&lt;p&gt;//每个视图都可以设定 每页显示的数据条数了。&lt;/p&gt;&lt;p&gt;以前每页默认为100条，并且是一个全局的配置，这次也改为独立的视图的配置了，你可以随心所欲的在不同的视图中，使用不同的配置，&lt;/p&gt;&lt;p&gt;当然现在还没有支持任意条数，内置了 50条，100条，200条 3个选项。&lt;/p&gt;&lt;p&gt;//增加了Javascript的单独视图&lt;/p&gt;&lt;p&gt;现在可以在一个单独的视图中编辑Javascript了，也可以随时加入，删除javascript到数据库中 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;//GFS文件系统的视图，支持排序&lt;/p&gt;&lt;p&gt;现在，文件系统视图支持排序了&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/GFS.PNG" height="503" width="665" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;如果你想尝试一下你可以去这里下载：&lt;a title="GitHub" href="https://github.com/magicdict/MagicMongoDBTool/downloads"&gt;GitHub&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;当然,这个只是测试版，如果你发现BUG，请给我发消息，谢谢。&lt;/p&gt;&lt;p&gt;&amp;nbsp;如果你有什么需要的功能，意见，建议，请告诉我，谢谢&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;网站编辑：Nosql的文章比较少，请不要删除啊。。。。。O(&amp;#8745;_&amp;#8745;)O~&lt;/p&gt;&lt;p&gt;这个东西也是花了很多时间才完成的啊 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2400092.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2012/03/16/2400092.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TextEditor/archive/2012/03/07/2384142.html</id><title type="text">MongoDB 可视化管理工具 MongoCola-1.0.4发布</title><summary type="text">随着NoSql的流行，MongoDB这款阶层型数据库慢慢被大家熟悉。园子里面的一线码农同志也在连载 8天学通MongoDB。 大家可能已经熟悉了图形界面的数据库管理工具，对于命令行可能不是很顺手。当然，有很多图形界面的MongoDB工具，不过大都不是用NET来写的，唯一的一款NET开发的MongoVUE不是开源软件。在30天试用期过后，很多功能就无法使用了。前段时间在学习MongoDB，所以用C#开发了一个MongoDB的可视化工具，已经在GitHub上开源了。GitHub地址：https://github.com/magicdict/MagicMongoDBTool现在版本已经升级到了1.0</summary><published>2012-03-07T12:09:00Z</published><updated>2012-03-07T12:09:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2012/03/07/2384142.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2012/03/07/2384142.html"/><content type="html">&lt;p&gt;随着NoSql的流行，MongoDB这款阶层型数据库慢慢被大家熟悉。园子里面的一线码农同志也在连载 8天学通MongoDB。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;大家可能已经熟悉了图形界面的数据库管理工具，对于命令行可能不是很顺手。&lt;/p&gt;&lt;p&gt;当然，有很多图形界面的MongoDB工具，不过大都不是用NET来写的，唯一的一款NET开发的MongoVUE不是开源软件。在30天试用期过后，很多功能就无法使用了。&lt;/p&gt;&lt;p&gt;前段时间在学习MongoDB，所以用C#开发了一个MongoDB的可视化工具，已经在GitHub上开源了。&lt;/p&gt;&lt;p&gt;GitHub地址：&lt;/p&gt;&lt;p&gt;&lt;div&gt;https://github.com/magicdict/MagicMongoDBTool&lt;/div&gt;&lt;/p&gt;&lt;p&gt;现在版本已经升级到了1.04了，使用的是官方的驱动程序，需要NET3.5的支持。&lt;/p&gt;&lt;p&gt;如果你需要编译好的版本：&lt;/p&gt;&lt;p&gt;&lt;div&gt;https://github.com/magicdict/MagicMongoDBTool/downloads&lt;/div&gt;&lt;/p&gt;&lt;p&gt;这个版本和1.03比起来有以下的改变：&lt;/p&gt;&lt;p&gt;在主窗体里面添加了服务器状态和ShellCommand&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/Main_Empty.PNG" height="673" width="1052" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.可以使用一些高级选项在添加数据集的时候&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/texteditor/NewCollectionInput.PNG" height="258" width="356" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.增加了数据集的Compact功能&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;欢迎你告诉我Bug和提供建议和意见&lt;/p&gt;&lt;p&gt;如果可以的话，欢迎你贡献代码&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Release Note:(面向全世界的软件，所以用英文写了版本升级备忘录）&lt;/p&gt;&lt;p&gt;&lt;div&gt;========================================================================&lt;br /&gt;MongoCola Release Note&lt;br /&gt;========================================================================&lt;br /&gt;Ver 1.00 2011/12/22 &lt;br /&gt;&lt;br /&gt;This is the first release of MongoCola.&lt;br /&gt;&lt;br /&gt;========================================================================&lt;br /&gt;Release History&lt;br /&gt;========================================================================&lt;br /&gt;Ver 1.04 2012/03/10&lt;br /&gt;&lt;br /&gt;1.Open In Native Editor at Textview&lt;br /&gt;2.Compact Collection&lt;br /&gt;3.Advance options for Create a Collection&lt;br /&gt;4.Show Server Status at Mainform&lt;br /&gt;5.Add View ToolStrip and move DataNav to View Toolstrip.&lt;br /&gt;6.Fix display bug at connection list form.&lt;br /&gt;7.Change Online userguide to local&lt;br /&gt;&lt;br /&gt;========================================================================&lt;br /&gt;Ver 1.03 2012/01/13&lt;br /&gt;&lt;br /&gt;1.Set All Form's FontSize to 9.75pt.&lt;br /&gt;2.Show CommandText After a command is completed.&lt;br /&gt;3.Clear Navi Record Label After Clear.&lt;br /&gt;4.Fix a bug when show fileInfo at TableView&lt;br /&gt;5.Fix a bug when add a connection by use a ConnectionString &lt;br /&gt;6.Modify Repair Database Enable condition.&lt;br /&gt;&lt;br /&gt;========================================================================&lt;br /&gt;Ver 1.02 2012/01/04&lt;br /&gt;&lt;br /&gt;1.Display "English" at Language Picker form instead of Space when default Language is used.&lt;br /&gt;2.Show Connection Host and Port at Connection ListBox.&lt;br /&gt;3.Array Operation is supported.&lt;br /&gt;4.BsonDocument Element is supported.&lt;br /&gt;5.Correct Paste ShortKey form Ctrl + P to Ctrl + V.&lt;br /&gt;6.Show Message When exception happend at Element operation.&lt;br /&gt;&lt;br /&gt;========================================================================&lt;br /&gt;Ver 1.01 2011/12/27&lt;br /&gt;&lt;br /&gt;1.Add Chinese and Japanese Language File&lt;br /&gt;2.Make Status Form Sizable&lt;br /&gt;&lt;br /&gt;========================================================================&lt;/div&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2384142.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2012/03/07/2384142.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TextEditor/archive/2012/02/07/2341405.html</id><title type="text">如何模拟世界--游戏的扁平化</title><summary type="text">Web2.0带来的世界，归纳一下就是扁平化，以前往往是网站作为内容的制造和发布者，当下，微博，博客，都将用户作为内容的制造者。以前那种以网站为制高点的形式变成了个人为制高点。珠穆朗玛峰变成了一座座小山。 我一直在思考这样的一个问题，能不能我们把网络游戏也通过这样的思路，让每个用户变成游戏规则的制定者，将传统的游戏开发者升级游戏版本，变成由玩家推进，推动游戏版本的升级。这里，游戏的原始开发变成了一个基础建设的工作，为了保持游戏的基本功能，和公平公正，建设一些基础的框架，而剩下的东西都可以由用户来定义和发展。 最简单的一个例子是，NPC的玩家化。传统的网游中，贩卖基本道具的都是NPC，新网游...</summary><published>2012-02-07T05:50:00Z</published><updated>2012-02-07T05:50:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2012/02/07/2341405.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2012/02/07/2341405.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Web2.0带来的世界，归纳一下就是扁平化，以前往往是网站作为内容的制造和发布者，当下，微博，博客，都将用户作为内容的制造者。以前那种以网站为制高点的形式变成了个人为制高点。珠穆朗玛峰变成了一座座小山。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 我一直在思考这样的一个问题，能不能我们把网络游戏也通过这样的思路，让每个用户变成游戏规则的制定者，将传统的游戏开发者升级游戏版本，变成由玩家推进，推动游戏版本的升级。这里，游戏的原始开发变成了一个基础建设的工作，为了保持游戏的基本功能，和公平公正，建设一些基础的框架，而剩下的东西都可以由用户来定义和发展。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 最简单的一个例子是，NPC的玩家化。传统的网游中，贩卖基本道具的都是NPC，新网游中，贩卖道具的可以是任何一个玩家。玩家可以自己定道具的价格，可以雇佣具有制作道具的能力的玩家，可以从其他职业那里收购道具的原材料。（当然很多游戏都曾经有过这样的尝试，但是都不够彻底）。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 在这样的一个游戏中，自由度将极度提升，每个玩家的个人意志可能变成最大程度影响游戏，也可能出现蝴蝶效应。这样的游戏最后将变成对于真实世界的模拟。通过这个世界的，可以进行很多实验。例如，物价波动对于商品的销售影响等等。和上一篇文章不同的是，网络游戏中的用户不是随机函数的产物，而是真实的人，所以这样的模拟将会更有实际的意义。当这个人群的数量到了一定规模，将可以模拟很多有趣的东西。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; Facebook的最大价值在于它掌握了海量用户行为，通过数学家合理建立数学模型，在心理学家的帮助下，可以达到对于社会群体状态的一个监视的作用。社会的热点，潮流的风向标等等，都能够预先掌握。这些东西是极其有价值的，例如大家对于手机操作系统的抱怨，大家分享的音乐歌手等等，都有巨大的商业价值。FaceBook作为最大的广告公司，通过对于单个用户的长期行为的分析，将能够获得很多个人的信息，可能这些信息，习惯，倾向是用户自己都不知道的。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 国内的开心网，人人网，只是学到了FaceBook的标，没有学到本。开心变成了一个看帖的地方和网页游戏的地方，太可惜了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 回到正题，Facebook等等，是一个小的社会的模拟，现在的社交网站，做到了样本数量的多，没有做到用户行为的极度自由化。如果能让用户行为尽量的多，能够让大家&amp;#8220;生活&amp;#8221;在这样一个虚拟的世界，那该多好啊。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 想象一下，植树节的时候，这个模拟世界里的人可以在家里周围种树，不高兴的时候，这个世界里的人物可以表现出自己的情绪，然后这个世界也会出现一些变化。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 当然，这样的游戏，在短期里面投入巨大，也无法靠贩卖道具，降低合成成功率等下三滥的方法赚到钱的，但是真的有这样的游戏后，等到玩家数量到一定级别后，可以作为一个商用的咨询，指定战略目标的一个通用工具。调查公司，问卷调查等等都可以通过这个工具来完成。游戏，可以变成一个工具。&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2341405.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2012/02/07/2341405.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TextEditor/archive/2012/01/29/2330829.html</id><title type="text">如何模拟世界 -- 一个奇怪的想法</title><summary type="text">过年在家休息，脑袋里面冒出一个奇怪的想法。如何使用程序来模拟整个世界。 从小就是模拟经营类游戏的粉丝，所以对于模拟程序特别感兴趣。玩过很多模拟城市类似的东西，总是觉得游戏虽然好，但是不过瘾。大部分游戏都是围绕着建筑物展开的，物理特性的模拟为主，我希望看到一个以模拟人物为主，以人为中心的，人文的模拟类程序。如果可以的话，希望给每个人物设定独特的性格，每个人物都可以有自己独立的行为和思想。如果允许的话，为每个人物开一个独立的线程。 当然，产生这个念头的另一个原因是，很多网络游戏和网页游戏，到后期都容易变成死服。既然是死服了，我们能不能设计这样一个单机游戏，依靠模拟人的行为，将一个单机游戏模拟...</summary><published>2012-01-29T01:35:00Z</published><updated>2012-01-29T01:35:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2012/01/29/2330829.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2012/01/29/2330829.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 过年在家休息，脑袋里面冒出一个奇怪的想法。如何使用程序来模拟整个世界。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 从小就是模拟经营类游戏的粉丝，所以对于模拟程序特别感兴趣。玩过很多模拟城市类似的东西，总是觉得游戏虽然好，但是不过瘾。大部分游戏都是围绕着建筑物展开的，物理特性的模拟为主，我希望看到一个以模拟人物为主，以人为中心的，人文的模拟类程序。如果可以的话，希望给每个人物设定独特的性格，每个人物都可以有自己独立的行为和思想。如果允许的话，为每个人物开一个独立的线程。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 当然，产生这个念头的另一个原因是，很多网络游戏和网页游戏，到后期都容易变成死服。既然是死服了，我们能不能设计这样一个单机游戏，依靠模拟人的行为，将一个单机游戏模拟成为一个多人游戏呢？如果能够做到模拟每个用户的行为，加上一些AI的元素，理论上可以做到模拟一个多用户的环境。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 实现这样的一个东西，难度很大，不过，真的可以实现出来，用处也很多。当这个模型做到高度成熟的时候，可以模拟和预测很多东西： 如果一个商品涨价后，多少用户还会继续购买商品；电影的主角选择谁，会具有最多的票房。当然，这个系统和天气预报一样，由于复杂度太高，精确度很难得到保障。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如何来建立这样的一个模型，这个模型是建立在海量统计数据上的。有很多统计数据，用户倾向，都沉睡在Facebook，开心，人人的历史数据里面。每年调查公司都会做很多问卷调查。这些数据如果可以用到这个模型中，将会起很大作用。例如，18-35岁的人，每周会看多少部电影，分别喜欢看什么题材的电影，天气对于出门看电影的影响等等，每个独立的调查可能不能产生很大的作用，不过，当几万个这样的调查结果用于模型的时候，我认为可以在某些方面模拟出真实的用户行为了。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 这个模型，如果要做到极致，出路只有一条，将所有的东西，所有的对象都模拟出来。虚拟的人，喝了一瓶虚拟的可乐，增加了快乐度，同时增加了卡路里。可乐又增加了饮料公司的销售额，同时增加了垃圾量，增加了可回收的垃圾数目。只有将小到一瓶可乐都定义为一个Object（里面的可乐，外面的瓶子其实也可以是两个对象），都仔细的去管理，才能将模拟做到极致。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 真的动手写这样的东西，其实已经超出了程序员的能力了。就算做一个大粒度的模拟，牵涉到的类，模型的数量就很惊人。然后就是为了真实性，还需要大量的统计数据作为随机函数的支持。生成1000个Person对象，性别的话，0.5/0.5这样的比例就可以了。但是血型呢？全世界人，A，B，AB，O，其他血型的比例是多少，这个必须要查资料，平均化处理肯定不对。每个人的生日可以平均分布在365天里面，不过每个人喜欢的颜色，每种颜色的比例也必须查资料。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 做这个东西的另一个意义是挑战思维。这个东西比大部分人在工作中写的代码难上很多很多。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 1.多线程：如果有1000个人，都要进行一些社交活动，线程是必须使用的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 2.海量数据的处理，1000个人将生成很多数据，模拟越复杂，数据越多&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 3.模型的设计，UML等等的功力的挑战。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 4.另外的一些编程的Sense&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 5.将资料，信息转化为代码的能力。怎么将手头上的文字转化为代码。怎么将现实生活中的行为，转化为代码。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 6.耐性：这个东西，在没有成型前，一点都不好玩，一点都看不到前途和钱途。但是一旦完成后，将会产生巨大的效果。这个东西在中国开源，按照过去的经验，基本上没有人肯贡献代码，一定要有单打独斗的准备。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 不知道这个东西能够做到什么程度，不过，真的能够在开发这个东西的时候，收集到很多资料，有很多想法，也是不错的。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2330829.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2012/01/29/2330829.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TextEditor/archive/2012/01/08/2316334.html</id><title type="text">给C#学习者的建议 - CLR Via C# 读后感</title><summary type="text">CLR Via C# 是一本经典的讲述CLR的教材，一直想好好读读，却一直没有去读。去年年末，终于下决心，买了一本纸质的CLR Via C#,元旦这几天在家里闭门读书（3天元旦 + 2天自己的带薪假期）。 其实，早就在网络上下载过了电子版的英语的CLR Via C#了，不过，电子书的问题也很明显，由于是免费的，所以不是很重视，买了纸质的书，自己花了真金白银，所以格外重视，不能对不起人民币啊（古人说的，书非借不能读，其实也说明了这个意思）。加上这样的书，读原版是相当痛苦的，还是读中文的比较靠谱。 去年的11月份，有一篇 【1个月学会C++ 】的博文，引起了骂战，按照这篇博文的逻辑，CLR一书的作</summary><published>2012-01-08T04:50:00Z</published><updated>2012-01-08T04:50:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2012/01/08/2316334.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2012/01/08/2316334.html"/><content type="html">&lt;div&gt;CLR Via C# 是一本经典的讲述CLR的教材，一直想好好读读，却一直没有去读。&lt;/div&gt;&lt;p&gt;去年年末，终于下决心，买了一本纸质的CLR Via C#,元旦这几天在家里闭门读书（3天元旦 + 2天自己的带薪假期）。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 其实，早就在网络上下载过了电子版的英语的CLR Via C#了，不过，电子书的问题也很明显，由于是免费的，所以不是很重视，买了纸质的书，自己花了真金白银，所以格外重视，不能对不起人民币啊（古人说的，书非借不能读，其实也说明了这个意思）。加上这样的书，读原版是相当痛苦的，还是读中文的比较靠谱。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 去年的11月份，有一篇&amp;nbsp; 【1个月学会C++ 】的博文，引起了骂战，按照这篇博文的逻辑，CLR一书的作者也可以归为垃圾了。不过，我想能一直在这里看博文的同志，不是那种只想看电视，而不想知道电视机内部的原理的人吧。这里和CSDN的论坛不一样，CSDN的论坛，索取的人比较多，项目做到一半，出现了无法解决的问题，自己懒得去Google，然后急急忙忙注册个账号，发个有点挑衅的标题，《是高手的，就进来挑战一下》云云，然后就坐等答案。这里的人，更多的是分享，以及对于底层的探索。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NET，属于入门容易，学好难的东西。我可以说，使用NET写个HelloWorld，在宇宙第一的IDE帮助下，一个小时就可以了。21天学会C#，也是非常容易的。如果，你的目标只是靠C#找个专做数据查询，插入，删除的外包的职位，我觉得，你可以不必花时间学习 CLR 这本书了，有时间的话，考个日语一级什么的比较划算。如果，你有足够的好奇心，想知道一些CLR内部的原理的话，强烈建议去好好读读这本书。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;当然，如果你是初学者，不建议一开始就读这本书，而是建议，先动手写几个月的C#，然后积累一些心得体会，或者是一些疑问，然后带着疑问去读CLR，这个是最好的了。一些东西，直接把答案放在你面前，缺少你的独立思考，是没有办法完全映入脑子里面去的，过点时间就忘记了。我来说说我以前一直纠结的一些事情吧：&lt;/p&gt;&lt;p&gt;1.大写的String 和 string 到底有什么区别？（5章 基元数据）&lt;/p&gt;&lt;p&gt;2.Animal t = New Cat(); ,这个时候 t 的方法到底是Animal的，还是Cat？（4章 实方法和虚方法）&lt;/p&gt;&lt;p&gt;3.字符驻留的概念到底是怎么样子的？（14章 字符）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 4.编译好的EXE文件，在你双击了这个文件到打印出HelloWorld之间，到底发生了什么事情？（1-3章，22章AppDomain）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这些答案都可以在CLR一书中找到答案。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 这本书的另一个特点是，代码很规范。例如，以前做一个自定义的控件，要实现一个事件，就定义一个Event在控件里面，然后在父窗体中将委托和处理的Handle使用+=绑定一下就结束了。读了CLR以后，知道一个标准的Event应该怎么做，什么样子的才是规范的，比如你需要定义一个EventArgs等等。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 比起很多博文里面纯文字 + 代码的解说，这本书里面的图，也很赞。很多原理，在插图的帮助下，让人一下子就记住了。例如在讲解 &lt;/p&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.Animal t = New Cat(); ,这个时候 t 的方法到底是Animal的，还是Cat？&lt;/div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 的时候，线程栈，对象堆的图就很容易理解。讲解委托链的配图，也将大家的学习成本降低了很多。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这本书最牛的地方就是，把一些我们司空见惯的东西，从源头上讲明白了，例如一个 event 关键字后面，其实包含了一个委托，两个操作委托链的方法。匿名方法，其实编译器在后台还是把语法糖还原成为了一个新的CompileGenerate(编译器生成）的类。如果你知道这些东西的话，你的NET水平会增加很多，或者说，能够突破你的能力的瓶颈，或者，能让你在技术的论战中，有足够的底气和论据。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 如果你有时间，我建议你通读全书，如果再有时间，希望能够一页一页读，反反复复的读。如果你真的很忙，建议，4-19章必须至少读一遍。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; 如果有可能的话，把你的感想写在书得空白处，如果你爱惜书的话，可以使用 N次贴，把读书笔记贴在上面（我是这样干的，字写得不好。。。）。如果能写在博客上，也是个好主意，写过一遍的东西，记得更深刻了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当然，你只是想看电视，不想知道电视机背后的原理，还是学点别的东西比较靠谱。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 最后我谈谈C#和CLR。C#不是CLR的全部，只是一种实现罢了。不要以为C#的标准就是CLR的标准。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 例如：CLR的规范是 变量不区分大小写的.(VB.NET是不区分变量大小写的，所以公共语言规范是不区分变量大小写的，不然的话，C#的程序，VB无法使用）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 返回值类型不同的方法，可以认为是不同的方法，例如 public int GetSomething() 和 public String GetSomething() 是不一样的方法。不过除了IL之外，所有的语言都不允许这样。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 和书的作者担心的一样，大家将C#慢慢和CLR划等号了，以为C#的规范就是CLR的规范（VBNET，Vber的悲哀），所以有必要把两者的关系分开来。原本MS希望通过IL层，希望百花齐放，百家争鸣，不过，看样子，变成C#一家独大了，IL的重要性很微妙了（MONO好像也是有自己规范的IL的，不是只做CLR）反正只有C#了，反正各个平台有自己的IL规范，直接C#到Native，效率问题也解决了。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2316334.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2012/01/08/2316334.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TextEditor/archive/2011/12/28/2304649.html</id><title type="text">MongoCola 1.01 发布  MongoDB管理工具</title><summary type="text">年底了，MongoDB的管理工具也应该发布一个正式的版本了。这个正式版的最大更改就是完全放弃了皮肤系统：说到这个皮肤系统，真是又爱又恨，皮肤的确可以提升程序在WindowsXP下的美观程度，不过，由于皮肤的一些潜在的Bug，会造成一些界面表示的问题，这些问题在MONO上尤其突出。为了彻底根绝这些奇诡的GUI问题，最后决定放弃皮肤了。考虑到国际化，决定将默认的语言改为English，同时推出了中文和日本语的语言包。接下来作为一个专业的应用软件，开辟了一个用户手册的网站，没有精力做中文和日本语的翻译，只提供了英语版本的帮助文件。感谢MoLing帮忙修改。用户手册（UserGuide）一如既往的开.</summary><published>2011-12-28T05:11:00Z</published><updated>2011-12-28T05:11:00Z</updated><author><name>magicDict</name><uri>http://www.cnblogs.com/TextEditor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TextEditor/archive/2011/12/28/2304649.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TextEditor/archive/2011/12/28/2304649.html"/><content type="html">&lt;p&gt; 年底了，MongoDB的管理工具也应该发布一个正式的版本了。&lt;/p&gt;&lt;p&gt;这个正式版的最大更改就是完全放弃了皮肤系统：&lt;/p&gt;&lt;p&gt;说到这个皮肤系统，真是又爱又恨，皮肤的确可以提升程序在WindowsXP下的美观程度，不过，由于皮肤的一些潜在的Bug，会造成一些界面表示的问题，这些问题在MONO上尤其突出。&lt;/p&gt;&lt;p&gt;为了彻底根绝这些奇诡的GUI问题，最后决定放弃皮肤了。&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://magicdict.com/UserGuide/images/Main_MagicDict.PNG" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;考虑到国际化，决定将默认的语言改为English，同时推出了中文和日本语的语言包。&lt;/p&gt;&lt;p&gt;接下来作为一个专业的应用软件，开辟了一个用户手册的网站，没有精力做中文和日本语的翻译，只提供了英语版本的帮助文件。感谢MoLing帮忙修改。&lt;/p&gt;&lt;p&gt;&lt;a title="用户手册（UserGuide）" href="http://magicdict.com/UserGuide/index.htm"&gt;用户手册（UserGuide）&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;一如既往的开源，只要你想看。对于想使用C#操作Mongo的朋友，你可以从源代码中学习到很多东西。&lt;/p&gt;&lt;p&gt;&lt;a title="GitHub源代码" href="https://github.com/magicdict/MagicMongoDBTool"&gt;GitHub源代码&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果你有什么关于MongoDB的问题：&lt;/p&gt;&lt;p&gt;&lt;a title="Google的MongoDB论坛" href="http://groups.google.com/group/mongodb-user"&gt;Google的MongoDB论坛&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;不知道MongoDB的未来。可能是浪费时间学习一门技术，也可能不小心变先驱，大家自己决定。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TextEditor/aggbug/2304649.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TextEditor/archive/2011/12/28/2304649.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
