﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;span class="style11"&gt;★33°空间‰&lt;/span&gt;-随笔分类-转载</title><link>http://www.blogjava.net/yeiwei/category/15477.html</link><description> &lt;span class="style14"&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;----智力比知识重要，素质比智力重要，觉悟比素质更重要 &lt;/span&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 20 Apr 2007 10:49:13 GMT</lastBuildDate><pubDate>Fri, 20 Apr 2007 10:49:13 GMT</pubDate><ttl>60</ttl><item><title>生成静态文件的新闻系统核心代码 </title><link>http://www.blogjava.net/yeiwei/archive/2007/04/11/109965.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 11 Apr 2007 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/04/11/109965.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/109965.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/04/11/109965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/109965.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/109965.html</trackback:ping><description><![CDATA[<p>在网上看了许多能生成静态页的新闻系统，但基于asp.net的系统极少，闲下时间来自己写了一个，发出来，大家一起研究，代码没做什么优化，只是实现了功能</p>
<p>&nbsp;</p>
<p>using System;<br>using System.Collections;<br>using System.ComponentModel;<br>using System.Data;<br>using System.Data.OleDb;<br>using System.Drawing;<br>using System.Web;<br>using System.Web.SessionState;<br>using System.Web.UI;<br>using System.Web.UI.WebControls;<br>using System.Web.UI.HtmlControls;<br>using System.Configuration;</p>
<p>namespace makehtmlfile<br>{<br>&nbsp;/// &lt;summary&gt;<br>&nbsp;/// makeallfiles 的摘要说明。<br>&nbsp;/// &lt;/summary&gt;<br>&nbsp;public class makeallfiles : System.Web.UI.Page<br>&nbsp;{<br>&nbsp;&nbsp;public string strcon;<br>&nbsp;&nbsp;public OleDbConnection conn;<br>&nbsp;&nbsp;public string strSQL;</p>
<p>&nbsp;&nbsp;private void Page_Load(object sender, System.EventArgs e)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;InitialPages();// 在此处放置用户代码以初始化页面<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;public void InitialPages()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;strcon&nbsp;&nbsp;&nbsp; = "provider=Microsoft.jet.OLEDB.4.0;data Source="+Server.MapPath(ConfigurationSettings.AppSettings["MDBpath2"])+";";//连接字符窜// 在此处放置用户代码以初始化页面<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strSQL = "select id,class1id,class2id from news order by id desc";<br>&nbsp;&nbsp;&nbsp;MakeAreaForShow(); <br>&nbsp;&nbsp;&nbsp;ReadNewsForWriteFileUserDataReader();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //同过DataReader来读取数据，<br>&nbsp;&nbsp;&nbsp;//ReadNewsForWriteFileUserDataSet();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将数据直接挂入DataSet中来读取，<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 用来产生循环显示页面的区域，装载生成HTML页的ASPX页面的区域<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;public void MakeAreaForShow()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;Response.Write("&lt;span id=showImport&gt;&lt;/span&gt;");<br>&nbsp;&nbsp;&nbsp;Response.Write("&lt;IE:Download ID='oDownload' STYLE='behavior:url(#default#download)'/&gt;");<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 通过DATAREADER来读取数据<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;public void ReadNewsForWriteFileUserDataReader()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; 0&nbsp;&nbsp; ;<br>&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newsid&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; null;<br>&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class1id&nbsp;&nbsp; =&nbsp;&nbsp; null;<br>&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class2id&nbsp;&nbsp; =&nbsp;&nbsp; null;<br>&nbsp;&nbsp;&nbsp;OleDbDataReader&nbsp; dr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; null;<br>&nbsp;&nbsp;&nbsp;OleDbConnection&nbsp; conn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; new OleDbConnection(strcon);<br>&nbsp;&nbsp;&nbsp;conn.Open();<br>&nbsp;&nbsp;&nbsp;OleDbCommand&nbsp;&nbsp;&nbsp;&nbsp; mycommand&nbsp; =&nbsp;&nbsp; new OleDbCommand(strSQL,conn);<br>&nbsp;&nbsp;&nbsp;dr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; mycommand.ExecuteReader();<br>&nbsp;&nbsp;&nbsp;while(dr.Read())<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;newsid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; dr["id"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;class1id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; dr["class1id"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;class2id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; dr["class2id"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;WriteJScript(newsid,class1id,class2id);<br>&nbsp;&nbsp;&nbsp;&nbsp;num++;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;dr.Close();<br>&nbsp;&nbsp;&nbsp;conn.Close();<br>&nbsp;&nbsp;&nbsp;Response.Write(num.ToString());</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 通过DATASET来读取数据<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;public void ReadNewsForWriteFileUserDataSet()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;DataSet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; new DataSet();<br>&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; 0&nbsp;&nbsp; ;<br>&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newsid&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; null;<br>&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class1id&nbsp;&nbsp; =&nbsp;&nbsp; null;<br>&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class2id&nbsp;&nbsp; =&nbsp;&nbsp; null;</p>
<p>&nbsp;&nbsp;&nbsp;OleDbConnection&nbsp; conn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; new OleDbConnection(strcon);<br>&nbsp;&nbsp;&nbsp;conn.Open();<br>&nbsp;&nbsp;&nbsp;OleDbDataAdapter da&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; new OleDbDataAdapter(strSQL,conn);<br>&nbsp;&nbsp;&nbsp;da.Fill(ds,"news");<br>&nbsp;&nbsp;&nbsp;conn.Close();<br>&nbsp;&nbsp;&nbsp;num&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; ds.Tables["news"].Rows.Count;<br>&nbsp;&nbsp;&nbsp;foreach(DataRow dr in ds.Tables["news"].Rows)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;newsid&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; dr["id"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;class1id&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; dr["class1id"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;class2id&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; dr["class2id"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;WriteJScript(newsid,class1id,class2id);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;ds = null;<br>&nbsp;&nbsp;&nbsp;Response.Write(num.ToString());<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;public void WriteJScript(string newsid,string class1id,string class2id)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;Response.Write("&lt;script&gt;");<br>&nbsp;&nbsp;&nbsp;Response.Write("function onDownloadDone(downDate)");<br>&nbsp;&nbsp;&nbsp;Response.Write("{");<br>&nbsp;&nbsp;&nbsp;Response.Write("showImport.innerHTML=downDate");<br>&nbsp;&nbsp;&nbsp;Response.Write("}");<br>&nbsp;&nbsp;&nbsp;Response.Write("oDownload.startDownload('makefile2.aspx?id=");<br>&nbsp;&nbsp;&nbsp;Response.Write(newsid);<br>&nbsp;&nbsp;&nbsp;Response.Write("&amp;class1id=");<br>&nbsp;&nbsp;&nbsp;Response.Write(class1id);<br>&nbsp;&nbsp;&nbsp;Response.Write("&amp;class2id=");<br>&nbsp;&nbsp;&nbsp;Response.Write(class2id);<br>&nbsp;&nbsp;&nbsp;Response.Write("',onDownloadDone)");<br>&nbsp;&nbsp;&nbsp;Response.Write("&lt;/script&gt;");<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;#region Web 窗体设计器生成的代码<br>&nbsp;&nbsp;override protected void OnInit(EventArgs e)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;//<br>&nbsp;&nbsp;&nbsp;// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。<br>&nbsp;&nbsp;&nbsp;//<br>&nbsp;&nbsp;&nbsp;InitializeComponent();<br>&nbsp;&nbsp;&nbsp;base.OnInit(e);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 设计器支持所需的方法 - 不要使用代码编辑器修改<br>&nbsp;&nbsp;/// 此方法的内容。<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;private void InitializeComponent()<br>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;this.Load += new System.EventHandler(this.Page_Load);</p>
<p>&nbsp;&nbsp;}<br>&nbsp;&nbsp;#endregion<br>&nbsp;}<br>}</p>
<p>&nbsp;</p>
<p>using System;<br>using System.Collections;<br>using System.ComponentModel;<br>using System.Data;<br>using System.Configuration;<br>using System.Data.OleDb;<br>using System.Drawing;<br>using System.Web;<br>using System.IO;<br>using System.Web.SessionState;<br>using System.Web.UI;<br>using System.Web.UI.WebControls;<br>using System.Web.UI.HtmlControls;</p>
<p>namespace makehtmlfile<br>{<br>&nbsp;/// &lt;summary&gt;<br>&nbsp;/// makefile2 的摘要说明。<br>&nbsp;/// &lt;/summary&gt;<br>&nbsp;public class makefile2 : System.Web.UI.Page<br>&nbsp;{<br>&nbsp;&nbsp;public string strcon;<br>&nbsp;&nbsp;public OleDbConnection conn;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;public string class1id;<br>&nbsp;&nbsp;public string class2id;<br>&nbsp;&nbsp;//***********************************<br>&nbsp;&nbsp;public string previd;<br>&nbsp;&nbsp;public string prevtitle;<br>&nbsp;&nbsp;public string nextid;<br>&nbsp;&nbsp;public string nexttitle;<br>&nbsp;&nbsp;//***********************************<br>&nbsp;&nbsp;public string newstitle;<br>&nbsp;&nbsp;public string newscontent;<br>&nbsp;&nbsp;public string newsdate;<br>&nbsp;&nbsp;public string newsip;<br>&nbsp;&nbsp;public string newsid;<br>&nbsp;&nbsp;//************************************</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;private void Page_Load(object sender, System.EventArgs e)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;strcon&nbsp;&nbsp;&nbsp; = "provider=Microsoft.jet.OLEDB.4.0;data Source="+Server.MapPath(ConfigurationSettings.AppSettings["MDBpath2"])+";";//连接字符窜// 在此处放置用户代码以初始化页面<br>&nbsp;&nbsp;&nbsp;if(Request.Params["id"]!=null&amp;&amp;Request.Params["class1id"]!=null&amp;&amp;Request.Params["class2id"]!=null)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;InitialPages();</p>
<p>&nbsp;&nbsp;&nbsp;}// 在此处放置用户代码以初始化页面<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;public void InitialPages()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;strcon&nbsp;&nbsp;&nbsp; = "provider=Microsoft.jet.OLEDB.4.0;data Source="+Server.MapPath(ConfigurationSettings.AppSettings["MDBpath2"])+";";<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;if(Request.Params["id"]!=null)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;newsid&nbsp; = Request.Params["id"].ToString();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;if(Request.Params["class1id"]!=null)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;class1id&nbsp; = Request.Params["class1id"].ToString();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;if(Request.Params["class2id"]!=null)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;class2id&nbsp; = Request.Params["class2id"].ToString();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;ReadDataBase(newsid,class2id);<br>&nbsp;&nbsp;&nbsp;MakeHtmlFile(newsid,class1id,class2id);<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 读写同一分类中，上一篇，和下一篇文章<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;/// &lt;param name="inputid"&gt; 该文章ID&lt;/param&gt;<br>&nbsp;&nbsp;/// &lt;param name="class2id"&gt;该文章所属分类ID&lt;/param&gt;<br>&nbsp;&nbsp;public void ReadPrevAndNext(string inputid,string class2id)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; int.Parse(inputid);<br>&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strPrevSQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; "select top 1 id,newstitle,newsdate from news where class2id='"+ class2id +"' and id&lt;"+id+" order by id desc";<br>&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strNextSQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; "select top 1 id,newstitle,newsdate from news where class2id='"+ class2id +"' and id&gt;"+id+" order by id asc";<br>&nbsp;&nbsp;&nbsp;OleDbDataReader&nbsp;&nbsp; datar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; null;<br>&nbsp;&nbsp;&nbsp;OleDbConnection con&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = new OleDbConnection(strcon);<br>&nbsp;&nbsp;&nbsp;con.Open();<br>&nbsp;&nbsp;&nbsp;OleDbCommand newcommand&nbsp;&nbsp; = new OleDbCommand(strPrevSQL,con);<br>&nbsp;&nbsp;&nbsp;datar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = newcommand.ExecuteReader();<br>&nbsp;&nbsp;&nbsp;while(datar.Read())<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;previd&nbsp;&nbsp;&nbsp; =&nbsp; datar["id"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;prevtitle =&nbsp; datar["newstitle"].ToString();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;datar.Close();<br>&nbsp;&nbsp;&nbsp;newcommand.CommandText = strNextSQL ;<br>&nbsp;&nbsp;&nbsp;datar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = newcommand.ExecuteReader();<br>&nbsp;&nbsp;&nbsp;while(datar.Read())<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;nextid&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp; datar["id"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;nexttitle&nbsp; =&nbsp; datar["newstitle"].ToString();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;con.Close();</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 将文章信息从库中读出，并将准备生成的HTML文件路径写入库中<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;/// &lt;param name="inputid"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;/// &lt;param name="class2id"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;public void ReadDataBase(string inputid,string class2id)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;string filename_w = MakeFileName(class1id,class2id,newsid)+".htm";<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;ReadPrevAndNext(inputid,class2id);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;//读取下一篇和上一篇的信息。</p>
<p><br>&nbsp;&nbsp;&nbsp;OleDbConnection mycon&nbsp; = new OleDbConnection(strcon);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打开数据库连接<br>&nbsp;&nbsp;&nbsp;mycon.Open();</p>
<p>&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp; = int.Parse(inputid);<br>&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strSQL&nbsp;&nbsp;&nbsp; = "select * from news where id="+id;<br>&nbsp;&nbsp;&nbsp;OleDbDataReader&nbsp; dr&nbsp;&nbsp;&nbsp; = null;<br>&nbsp;&nbsp;&nbsp;OleDbCommand mycommand = new OleDbCommand(strSQL,mycon);<br>&nbsp;&nbsp;&nbsp;dr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = mycommand.ExecuteReader();<br>&nbsp;&nbsp;&nbsp;while(dr.Read())<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;newstitle&nbsp;&nbsp; = dr["newstitle"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;newscontent = dr["newscontent"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;newsdate&nbsp;&nbsp;&nbsp; = dr["newsdate"].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;newsip&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dr["newsip"].ToString();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;dr.Close();<br>&nbsp;&nbsp;&nbsp;mycommand.CommandText = "update news set url='"+ filename_w +"' where id="+int.Parse(inputid);&nbsp;&nbsp; //将生成的文件路径写入库中,以遍在生成分类页中方便使用<br>&nbsp;&nbsp;&nbsp;mycommand.ExecuteNonQuery();<br>&nbsp;&nbsp;&nbsp;mycon.Close();<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}</p>
<p><br>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 生成目标目录和文件，主要用来生成不同分类的目录<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;/// &lt;param name="inputstr"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;/// &lt;returns&gt;&lt;/returns&gt;<br>&nbsp;&nbsp;public string MakeCatalogName(string class1,string class2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //生成目标目录文件<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;string namestr&nbsp;&nbsp; = "Article";<br>&nbsp;&nbsp;&nbsp;string rootstr&nbsp;&nbsp; = Server.MapPath(".").ToString();<br>&nbsp;&nbsp;&nbsp;string class1str&nbsp; = rootstr + "\\" + namestr + "_" + class1 + "\\";<br>&nbsp;&nbsp;&nbsp;string class2str&nbsp; = rootstr + "\\" + namestr + "_" + class1 + "\\" + namestr + "_" + class2 + "\\";<br>&nbsp;&nbsp;&nbsp;if(!Directory.Exists(class1str))<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;Directory.CreateDirectory(class1str); <br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;if(!Directory.Exists(class2str))<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;Directory.CreateDirectory(class2str); <br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //创建目标文件夹<br>&nbsp;&nbsp;&nbsp;return class2str;<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 根据文章分类和ID生成文件名<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;/// &lt;param name="class1id"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;/// &lt;param name="class2id"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;/// &lt;param name="nid"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;/// &lt;returns&gt;返回文件名&lt;/returns&gt;<br>&nbsp;&nbsp;public string MakeFileName(string class1,string class2,string id)&nbsp;&nbsp;&nbsp; //生成文件名，能够生成上下篇<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;string myclass2id&nbsp;&nbsp;&nbsp; = class2;<br>&nbsp;&nbsp;&nbsp;string myclass1id&nbsp;&nbsp;&nbsp; = class1;<br>&nbsp;&nbsp;&nbsp;string s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = DateTime.Now.Year.ToString()<br>&nbsp;&nbsp;&nbsp;&nbsp;+DateTime.Now.Month.ToString()<br>&nbsp;&nbsp;&nbsp;&nbsp;+DateTime.Now.Day.ToString()<br>&nbsp;&nbsp;&nbsp;&nbsp;+"_"<br>&nbsp;&nbsp;&nbsp;&nbsp;+myclass1id&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;+"_"<br>&nbsp;&nbsp;&nbsp;&nbsp;+myclass2id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //父类ID<br>&nbsp;&nbsp;&nbsp;&nbsp;+"_"<br>&nbsp;&nbsp;&nbsp;&nbsp;+id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //新闻ID<br>&nbsp;&nbsp;&nbsp;return s;<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 生成HTML文件<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;/// &lt;param name="nid"&gt;文章ID号&lt;/param&gt;<br>&nbsp;&nbsp;public void MakeHtmlFile(string nid,string cla1id,string cla2id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; MakeHtmlFile(string nid,string cla1id,string cla2id,string filetemp)&nbsp; 用于区分不同的摸班<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;string file_path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; Server.MapPath ("template/news_mb.htm");<br>&nbsp;&nbsp;&nbsp;string desfilename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; MakeFileName(cla1id,cla2id,nid)+".htm";<br>&nbsp;&nbsp;&nbsp;string desfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; MakeCatalogName(cla1id,cla2id)+MakeFileName(cla1id,cla2id,nid)+".htm";<br>&nbsp;&nbsp;&nbsp;string prevurl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; MakeFileName(cla1id,cla2id,previd)+".htm";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //根据分类和ID生成上下篇的文件连接名<br>&nbsp;&nbsp;&nbsp;string nexturl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; MakeFileName(cla1id,cla2id,nextid)+".htm";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //下篇<br>&nbsp;&nbsp;&nbsp;System.Text.Encoding code&nbsp;&nbsp; =&nbsp;&nbsp; System.Text.Encoding.GetEncoding("gb2312");<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;StreamReader srd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //读<br>&nbsp;&nbsp;&nbsp;StreamWriter swr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //写<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;string strFile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; null ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //字符串<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;srd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; new StreamReader(file_path, code);<br>&nbsp;&nbsp;&nbsp;&nbsp;strFile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; srd.ReadToEnd(); // 读取文件<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;catch(Exception exp)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;HttpContext.Current.Response.Write(exp.Message);<br>&nbsp;&nbsp;&nbsp;&nbsp;HttpContext.Current.Response.End();<br>&nbsp;&nbsp;&nbsp;&nbsp;srd.Close();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;strFile = strFile.Replace("$title$",newstitle);<br>&nbsp;&nbsp;&nbsp;strFile = strFile.Replace("$content$",newscontent);<br>&nbsp;&nbsp;&nbsp;strFile = strFile.Replace("$date$",newsdate);<br>&nbsp;&nbsp;&nbsp;strFile = strFile.Replace("$ip$",newsip);<br>&nbsp;&nbsp;&nbsp;strFile = strFile.Replace("$prev$",prevtitle);<br>&nbsp;&nbsp;&nbsp;strFile = strFile.Replace("$next$",nexttitle);<br>&nbsp;&nbsp;&nbsp;strFile = strFile.Replace("$prevurl$",prevurl);<br>&nbsp;&nbsp;&nbsp;strFile = strFile.Replace("$nexturl$",nexturl);<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;swr = new StreamWriter(desfile,false,code);<br>&nbsp;&nbsp;&nbsp;&nbsp;swr.Write(strFile);<br>&nbsp;&nbsp;&nbsp;&nbsp;swr.Flush();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;catch(Exception ex)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;HttpContext.Current.Response.Write(ex.Message);<br>&nbsp;&nbsp;&nbsp;&nbsp;HttpContext.Current.Response.End();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;swr.Close();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;if(srd!=null)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;srd.Close();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;Response.Write(desfilename);</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;public void Open()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(conn==null)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;conn = new OleDbConnection(strcon);<br>&nbsp;&nbsp;&nbsp;&nbsp;conn.Open();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;public void Close()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(conn!=null)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;conn.Close();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;#region Web 窗体设计器生成的代码<br>&nbsp;&nbsp;override protected void OnInit(EventArgs e)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;//<br>&nbsp;&nbsp;&nbsp;// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。<br>&nbsp;&nbsp;&nbsp;//<br>&nbsp;&nbsp;&nbsp;InitializeComponent();<br>&nbsp;&nbsp;&nbsp;base.OnInit(e);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;/// &lt;summary&gt;<br>&nbsp;&nbsp;/// 设计器支持所需的方法 - 不要使用代码编辑器修改<br>&nbsp;&nbsp;/// 此方法的内容。<br>&nbsp;&nbsp;/// &lt;/summary&gt;<br>&nbsp;&nbsp;private void InitializeComponent()<br>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;this.Load += new System.EventHandler(this.Page_Load);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;#endregion<br>&nbsp;}<br>}</p><img src ="http://www.blogjava.net/yeiwei/aggbug/109965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-04-11 17:51 <a href="http://www.blogjava.net/yeiwei/archive/2007/04/11/109965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Asp.net 2.0 中将网站首页生成静态页的一个比较好的方法 </title><link>http://www.blogjava.net/yeiwei/archive/2007/04/11/109966.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 11 Apr 2007 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/04/11/109966.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/109966.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/04/11/109966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/109966.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/109966.html</trackback:ping><description><![CDATA[做网站时,有时为了提高性能会将网站首页生成静态页(当然,&nbsp;Asp.net中页面缓存也是一个不错的选择了 <br>将页面生成静态的方法有多中,据不完全统计有N种(N&gt;1) <br>呵呵 <br>以下的方法来自&nbsp;"孟子E&nbsp;"&nbsp;解释的方法 <br><br>代码如下 <br><br>&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;void&nbsp;Render(HtmlTextWriter&nbsp;writer) <br>&nbsp;&nbsp;&nbsp;&nbsp;...{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.IO.StringWriter&nbsp;html&nbsp;=&nbsp;new&nbsp;System.IO.StringWriter(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Web.UI.HtmlTextWriter&nbsp;tw&nbsp;=&nbsp;new&nbsp;HtmlTextWriter(html); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.Render(tw); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.IO.StreamWriter&nbsp;sw&nbsp;=&nbsp;new&nbsp;System.IO.StreamWriter(Server.MapPath("index.html"),&nbsp;false,&nbsp;System.Text.Encoding.Default); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sw.Write(html.ToString()); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sw.Close(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tw.Close(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write("页面生成成功!"); <br>&nbsp;&nbsp;&nbsp;&nbsp;} <br>将以上上函数数加如到你要生成静太文件的页面里, <br>函数从载了,Render函数&nbsp;作用是把页面的&nbsp;html文本截下来,保存到文件里, <br>进一步的可以去看一下asp.net页面生命过程. <br><br>&nbsp; <br><font size=3><font color=#ff0000>静态页面的生成&nbsp;</font></font> <br><br>protected&nbsp;override&nbsp;void&nbsp;Render(HtmlTextWriter&nbsp;writer)&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamWriter&nbsp;r=new&nbsp;StreamWriter(Server.MapPath(StaticFileName), <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false,System.Text.Encoding.UTF8);&nbsp;&nbsp;//StaticFileName是html文件名 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HtmlTextWriter&nbsp;h=new&nbsp;HtmlTextWriter(r); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.Render(h);&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.Close(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h.Close(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Redirect(StaticFileName); <br>} <br><br>然后在同一aspx的pageLoad事件中判断StaticFileName是否已经存在，如果存在，就应该直接转向，不应该继续生成页面了。<img src ="http://www.blogjava.net/yeiwei/aggbug/109966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-04-11 17:51 <a href="http://www.blogjava.net/yeiwei/archive/2007/04/11/109966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET生成静态页面实现方法 </title><link>http://www.blogjava.net/yeiwei/archive/2007/04/11/109964.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 11 Apr 2007 09:50:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/04/11/109964.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/109964.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/04/11/109964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/109964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/109964.html</trackback:ping><description><![CDATA[<p>&lt;!--Main.Aspx--&gt;<br>&lt;%@ page language="C#" %&gt;<br>&lt;%@ import namespace=System.IO %&gt;<br>&lt;script runat="server"&gt;<br>protected override void OnInit (EventArgs e)<br>{<br>　 int id;<br>　 try<br>　 {<br>　　　 id = int.Parse (Request.QueryString["id"]);<br>　 }<br>　 catch<br>　 {<br>　　　 throw (new Exception ("页面没有指定id"));<br>　 }<br>　 <br>　 string filename=Server.MapPath("statichtml_"+id+".html");<br>　 <br>　 //尝试读取已有文件<br>　 Stream s = GetFileStream (filename);<br>　 if (s != null)//如果文件存在并且读取成功<br>　 {<br>　　　 using (s)<br>　　　 {<br>　　　　　 Stream2Stream (s, Response.OutputStream);<br>　　　　　 Response.End ();<br>　　　 }<br>　 }<br>　 <br>　 <br>　 //调用Main_Execute,并且获取其输出<br>　 StringWriter sw = new StringWriter ();<br>　 Server.Execute ("Main_Execute.aspx", sw);<br>　 <br>　 string content = sw.ToString ();<br>　 <br>　 //输出到客户端<br>　 Response.Write(content);<br>　 Response.Flush();<br>　 <br>　 //写进文件<br>　 <br>　 try<br>　 {<br>　　　 using (FileStream fs = new FileStream (filename, FileMode.Create, FileAccess.Write, FileShare.Write))<br>　　　 {<br>　　　　　 using (StreamWriter streamwriter = new StreamWriter (fs, Response.ContentEncoding))<br>　　　　　 {<br>　　　　　　　 streamwriter.Write (content);<br>　　　　　 }<br>　　　 }<br>　 }<br>　 finally<br>　 {<br>　　　 //Response.End ();<br>　 }<br>}<br>static public void Stream2Stream (Stream src, Stream dst)<br>{<br>　 byte[] buf = new byte[4096];<br>　 while (true)<br>　 {<br>　　　 int c = src.Read (buf, 0, buf.Length);<br>　　　 if(c==0)<br>　　　　　 return;<br>　　　 dst.Write (buf, 0, c);<br>　 }<br>}<br>public Stream GetFileStream(string filename)<br>{<br>　 try<br>　 {<br>　　　 DateTime dt = File.GetLastWriteTime (filename);<br>　　　 TimeSpan ts=dt - DateTime.Now;<br>　　　 if(ts.TotalHours&gt;1)<br>　　　　　 return null;　　　 //1小时后过期<br>　　　 return new FileStream (filename, FileMode.Open, FileAccess.Read, FileShare.Read);<br>　 }<br>　 catch<br>　 {<br>　　　 return null;<br>　 }<br>}<br>&lt;/script&gt;</p>
<p><br>&lt;!--Main_Execute.aspx--&gt;<br>&lt;%@ page language="C#" %&gt;<br>&lt;html&gt;<br>&lt;head runat="server"&gt;<br>　 &lt;title&gt;Untitled Page&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;</p>
<p>ID:<br>&lt;%=Request.QueryString["id"]%&gt;</p>
<p>&lt;/body&gt;<br>&lt;/html&gt;</p>
<p>&nbsp;</p>
<p><br>其中原理是这样的.<br>Main_Execute.aspx是生成HTML的页面.</p>
<p>现在用Main.aspx来对它进行缓存.<br>过程如下:</p>
<p>首先根据页面参数算出文件名.(这个例子只根据Request.QueryString["id"]来算)<br>尝试读取缓存的文件.如果成功,那么Response.End();<br>如果不成功:<br>使用Server.Execute来调用Main_Execute.aspx,并且获取它的结果内容.<br>得到内容后,立刻输出到客户端.<br>最后把内容写进文件里,提供给下一次做为缓存度取.&nbsp;</p><img src ="http://www.blogjava.net/yeiwei/aggbug/109964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-04-11 17:50 <a href="http://www.blogjava.net/yeiwei/archive/2007/04/11/109964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Orcas中C#语言的新特性：自动属性，对象初始化器，和集合初始化器 </title><link>http://www.blogjava.net/yeiwei/archive/2007/04/11/109963.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 11 Apr 2007 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/04/11/109963.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/109963.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/04/11/109963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/109963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/109963.html</trackback:ping><description><![CDATA[<p>上个星期，我们发布了我们的Visual Studio和.NET框架Orcas版<a href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx" target=_blank><u><font color=#6fbc4c>三月份的CTP</font></u></a>，这是个谁都可以下的免费下载，同时提供VPC镜像(允许你在一个虚拟机里运行它)以及单独的安装文件(注：如果你在运行Vista的话，你要确认你只使用VPC版本)。你可以在<a href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx" target=_blank><u><font color=#6fbc4c>这里</font></u></a>下载。 </p>
<p>几个星期前，我曾在博客上讨论过Orcas中针对ASP.NET开发人员的<a href="http://blog.joycode.com/scottgu/archive/2007/02/10/93432.aspx" target=_blank><u><font color=#6fbc4c>一些重大的改进</font></u></a>。如果你还没有读过这个贴子的话，我强烈建议你<a href="http://blog.joycode.com/scottgu/archive/2007/02/10/93432.aspx" target=_blank><u><font color=#6fbc4c>在这里读一下</font></u></a>。我认为你会非常喜欢该帖子讨论的新特性的。 </p>
<p>除了那些框架和工具类的精彩新特性外，我认为开发人员(包括所有的.NET应用类型的开发人员)会非常喜爱Orcas的一件事情是，VB和C#将包含一些新语言特性和改进。这些语言改动将以既微妙又深刻的方式改进我们的开发体验，势将改进效率，减小我们需要键入的代码量。 </p>
<p>在下几个星期里，我将试着在博客里讨论几个这些语言的改进之处，示范如何把它们使用在一起，来产生一些非常强有力的结果。</p>
<p><strong>新的C#语言特性：自动属性(Automatic Properties)</strong></p>
<p>如果你现在是C#开发人员的话，你大概非常习惯编写象下面这个代码片段一样带有基本属性的类型：</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: white 2px ridge; PADDING-RIGHT: 10px; BORDER-TOP: white 2px ridge; PADDING-LEFT: 10px; FONT-SIZE: 10pt; PADDING-BOTTOM: 10px; MARGIN: 10px; BORDER-LEFT: white 2px ridge; PADDING-TOP: 10px; BORDER-BOTTOM: white 2px ridge; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee; WORD-WRAP: break-word">&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff>public&nbsp;class&nbsp;</font><font color=#000000>Person&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>private&nbsp;string&nbsp;</font><font color=#000000>_firstName</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;</font><font color=#000000>_lastName</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;</font><font color=#000000>_age</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;</font><font color=#000000>FirstName&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>get&nbsp;</font><font color=#000000>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>return&nbsp;</font><font color=#000000>_firstName</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>set&nbsp;</font><font color=#000000>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_firstName&nbsp;</font><font color=#0000ff>=&nbsp;value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>public&nbsp;string&nbsp;</font><font color=#000000>LastName&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>get&nbsp;</font><font color=#000000>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>return&nbsp;</font><font color=#000000>_lastName</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>set&nbsp;</font><font color=#000000>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_lastName&nbsp;</font><font color=#0000ff>=&nbsp;value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>public&nbsp;int&nbsp;</font><font color=#000000>Age&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>get&nbsp;</font><font color=#000000>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>return&nbsp;</font><font color=#000000>_age</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>set&nbsp;</font><font color=#000000>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_age&nbsp;</font><font color=#0000ff>=&nbsp;value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</font> </div>
<p>&nbsp;</p>
<p>注意，我们在属性的geter/setter中实际上并没有添加什么逻辑，我们只是将get/set实施到了一个成员变量。我们不禁要问这样一个问题：为什么不直接使用成员变量而使用属性呢？这是因为，向外面呈现公开的成员变量有很多不好的地方。二个最大的问题是：1) 你无法轻易地对成员变量做数据绑定，2) 如果你从类中向外呈现成员变量的话，之后，你不重新编译那些引用老的类的任何程序集，就无法将它们改成属性(譬如，要添加验证逻辑到setter里)。 </p>
<p>Orcas中发布的新C#编译器通过一个叫&#8220;自动属性(automatic properties)&#8221;的语言特性提供了一个优雅的方式来使得你的编码更加简洁，同时还保持属性的灵活性。自动属性允许你避免手工声明一个私有成员变量以及编写get/set逻辑，取而代之的是，编译器会自动为你生成一个私有变量和默认的get/set 操作。</p>
<p>譬如，使用自动属性，我现在可以将上面的代码改写成：</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: white 2px ridge; PADDING-RIGHT: 10px; BORDER-TOP: white 2px ridge; PADDING-LEFT: 10px; FONT-SIZE: 10pt; PADDING-BOTTOM: 10px; MARGIN: 10px; BORDER-LEFT: white 2px ridge; PADDING-TOP: 10px; BORDER-BOTTOM: white 2px ridge; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee; WORD-WRAP: break-word">&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff>public&nbsp;class&nbsp;</font><font color=#000000>Person&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>public&nbsp;string&nbsp;</font><font color=#000000>FirstName&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>get;&nbsp;set;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>public&nbsp;string&nbsp;</font><font color=#000000>LastName&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>get;&nbsp;set;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>public&nbsp;int&nbsp;</font><font color=#000000>Age&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>get;&nbsp;set;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</font> </div>
<p>&nbsp;</p>
<p>或者，我想更简明的话，我可以将空白的地方做进一步压缩，象这样： </p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: white 2px ridge; PADDING-RIGHT: 10px; BORDER-TOP: white 2px ridge; PADDING-LEFT: 10px; FONT-SIZE: 10pt; PADDING-BOTTOM: 10px; MARGIN: 10px; BORDER-LEFT: white 2px ridge; PADDING-TOP: 10px; BORDER-BOTTOM: white 2px ridge; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee; WORD-WRAP: break-word">&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff>public&nbsp;class&nbsp;</font><font color=#000000>Person&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>public&nbsp;string&nbsp;</font><font color=#000000>FirstName&nbsp;{&nbsp;</font><font color=#0000ff>get;&nbsp;set;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>public&nbsp;string&nbsp;</font><font color=#000000>LastName&nbsp; {&nbsp;</font><font color=#0000ff>get;&nbsp;set;&nbsp;</font><font color=#000000>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>public&nbsp;int&nbsp;&nbsp;&nbsp; </font><font color=#000000>Age&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;</font><font color=#0000ff>get;&nbsp;set;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</font> </div>
<p>&nbsp;</p>
<p>当Orcas版中的C#编译器遇上象上面这样的空的get/set属性的话，它会自动为你在类中生成一个私有成员变量，对这个变量实现一个公开的getter 和setter。这么做的好处是，从类-合同(type-contract)的角度来看，这个类跟我们上面第一个有点冗长的实现看上去完全一样，这意味着，不象公开的成员变量，在将来，我可以在我的属性setter实现中添加验证逻辑，而不用对引用我的类的任何外部组件做改动。</p>
<p><a href="http://community.bartdesmet.net/blogs/" target=_blank><u><font color=#6fbc4c>Bart De Smet</font></u></a>对使用Orcas三月份CTP版中的自动属性时内部发生的情形作了精彩的描述，你可以<a href="http://community.bartdesmet.net/blogs/bart/archive/2007/03/03/c-3-0-automatic-properties-explained.aspx" target=_blank><u><font color=#6fbc4c>在这里阅读他的精彩相关帖子</font></u></a>。 </p>
<p><strong>C#和VB语言的新特性：对象初始化器(Object Initializers)</strong></p>
<p>.NET框架中的类型非常依赖于属性的使用。当生成对象实例和使用新的类型时，写出象下面这样的编码是非常常见的情形：</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: white 2px ridge; PADDING-RIGHT: 10px; BORDER-TOP: white 2px ridge; PADDING-LEFT: 10px; FONT-SIZE: 10pt; PADDING-BOTTOM: 10px; MARGIN: 10px; BORDER-LEFT: white 2px ridge; PADDING-TOP: 10px; BORDER-BOTTOM: white 2px ridge; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee; WORD-WRAP: break-word">&nbsp;&nbsp;&nbsp;<font color=#000000>Person&nbsp;person&nbsp;</font><font color=#0000ff>=&nbsp;new&nbsp;</font><font color=#000000>Person()</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;</font><font color=#000000>person.FirstName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Scott"</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;</font><font color=#000000>person.LastName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Guthrie"</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;</font><font color=#000000>person.Age&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#800000>32</font><font color=#0000ff>;</font> </div>
<p>&nbsp;</p>
<p>你有没有想要把这样的编码简化过(也许将其安排在一行上)？使用Orcas中的C#和VB语言编译器的话，你现在可以利用一个称为&#8220;对象初始化器(object Initializers)&#8221;的&#8220;语法甜头(syntactic sugar)&#8221;语言特性来做些简化，将上述代码重写为：</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: white 2px ridge; PADDING-RIGHT: 10px; BORDER-TOP: white 2px ridge; PADDING-LEFT: 10px; FONT-SIZE: 10pt; PADDING-BOTTOM: 10px; MARGIN: 10px; BORDER-LEFT: white 2px ridge; PADDING-TOP: 10px; BORDER-BOTTOM: white 2px ridge; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee; WORD-WRAP: break-word">&nbsp;&nbsp;<font color=#000000>Person&nbsp;person&nbsp;</font><font color=#0000ff>=&nbsp;new&nbsp;</font><font color=#000000>Person&nbsp;{&nbsp;FirstName</font><font color=#0000ff>=</font><font color=#808080>"Scott"</font><font color=#000000>,&nbsp;LastName</font><font color=#0000ff>=</font><font color=#808080>"Guthrie"</font><font color=#000000>,&nbsp;Age</font><font color=#0000ff>=</font><font color=#800000>32&nbsp;</font><font color=#000000>}</font><font color=#0000ff>;</font> </div>
<p>&nbsp;</p>
<p>然后，编译器就会自动地生成合适的属性setter代码，保持跟前面较冗长的代码例子同样的语意。</p>
<p>除了在初始化类时设置简单的属性值外，对象初始化器特性也允许我们设置更复杂的嵌套(nested)属性类型。譬如，假如我们在上面定义的每个Person类型也拥有一个属于Address类型的叫&#8220;Address&#8221;的属性。我们可以编写下面这样的代码来生成一个新的Person对象，同时设置它的属性，象这样： </p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: white 2px ridge; PADDING-RIGHT: 10px; BORDER-TOP: white 2px ridge; PADDING-LEFT: 10px; FONT-SIZE: 10pt; PADDING-BOTTOM: 10px; MARGIN: 10px; BORDER-LEFT: white 2px ridge; PADDING-TOP: 10px; BORDER-BOTTOM: white 2px ridge; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee; WORD-WRAP: break-word">&nbsp;&nbsp;&nbsp;<font color=#000000>Person&nbsp;person&nbsp;</font><font color=#0000ff>=&nbsp;new&nbsp;</font><font color=#000000>Person&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Scott"</font><font color=#000000>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Guthrie"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>Age&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#800000>32</font><font color=#000000>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address&nbsp;</font><font color=#0000ff>=&nbsp;new&nbsp;</font><font color=#000000>Address&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Street&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"One&nbsp;Microsoft&nbsp;Way"</font><font color=#000000>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;City&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Redmond"</font><font color=#000000>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;State&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"WA"</font><font color=#000000>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Zip&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#800000>98052<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;}</font><font color=#0000ff>;</font> </div>
<p>&nbsp;</p>
<p><a href="http://community.bartdesmet.net/blogs/" target=_blank><u><font color=#6fbc4c>Bart De Smet</font></u></a>对使用Orcas三月份CTP版中的对象初始化器时内部发生的情形也作了精彩的描述，你可以<a href="http://community.bartdesmet.net/blogs/bart/archive/2006/12/04/C_2300_-3.0-Feature-Focus-_2D00_-Part-2-_2D00_-Object-Initializers.aspx" target=_blank><u><font color=#6fbc4c>在这里阅读他的精彩相关帖子</font></u></a>。 </p>
<p><strong>C#和VB语言的新特性：集合初始化器(Collection Initializers)</strong></p>
<p>对象初始化器很棒，它极大地简化了把对象添加到集合的做法。譬如，假如我要把三个人加到一个基于泛型的类型为Person的List集合中去的话，我可以写下面这样的编码：</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: white 2px ridge; PADDING-RIGHT: 10px; BORDER-TOP: white 2px ridge; PADDING-LEFT: 10px; FONT-SIZE: 10pt; PADDING-BOTTOM: 10px; MARGIN: 10px; BORDER-LEFT: white 2px ridge; PADDING-TOP: 10px; BORDER-BOTTOM: white 2px ridge; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee; WORD-WRAP: break-word">&nbsp;&nbsp;<font color=#000000>List&lt;Person&gt;&nbsp;people&nbsp;</font><font color=#0000ff>=&nbsp;new&nbsp;</font><font color=#000000>List&lt;Person&gt;()</font><font color=#0000ff>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;</font><font color=#000000>people.Add(&nbsp;</font><font color=#0000ff>new&nbsp;</font><font color=#000000>Person&nbsp;{&nbsp;FirstName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Scott"</font><font color=#000000>,&nbsp;LastName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Guthrie"</font><font color=#000000>,&nbsp;Age&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#800000>32&nbsp;</font><font color=#000000>}&nbsp;)</font><font color=#0000ff>;<br>&nbsp;&nbsp;</font><font color=#000000>people.Add(&nbsp;</font><font color=#0000ff>new&nbsp;</font><font color=#000000>Person&nbsp;{&nbsp;FirstName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Bill"</font><font color=#000000>,&nbsp;LastName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Gates"</font><font color=#000000>,&nbsp;Age&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#800000>50&nbsp;</font><font color=#000000>}&nbsp;)</font><font color=#0000ff>;<br>&nbsp;&nbsp;</font><font color=#000000>people.Add(&nbsp;</font><font color=#0000ff>new&nbsp;</font><font color=#000000>Person&nbsp;{&nbsp;FirstName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Susanne"</font><font color=#000000>,&nbsp;LastName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Guthrie"</font><font color=#000000>,&nbsp;Age&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#800000>32&nbsp;</font><font color=#000000>}&nbsp;)</font><font color=#0000ff>;<br>&nbsp;</font> </div>
<p>&nbsp;</p>
<p>对这个例子，跟我使用C# 2.0编译器要输入的代码相比，单独使用新的对象初始化器特性就能省去12行额外的代码。</p>
<p>但Orcas版中的C#和VB编译器允许我们更进一步，现在同时支持&#8220;集合初始化器(collection initializers)&#8221;，这允许我们避免要写多个Add语句，省下更多的键盘操作：</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: white 2px ridge; PADDING-RIGHT: 10px; BORDER-TOP: white 2px ridge; PADDING-LEFT: 10px; FONT-SIZE: 10pt; PADDING-BOTTOM: 10px; MARGIN: 10px; BORDER-LEFT: white 2px ridge; PADDING-TOP: 10px; BORDER-BOTTOM: white 2px ridge; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee; WORD-WRAP: break-word">&nbsp;&nbsp;&nbsp;<font color=#000000>List&lt;Person&gt;&nbsp;people&nbsp;</font><font color=#0000ff>=&nbsp;new&nbsp;</font><font color=#000000>List&lt;Person&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>new&nbsp;</font><font color=#000000>Person&nbsp;{&nbsp;FirstName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Scott"</font><font color=#000000>,&nbsp;LastName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Guthrie"</font><font color=#000000>,&nbsp;Age&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#800000>32&nbsp;</font><font color=#000000>},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>new&nbsp;</font><font color=#000000>Person&nbsp;{&nbsp;FirstName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Bill"</font><font color=#000000>,&nbsp;LastName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Gates"</font><font color=#000000>,&nbsp;Age&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#800000>50&nbsp;</font><font color=#000000>},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color=#0000ff>new&nbsp;</font><font color=#000000>Person&nbsp;{&nbsp;FirstName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Susanne"</font><font color=#000000>,&nbsp;LastName&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#808080>"Guthrie"</font><font color=#000000>,&nbsp;Age&nbsp;</font><font color=#0000ff>=&nbsp;</font><font color=#800000>32&nbsp;</font><font color=#000000>}<br>&nbsp;&nbsp;&nbsp;}</font><font color=#0000ff>;</font> </div>
<p>&nbsp;</p>
<p>当编译器遇上上面这样的句法时，它会自动为我们生成象前面的例子一样的集合插入编码。</p>
<p><strong>结语</strong> </p>
<p>作为开发人员，我们现在拥有了简明得多的方式来定义对象，对它们初始化，将它们加入集合内。在运行时，其语意，跟今天的较长的版本的语意，是完全一样的（所以你不必担心行为会改变）。但现在你不需输入那么多字符了，你的代码将既干净又简明。 </p>
<p>在不远的将来，我将发表更多的博客贴子来讨论Orcas版中更多的语言上的改进，包括扩展方法（Extension Methods），Lambdas和匿名类。然后，我将对LINQ做深入讨论，示范它是如何利用所有这些特性来提供一个非常优雅的方式来查询和与数据交互的。</p><img src ="http://www.blogjava.net/yeiwei/aggbug/109963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-04-11 17:47 <a href="http://www.blogjava.net/yeiwei/archive/2007/04/11/109963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.Net 3.0的介绍与部署 </title><link>http://www.blogjava.net/yeiwei/archive/2007/04/11/109961.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 11 Apr 2007 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/04/11/109961.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/109961.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/04/11/109961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/109961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/109961.html</trackback:ping><description><![CDATA[&nbsp;沸沸扬扬的.net 3.0正式版终于发布，再一次感受到微软的霸气与智慧。从.net 1.0到.net 3.0微软的战略框架<br>越来越清晰，就是更好的用户体验，更好的开发环境。借助于vista ，office 2007的发布，.net 编程已经不可阻挡，Borland公司的没落是最好的诠释.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相对于从1.1升级到2.0的换代性升级，从2.0到3.0的升级微软称为"扩展性"升级，是在原来2.0基础上增加了新的技术，原来2.0库称为3.0的一个子集。<img height=311 alt="" src="http://www.cnblogs.com/images/cnblogs_com/luca/netfx30.gif" width=615 border=0><br>关键技术：1。WPF&nbsp; 提供了用于构建下一代smart-client程序的类库，集成了UI设计，文档，多媒体等。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2。WCF&nbsp; 提供了统一的面向服务编程模型。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3。WWF 集成了开放基于工作流的逻辑处理程序的工具，引擎，模型。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4。简化并提高了在线用户的安全识别能力。<br><br>安装：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1。卸载所有3.0的beta版本。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2。如果已经安装了.net 2.0可以直接安装3.0四个扩展组件<a href="http://www.netfx3.com/blogs/news_and_announcements/archive/2006/11/06/.NET-Framework-3.0-has-been-released_2100_.aspx"><font color=#000080><u>&nbsp; http://www.netfx3.com/blogs/news_and_announcements/archive/2006/11/06/.NET-Framework-3.0-has-been-released_2100_.aspx</u></font></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 没有安装2..0的可以去下载完整的安装包<a href="http://download.microsoft.com/download/3/F/0/3F0A922C-F239-4B9B-9CB0-DF53621C57D9/dotnetfx3.exe"><font color=#000080><u>http://download.microsoft.com/download/3/F/0/3F0A922C-F239-4B9B-9CB0-DF53621C57D9/dotnetfx3.exe</u></font></a><br><br><br>查看安装成功：<br>&nbsp;&nbsp;&nbsp; 打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup<br>查看InstallSuccess 是否为1<br><img src ="http://www.blogjava.net/yeiwei/aggbug/109961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-04-11 17:46 <a href="http://www.blogjava.net/yeiwei/archive/2007/04/11/109961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> .NET 3.0 资源列表 </title><link>http://www.blogjava.net/yeiwei/archive/2007/04/11/109962.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 11 Apr 2007 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/04/11/109962.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/109962.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/04/11/109962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/109962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/109962.html</trackback:ping><description><![CDATA[<p><span style="COLOR: blue"><strong>.NET 3.0 - Full</strong></span><br><br><strong>Videos</strong><br><a title=http://www.microsoft.com/emea/msdnshowtime/sessionh.aspx?videoid=258 href="http://www.microsoft.com/emea/msdnshowtime/sessionh.aspx?videoid=258" target=_blank><u><font color=#6fbc4c>WinFX (.NET 3.0) - Windows Presentation Foundation (WPF), InfoCard (Windows CardSpace) &amp; Windows Communication Foundation (WCF)</font></u></a><br><br><strong>Training</strong> </p>
<ul class=ubb-list>
    <li><a title=http://www.netfxguide.com/default.aspx?Node=1%2f6&amp;TopicID=6&amp;Topic=WCF href="http://www.netfxguide.com/default.aspx?Node=1%2f6&amp;TopicID=6&amp;Topic=WCF" target=_blank><u><font color=#6fbc4c>NETFXGuide</font></u></a>
    <li><strong>Free Vista / .NET 3.0 E-Learning: </strong>All courses listed <a title=http://www.microsoft.com/learning/windowsvista/dev/default.mspx href="http://www.microsoft.com/learning/windowsvista/dev/default.mspx" target=_blank><u><font color=#6fbc4c>here</font></u></a>
    <li><strong>See the New Capabilities: Microsoft .NET Framework 3.0 and Visual Studio 2005: </strong>Learn about Windows Presentation Foundation and more new capabilities provided by the .NET Framework 3.0. Free collection from Microsoft Learning. Click <a title=https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7b54B8ECBE-B85C-402F-B1E2-A1E0217310C1%7d&amp;locale=en-US href="https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7b54B8ECBE-B85C-402F-B1E2-A1E0217310C1%7d&amp;locale=en-US" target=_blank><u><font color=#6fbc4c>here</font></u></a> or <a title=http://go.microsoft.com/?linkid=5577967 href="http://go.microsoft.com/?linkid=5577967" target=_blank><u><font color=#6fbc4c>here</font></u></a>.<br>
    <li><strong>Get Started With Windows Workflow Foundation: </strong>Free clinic from Microsoft Learning: See the functionality and architecture of Windows Workflow Foundation, and learn how to use it with Visual Studio 2005 to build workflow-enabled applications. Click <a title=https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7bC669EE14-A3D5-4F6F-8843-2797C82D7909%7d&amp;locale=en-US href="https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7bC669EE14-A3D5-4F6F-8843-2797C82D7909%7d&amp;locale=en-US" target=_blank><u><font color=#6fbc4c>here</font></u></a>.
    <li><strong>Introduction to Developing with Windows Communication Foundation and Visual Studio 2005: </strong>Free clinic from Microsoft Learning: Learn how to create Windows Communication Foundation (WCF) services and clients, and enhance WCF services. Click <a title=https:/www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7b94D1CAA8-F853-4570-A744-4DD421603C98%7d&amp;locale=en-US href="https:/www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7b94D1CAA8-F853-4570-A744-4DD421603C98%7d&amp;locale=en-US" target=_blank><u><font color=#6fbc4c>here</font></u></a>.
    <li>.NET University <a title=http://www.dotnet-u.com/courseware/NetULabs.zip href="http://www.dotnet-u.com/courseware/NetULabs.zip" target=_blank><u><font color=#6fbc4c>Hands on Labs</font></u></a>
    <li><a title=http://www.dotnet-u.com/schedule.aspx href="http://www.dotnet-u.com/schedule.aspx" target=_blank><u><font color=#6fbc4c>.NET University schedule</font></u></a> </li>
</ul>
<p><br><br><span style="COLOR: blue"><strong>WPF</strong></span><br><br><strong>WPF Blogs</strong> </p>
<ul class=ubb-list>
    <li><a title=http://www.thewpfblog.com/ href="http://www.thewpfblog.com/" target=_blank><u><font color=#6fbc4c>The WPF Blog</font></u></a>
    <li><a title=http://wpf.netfx3.com/blogs/wpf_community_bloggers/archive/tags/Video/default.aspx href="http://wpf.netfx3.com/blogs/wpf_community_bloggers/archive/tags/Video/default.aspx" target=_blank><u><font color=#6fbc4c>WPF Community Blog</font></u></a>
    <li><a title=http://blogs.msdn.com/expression/articles/543834.aspx href="http://blogs.msdn.com/expression/articles/543834.aspx" target=_blank><u><font color=#6fbc4c>Expression Team Blog</font></u></a>
    <li><a title=http://blogs.msdn.com/richard_bailey/ href="http://blogs.msdn.com/richard_bailey/" target=_blank><u><font color=#6fbc4c>WPF Visual Designer</font></u></a>
    <li><a title=http://blogs.msdn.com/nikola/ href="http://blogs.msdn.com/nikola/" target=_blank><u><font color=#6fbc4c>XAML Only</font></u></a>
    <li><a title=http://blogs.msdn.com/karstenj/archive/2006/06/15/632639.aspx href="http://blogs.msdn.com/karstenj/archive/2006/06/15/632639.aspx" target=_blank><u><font color=#6fbc4c>Karsten Januszewski</font></u></a> </li>
</ul>
<p><strong>WPF Whitepapers</strong> </p>
<ul class=ubb-list>
    <li><a title=http://blogs.msdn.com/jfoscoding/articles/765135.aspx href="http://blogs.msdn.com/jfoscoding/articles/765135.aspx" target=_blank><u><font color=#6fbc4c>WPF for Windows Developers</font></u></a>
    <li><a title=http://windowssdk.msdn.microsoft.com/en-us/ms746927(VS.80).aspx href="http://windowssdk.msdn.microsoft.com/en-us/ms746927(VS.80).aspx" target=_blank><u><font color=#6fbc4c>Fundamentals</font></u></a>, <a title=http://windowssdk.msdn.microsoft.com/en-us/ms753313(VS.80).aspx href="http://windowssdk.msdn.microsoft.com/en-us/ms753313(VS.80).aspx" target=_blank><u><font color=#6fbc4c>Data</font></u></a>
    <li><a title=http://windowssdk.msdn.microsoft.com/en-us/ms752061(VS.80).aspx href="http://windowssdk.msdn.microsoft.com/en-us/ms752061(VS.80).aspx" target=_blank><u><font color=#6fbc4c>Graphics and Media</font></u></a> </li>
</ul>
<p><strong>WPF Videos</strong> </p>
<ul class=ubb-list>
    <li><a title=http://on10.net/Blogs/tina/3392/ href="http://on10.net/Blogs/tina/3392/" target=_blank><u><font color=#6fbc4c>NY Times Reader demo</font></u></a> Karsten <a title=http://channel9.msdn.com/Showpost.aspx?postid=170670 href="http://channel9.msdn.com/Showpost.aspx?postid=170670" target=_blank><u><font color=#6fbc4c>Januszewski, a technical evangelist focusing on WPF</font></u></a><br>
    <li><a title=http://www.microsoft.com/products/expression/en/interactive_designer/demos.mspx href="http://www.microsoft.com/products/expression/en/interactive_designer/demos.mspx" target=_blank><u><font color=#6fbc4c>Designer Demos</font></u></a>
    <li><a title=http://channel9.msdn.com/Showpost.aspx?postid=202329 href="http://channel9.msdn.com/Showpost.aspx?postid=202329" target=_blank><u><font color=#6fbc4c>Developer/Designer Workflow in WPF</font></u></a> </li>
</ul>
<p><strong>WPF Presentations</strong><br>.NET University <a title=http://www.dotnet-u.com/courseware/WPFIntro.zip href="http://www.dotnet-u.com/courseware/WPFIntro.zip" target=_blank><u><font color=#6fbc4c>Windows Presentation Foundation PPTs</font></u></a><br><br><strong>WPF Training</strong> </p>
<ul class=ubb-list>
    <li><a title=https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7bB4F24065-32BD-4D86-A3B7-0BE2DFB74C35%7d&amp;locale=en-US href="https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7bB4F24065-32BD-4D86-A3B7-0BE2DFB74C35%7d&amp;locale=en-US" target=_blank><strong><u><font color=#6fbc4c>Clinic 5135 AE: Introduction to Developing with Windows Presentation Foundation and Visual Studio 2005</font></u></strong></a>
    <li>Excerpted Invaluable 5 day course from <a title=http://blogs.msdn.com/karstenj/archive/2006/06/15/632639.aspx href="http://blogs.msdn.com/karstenj/archive/2006/06/15/632639.aspx" target=_blank><u><font color=#6fbc4c>Karsten Januszewski blog</font></u></a><span style="COLOR: #0000ff"> post:</span>
    <li>1.<a title=http://sessions.mix06.com/display_detail.asp?sessionChoice=2001&amp;disc=&amp;pid=NGW030&amp;year=2005 href="http://sessions.mix06.com/display_detail.asp?sessionChoice=2001&amp;disc=&amp;pid=NGW030&amp;year=2005" target=_blank><u><font color=#6fbc4c>Watch Developing a WPF Application</font></u></a>
    <li>2.<a title=http://sessions.mix06.com/view.asp?sessionChoice=2001&amp;disc=&amp;pid=NGW008&amp;yearChoice=2005 href="http://sessions.mix06.com/view.asp?sessionChoice=2001&amp;disc=&amp;pid=NGW008&amp;yearChoice=2005" target=_blank><u><font color=#6fbc4c>Michael Wallent's presentation from MIX</font></u></a>.
    <li>3.<a title=http://sessions.mix06.com/display_detail.asp?sessionChoice=2001&amp;disc=&amp;pid=NGW040&amp;year=2005 href="http://sessions.mix06.com/display_detail.asp?sessionChoice=2001&amp;disc=&amp;pid=NGW040&amp;year=2005" target=_blank><u><font color=#6fbc4c>Watch A Designer's Overview of WPF</font></u></a>
    <li>4.<a title=http://sessions.mix06.com/display_detail.asp?sessionChoice=2001&amp;disc=&amp;pid=NGW032&amp;year=2005 href="http://sessions.mix06.com/display_detail.asp?sessionChoice=2001&amp;disc=&amp;pid=NGW032&amp;year=2005" target=_blank><u><font color=#6fbc4c>Introducing Microsoft Tools for Professional Designers</font></u></a> </li>
</ul>
<p><strong>WPF Sample Applications</strong> </p>
<ul class=ubb-list><br>
    <li><a title=http://www.thirteen23.com/ href="http://www.thirteen23.com/" target=_blank><u><font color=#6fbc4c>Cine.View</font></u></a>: A WPF viewing application that exposes the NetFlix catalog and ordering capabilities created by the thirteen23 company. They also have a great viewer for Flickr.
    <li><a title=http://firstlook.nytimes.com/ href="http://firstlook.nytimes.com/" target=_blank><u><font color=#6fbc4c>New York Times Reader</font></u></a>: A WPF content application that provides a rich browsing and reading experience for the paper's news content online in a Windows application
    <li><a title=http://scorbs.com/ href="http://scorbs.com/" target=_blank><u><font color=#6fbc4c>Karen Corby's Woodgrove Finance application</font></u></a>: This is a WPF XAML Browser application that provides rich visualization of stock market data in a multi-paned WPF app that runs in the browser.
    <li><a title=http://wpf.netfx3.com/ href="http://wpf.netfx3.com/" target=_blank><u><font color=#6fbc4c>More samples</font></u></a> </li>
</ul>
<p><span style="COLOR: blue"><strong>WCF</strong></span><br><br><strong>WCF Blogs</strong> </p>
<ul class=ubb-list>
    <li><a title=http://blogs.msdn.com/drnick/ href="http://blogs.msdn.com/drnick/" target=_blank><u><font color=#6fbc4c>Nicholas Allen&#8217;s Blogs</font></u></a>, Program Manager - WCF.
    <li><a title=http://www.netfxguide.com/resources/_17_mattavis_s_weblog_migrating_net_remoting_to_wcf.aspx href="http://www.netfxguide.com/resources/_17_mattavis_s_weblog_migrating_net_remoting_to_wcf.aspx" target=_blank><u><font color=#6fbc4c>Mattavis's WebLog: Migrating .NET Remoting to WCF</font></u></a> </li>
</ul>
<p><strong>WCF Training</strong><br><a title=https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7b94D1CAA8-F853-4570-A744-4DD421603C98%7d&amp;locale=en-US href="https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7b94D1CAA8-F853-4570-A744-4DD421603C98%7d&amp;locale=en-US" target=_blank><strong><u><font color=#6fbc4c>Clinic 5137 AE: Introduction to Developing with Windows Communication Foundation and Visual Studio 2005</font></u></strong></a><br><br><strong>WCF Whitepapers</strong><br><a title=http://www.netfxguide.com/resources/_211_msdn_from_net_remoting_to_the_windows_communication_foundation_wcf_.aspx href="http://www.netfxguide.com/resources/_211_msdn_from_net_remoting_to_the_windows_communication_foundation_wcf_.aspx" target=_blank><u><font color=#6fbc4c>MSDN: From .NET Remoting to the Windows Communication Foundation (WCF)</font></u></a><br><br><strong>WCF Presentations</strong><br>.NET University <a title=http://www.dotnet-u.com/courseware/WCFIntro.zip href="http://www.dotnet-u.com/courseware/WCFIntro.zip" target=_blank><u><font color=#6fbc4c>Windows Communication Foundation PPTs</font></u></a><br><br><strong>WCF Webcasts</strong> </p>
<ul class=ubb-list>
    <li><a title=http://www.netfxguide.com/resources/_643_msdn_architecture_webcast_using_windows_communication_foundation_with_biztalk_server_2006_level_200_.aspx href="http://www.netfxguide.com/resources/_643_msdn_architecture_webcast_using_windows_communication_foundation_with_biztalk_server_2006_level_200_.aspx" target=_blank><u><font color=#6fbc4c>MSDN Architecture Webcast: Using Windows Communication Foundation with BizTalk Server 2006 (Level 200)</font></u></a>
    <li><a title=http://www.netfxguide.com/resources/_338_msdn_architecture_webcast_building_powerful_ajax_style_solutions_with_asp_net_atlas_and_windows_communication_foundation_level_200_.aspx href="http://www.netfxguide.com/resources/_338_msdn_architecture_webcast_building_powerful_ajax_style_solutions_with_asp_net_atlas_and_windows_communication_foundation_level_200_.aspx" target=_blank><u><font color=#6fbc4c>MSDN Architecture Webcast: Building Powerful AJAX-Style Solutions with ASP.NET "Atlas" and Windows Communication Foundation (Level 200)</font></u></a>
    <li><a title=http://www.netfxguide.com/resources/_596_msdn_webcast_working_with_operations_and_calls_in_windows_communication_foundation_level_200_.aspx href="http://www.netfxguide.com/resources/_596_msdn_webcast_working_with_operations_and_calls_in_windows_communication_foundation_level_200_.aspx" target=_blank><u><font color=#6fbc4c>MSDN Webcast: Working with Operations and Calls in Windows Communication Foundation (Level 200)</font></u></a> </li>
</ul>
<p><strong>WCF Videos</strong> </p>
<ul class=ubb-list>
    <li><a title=http://www.netfxguide.com/resources/_87_msdn_tv_biztalk_server_and_indigo.aspx href="http://www.netfxguide.com/resources/_87_msdn_tv_biztalk_server_and_indigo.aspx" target=_blank><u><font color=#6fbc4c>MSDN TV: BizTalk Server and Indigo</font></u></a>
    <li><a title=http://channel9.msdn.com/ShowPost.aspx?PostID=236291 href="http://channel9.msdn.com/ShowPost.aspx?PostID=236291" target=_blank><u><font color=#6fbc4c>Laurence Melloul and Craig McMurty: WCF Tracing</font></u></a> </li>
</ul>
<p><strong>WCF Sample Applications </strong><br><a title=http://www.netfxguide.com/resources/_11_atlas_asp_net_using_windows_communication_foundation_with_atlas_.aspx href="http://www.netfxguide.com/resources/_11_atlas_asp_net_using_windows_communication_foundation_with_atlas_.aspx" target=_blank><u><font color=#6fbc4c>ATLAS.ASP.NET: Using Windows Communication Foundation with "Atlas"</font></u></a><br><br><span style="COLOR: blue"><strong>WF</strong></span><br><br><strong>WF Blogs</strong><br><a title=http://www.netfxguide.com/resources/_76_masteringbiztalk_com_using_wf_to_run_a_page_flow.aspx href="http://www.netfxguide.com/resources/_76_masteringbiztalk_com_using_wf_to_run_a_page_flow.aspx" target=_blank><u><font color=#6fbc4c>MasteringBizTalk.com: Using WF to run a page-flow</font></u></a><br><a title=http://www.netfxguide.com/resources/_129_msdn_blogs_windows_workflow_foundation_vs_biztalk_server.aspx href="http://www.netfxguide.com/resources/_129_msdn_blogs_windows_workflow_foundation_vs_biztalk_server.aspx" target=_blank><u><font color=#6fbc4c>MSDN Blogs: Windows Workflow Foundation vs BizTalk Server</font></u></a><br><br><strong>WF Whitepapers</strong> </p>
<ul class=ubb-list>
    <li><a title=http://www.netfxguide.com/resources/_403_a_look_at_the_biztalk_roadmap.aspx href="http://www.netfxguide.com/resources/_403_a_look_at_the_biztalk_roadmap.aspx" target=_blank><u><font color=#6fbc4c>A look at the BizTalk roadmap</font></u></a>
    <li><a title=http://www.netfxguide.com/resources/_311_working_with_windows_workflow_foundation_in_asp_net_working_with_windows_workflow_foundation_in_asp_net.aspx href="http://www.netfxguide.com/resources/_311_working_with_windows_workflow_foundation_in_asp_net_working_with_windows_workflow_foundation_in_asp_net.aspx" target=_blank><u><font color=#6fbc4c>Working with Windows Workflow Foundation in ASP.NET Working with Windows Workflow Foundation in ASP.NET</font></u></a>
    <li><a title=http://www.netfxguide.com/resources/_424_windows_workflow_foundation_for_web_services.aspx href="http://www.netfxguide.com/resources/_424_windows_workflow_foundation_for_web_services.aspx" target=_blank><u><font color=#6fbc4c>Windows Workflow Foundation for Web services</font></u></a>
    <li><a title=http://www.netfxguide.com/resources/_522_deploy_distributed_business_processes_with_windows_workflow_and_web_services.aspx href="http://www.netfxguide.com/resources/_522_deploy_distributed_business_processes_with_windows_workflow_and_web_services.aspx" target=_blank><u><font color=#6fbc4c>Deploy Distributed Business Processes With Windows Workflow And Web Services</font></u></a> </li>
</ul>
<p><strong>WF Training</strong><br><a title=https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7bC669EE14-A3D5-4F6F-8843-2797C82D7909%7d&amp;locale=en-US href="https://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceid=%7bC669EE14-A3D5-4F6F-8843-2797C82D7909%7d&amp;locale=en-US" target=_blank><u><font color=#6fbc4c>Clinic 5136 AE: Introduction to Developing with Windows Workflow Foundation and Visual Studio 2005</font></u></a><br><br><strong>WF Presentations</strong><br>.NET University <a title=http://www.dotnet-u.com/courseware/WFIntro.zip href="http://www.dotnet-u.com/courseware/WFIntro.zip" target=_blank><u><font color=#6fbc4c>Windows Workflow Foundation PPTs</font></u></a><br><br><strong>WF Lab</strong><br><a title=http://www.netfxguide.com/resources/_565_ajax_based_windows_workflow_designer.aspx href="http://www.netfxguide.com/resources/_565_ajax_based_windows_workflow_designer.aspx" target=_blank><u><font color=#6fbc4c>Ajax based Windows Workflow Designer</font></u></a><br><br><strong>WF Videos</strong> </p>
<ul class=ubb-list>
    <li><a title=http://www.microsoft.com/emea/msdnshowtime/sessionh.aspx?videoid=259 href="http://www.microsoft.com/emea/msdnshowtime/sessionh.aspx?videoid=259" target=_blank><u><font color=#6fbc4c>WinFX (.NET 3.0) - Workflow Foundation (WF)</font></u></a>
    <li><a title=http://www.netfxguide.com/resources/_426_msdn_webcast_live_from_redmond_asp_net_an_overview_of_asp_net_and_windows_workflow_foundation_integration.aspx href="http://www.netfxguide.com/resources/_426_msdn_webcast_live_from_redmond_asp_net_an_overview_of_asp_net_and_windows_workflow_foundation_integration.aspx" target=_blank><u><font color=#6fbc4c>MSDN Webcast: Live From Redmond: ASP.NET: An Overview of ASP.NET and Windows Workflow Foundation Integration</font></u></a> </li>
</ul>
<p><span style="COLOR: blue"><strong>CardSpace</strong></span><br><br><strong>CardSpace Whitepapers</strong><br><a title=http://www.netfxguide.com/resources/_110_windows_vista_developer_center_a_guide_to_supporting_infocard_now_cardspace_v1_0_within_web_applications_and_browsers_.aspx href="http://www.netfxguide.com/resources/_110_windows_vista_developer_center_a_guide_to_supporting_infocard_now_cardspace_v1_0_within_web_applications_and_browsers_.aspx" target=_blank><u><font color=#6fbc4c>Windows Vista Developer Center:A Guide to Supporting InfoCard (now CardSpace) v1.0 Within Web Applications and Browsers.</font></u></a><br><br><strong>CardSpace Presentations</strong><br>.NET University <a title=http://www.dotnet-u.com/courseware/CardSpaceIntro.zip href="http://www.dotnet-u.com/courseware/CardSpaceIntro.zip" target=_blank><u><font color=#6fbc4c>Windows CardSpace PPTs</font></u></a><br><br><strong>CardSpace Sample Applications</strong><br><a title=http://www.netfxguide.com/resources/_620_introduction_to_cardspace_with_internet_explorer_7_0.aspx href="http://www.netfxguide.com/resources/_620_introduction_to_cardspace_with_internet_explorer_7_0.aspx" target=_blank><u><font color=#6fbc4c>Introduction to CardSpace with Internet Explorer 7.0</font></u></a> </p><img src ="http://www.blogjava.net/yeiwei/aggbug/109962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-04-11 17:46 <a href="http://www.blogjava.net/yeiwei/archive/2007/04/11/109962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NET Framework 3.0　问答翻译 </title><link>http://www.blogjava.net/yeiwei/archive/2007/04/11/109958.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 11 Apr 2007 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/04/11/109958.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/109958.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/04/11/109958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/109958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/109958.html</trackback:ping><description><![CDATA[<p style="LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt"><font face=宋体>在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 2006 </span><span style="FONT-SIZE: 9pt"><font face=宋体>年</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 6 </span><span style="FONT-SIZE: 9pt"><font face=宋体>月，微软副总裁</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> S. Somasegar </span><span style="FONT-SIZE: 9pt"><font face=宋体>宣布</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WinFX </span><span style="FONT-SIZE: 9pt"><font face=宋体>将更名为</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0</span><span style="FONT-SIZE: 9pt"><font face=宋体>，请知道更多详细资料请看它的</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <span lang=EN-US><a href="http://blogs.msdn.com/somasegar/archive/2006/06/09/624300.aspx"><font color=#0261b9><u>Blog</u></font></a></span></span><font face=宋体><span style="FONT-SIZE: 9pt">。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt"><font face=宋体>这份文件包含了关于</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>更名常被问到的问题，对于部署额外的问题请参照</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> MSDN </span><span style="FONT-SIZE: 9pt"><font face=宋体>上的</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <span lang=EN-US><a href="http://msdn.microsoft.com/winfx/default.aspx?pull=/library/en-us/dnlong/html/netfx30.asp"><font color=#0261b9><u>.NET Framework 3.0 deployment</u></font></a> </span></span><font face=宋体><span style="FONT-SIZE: 9pt">文件。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 1</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：什么是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0</span><span style="FONT-SIZE: 9pt"><font face=宋体>（先前代号</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WinFX</span><span style="FONT-SIZE: 9pt"><font face=宋体>）？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framewrok 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>是微软受管理程式码编写模型，它是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>的超集，以新的应用程式建构技术结合</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 component</span><span style="FONT-SIZE: 9pt"><font face=宋体>，包括了视觉化令人震撼的用户体验（指</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WPF,Avalon</span><span style="FONT-SIZE: 9pt"><font face=宋体>）、无缝高度整合与安全的通讯（指</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WCF,Indigo</span><span style="FONT-SIZE: 9pt"><font face=宋体>）、塑造建构一个商业流程范围的能力（指</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WF</span><span style="FONT-SIZE: 9pt"><font face=宋体>，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">WorkFlow</span><span style="FONT-SIZE: 9pt"><font face=宋体>）及</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows CardSpace</span><font face=宋体><span style="FONT-SIZE: 9pt">。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 2</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">WinFX </span><span style="FONT-SIZE: 9pt"><font face=宋体>技术有些什么？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">WinFX </span><span style="FONT-SIZE: 9pt"><font face=宋体>技术现在将会包含在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之中释出，对于</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WinFX </span><font face=宋体><span style="FONT-SIZE: 9pt">技术本身或交货日期并没有任何改变，其实是同样的技术，只不过单单命名改变罢了。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 3</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之间的关连性为何？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>是在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之上附加一些技术，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>是在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之上附加了四大部分新技术：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Windows Presentation Foundation (WPF) </span><span style="FONT-SIZE: 9pt"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Windows Workflow Foundation (WF) </span><span style="FONT-SIZE: 9pt"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Windows Communication Foundation (WCF) </span><span style="FONT-SIZE: 9pt"><font face=宋体>和</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows CardSpace</span><span style="FONT-SIZE: 9pt"><font face=宋体>。在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>中所包含的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 component </span><span style="FONT-SIZE: 9pt"><font face=宋体>本身并没有任何的变动，这意谓着今天数以百万计的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET </span><span style="FONT-SIZE: 9pt"><font face=宋体>程式开发人员可使用既有的技术能力去建构</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>应用程式，同时也意谓着今天在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>执行的应用程式也可以继续在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>上执行。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><span style="FONT-SIZE: 9pt"><font face=宋体>以下为</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>的架构图： </font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></p>
<p><img alt="" src="http://msdn.microsoft.com/WinFX/images/netfx30.gif" border=0></p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 4</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：当我安装</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>时会发生什么事？如果我已安装了</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>要如何升级？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：当你安装</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>时，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">installer </span><span style="FONT-SIZE: 9pt"><font face=宋体>会检查你是否已经安装</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0</span><span style="FONT-SIZE: 9pt"><font face=宋体>，如果没有，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 installer </span><span style="FONT-SIZE: 9pt"><font face=宋体>会替您安装</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0</span><span style="FONT-SIZE: 9pt"><font face=宋体>，然后再安装</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 component</span><span style="FONT-SIZE: 9pt"><font face=宋体>；如果你已安装</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0</span><span style="FONT-SIZE: 9pt"><font face=宋体>，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 installer </span><span style="FONT-SIZE: 9pt"><font face=宋体>只会安装</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>新的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Component</span><font face=宋体><span style="FONT-SIZE: 9pt">。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 5</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：我的组织刚通过能够将产品应用在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>上的认证核准程序，我们需要在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之上重新全面进行相同的认证核准程序吗？我需要为</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>应用程式做任何的相容性测试吗（指在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>上执行）？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：因为</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>只有加入新的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> component </span><span style="FONT-SIZE: 9pt"><font face=宋体>在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之上，而没有变动任何的</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <span lang=EN-US>.NET Framework 2.0 </span></span><span style="FONT-SIZE: 9pt"><font face=宋体>的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> component</span><span style="FONT-SIZE: 9pt"><font face=宋体>，所以建构在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之上的应用程式将不会受到任何影响；故当您安装完</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之后，并不需要为您的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><font face=宋体><span style="FONT-SIZE: 9pt">应用程式做任何的测试。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 6</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：名称的改变是否会反映在任何</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>既存的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> APIs, assemblies </span><span style="FONT-SIZE: 9pt"><font face=宋体>与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> namespace</span><span style="FONT-SIZE: 9pt"><font face=宋体>？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：在</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>既存的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> APIs, assemblies </span><span style="FONT-SIZE: 9pt"><font face=宋体>与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> namespace </span><span style="FONT-SIZE: 9pt"><font face=宋体>不会有任何的改变，你建构在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之上的应用程式将会继续照旧在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><font face=宋体><span style="FONT-SIZE: 9pt">上执行。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 7</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>将会使用哪个版本的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Common Language Runtime (CLR)</span><span style="FONT-SIZE: 9pt"><font face=宋体>？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>将会使用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> CLR</span><span style="FONT-SIZE: 9pt"><font face=宋体>（</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">V2.0.50727</span><span style="FONT-SIZE: 9pt"><font face=宋体>），透过</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> CLR </span><span style="FONT-SIZE: 9pt"><font face=宋体>核心引擎的共用，将能够减少对整个开发平台的冲击，我们也期望较为底层的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework component</span><span style="FONT-SIZE: 9pt"><font face=宋体>（例如</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> CLR Engine</span><span style="FONT-SIZE: 9pt"><font face=宋体>）能够较高阶层的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> APIs </span><span style="FONT-SIZE: 9pt"><font face=宋体>更少变动，如此降低冲击的作法才能保障客户在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET </span><font face=宋体><span style="FONT-SIZE: 9pt">技术上的投资。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 8</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：如果</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework </span><span style="FONT-SIZE: 9pt"><font face=宋体>使用</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> runtime </span><span style="FONT-SIZE: 9pt"><font face=宋体>与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> compiler</span><span style="FONT-SIZE: 9pt"><font face=宋体>，为何它是以</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>作为版本号码？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：伴随</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>所释出的新技术包括了</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WCF, WF, WPF </span><span style="FONT-SIZE: 9pt"><font face=宋体>与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> CardSpace</span><span style="FONT-SIZE: 9pt"><font face=宋体>，它提供了很多很棒的功能与创新，因此我们认为它应该以</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 3.0 </span><font face=宋体><span style="FONT-SIZE: 9pt">作为版本号码。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 9</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>的并行</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> (Side by Side) </span><span style="FONT-SIZE: 9pt"><font face=宋体>该如何完成呢？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：因为</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>只有在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之上加入新的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> components</span><span style="FONT-SIZE: 9pt"><font face=宋体>，所以</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>两者之间的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> assemblies </span><span style="FONT-SIZE: 9pt"><font face=宋体>并没有重迭的部分，因此并没有实际的并行作业场景的问题存在，你可以在相同一台电脑上，同时执行</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><font face=宋体><span style="FONT-SIZE: 9pt">的应用程式。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 10</span><span style="FONT-SIZE: 9pt"><font face=宋体>：我现在已执行建构在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WinFX </span><span style="FONT-SIZE: 9pt"><font face=宋体>之上的应用程式，是否我需要做任何的改变以便能够在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>上执行？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：不需要，</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">WinFX </span><span style="FONT-SIZE: 9pt"><font face=宋体>的应用程式不需要做任何的改变就可以在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之上执行。当然由于</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>仍然在发展中，所以未来</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Framework </span><font face=宋体><span style="FONT-SIZE: 9pt">也许有些变动也说不定。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 11</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：我是否可以移除特定的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 components</span><span style="FONT-SIZE: 9pt"><font face=宋体>？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：答案是不行的，因为</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 components</span><span style="FONT-SIZE: 9pt"><font face=宋体>（</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">WPF, WCF, WF, and CardSpace</span><span style="FONT-SIZE: 9pt"><font face=宋体>）是单一</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Package </span><font face=宋体><span style="FONT-SIZE: 9pt">的一部分，并且是安装在一起的。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 12</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">C# 3.0</span><span style="FONT-SIZE: 9pt"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">VB 9</span><span style="FONT-SIZE: 9pt"><font face=宋体>、</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Atlas </span><span style="FONT-SIZE: 9pt"><font face=宋体>或</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Linq </span><span style="FONT-SIZE: 9pt"><font face=宋体>是否会包含在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之中？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：答案是不会的，因为这些功能将会包含在更未来的版本，</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>只会包含先前所描述的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WinFX </span><font face=宋体><span style="FONT-SIZE: 9pt">技术。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 13</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>发行时，是否会包含</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Compact Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>版本？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：答案是不会，我们目前正开发可支援</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>功能的的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Compact Framework </span><font face=宋体><span style="FONT-SIZE: 9pt">版本，但发行日期和所包含的功能目前尚未宣布。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 14</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：代号</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Orcas </span><span style="FONT-SIZE: 9pt"><font face=宋体>的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Visual Studio </span><span style="FONT-SIZE: 9pt"><font face=宋体>会是使用哪个版本号码的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework</span><span style="FONT-SIZE: 9pt"><font face=宋体>？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：目前我们对于</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Orcas </span><span style="FONT-SIZE: 9pt"><font face=宋体>产品仍在规划中，所以</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework </span><font face=宋体><span style="FONT-SIZE: 9pt">的版本号码尚未定义。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 15</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>中的新功能（</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">WPF, WCF, WF, and CardSpace</span><span style="FONT-SIZE: 9pt"><font face=宋体>）将会被安装在什么地方？是否和目前</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>所安装的路径会有所差异？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：和</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>共用的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> components </span><span style="FONT-SIZE: 9pt"><font face=宋体>将会安装在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> %windir%\Microsoft.NET\Framework\V2.0.50727 </span><span style="FONT-SIZE: 9pt"><font face=宋体>路径；而</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>新功能将会安装在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> %windir%\Microsoft.NET\Framework\V3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>路径。安装与部署的更多详细资讯请参考</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <span lang=EN-US><a href="http://msdn.microsoft.com/winfx/default.aspx?pull=/library/en-us/dnlong/html/netfx30.asp"><font color=#0261b9><u>.NET 3.0 Deployment whitepaper</u></font></a></span></span><font face=宋体><span style="FONT-SIZE: 9pt">。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 16</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>会有多大？这样的改变，是否会比目前释出的版本变得更大？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：从</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WinFX </span><span style="FONT-SIZE: 9pt"><font face=宋体>命名变更成</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之后的大小并没有变更，它大约是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 49MB</span><span style="FONT-SIZE: 9pt"><font face=宋体>，其中包含了</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 22MB</span><font face=宋体><span style="FONT-SIZE: 9pt">。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 17</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：对于</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>的服务运作将会是如何？如果我安装</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>之后，我还可以获得</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>的更新服务吗？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：更新服务对于</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>及其作业系统将仍会被继续，任何的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>更新服务也将会在安装</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>时所一并安装的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 2.0 components </span><font face=宋体><span style="FONT-SIZE: 9pt">上正常作用。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 18</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>将会支援何种作业系统？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>将会支援</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows Vista&#8482;, Windows Server 2003 (SP1), and Windows XP (SP2) </span><font face=宋体><span style="FONT-SIZE: 9pt">作业系统。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 19</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：何时会发布释出</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0</span><span style="FONT-SIZE: 9pt"><font face=宋体>？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>会是包含在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows Vista </span><span style="FONT-SIZE: 9pt"><font face=宋体>作业系统的一部分，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Windows Vista </span><span style="FONT-SIZE: 9pt"><font face=宋体>的客户将会得到</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0</span><span style="FONT-SIZE: 9pt"><font face=宋体>。给商业客户的第一个</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows Vista </span><span style="FONT-SIZE: 9pt"><font face=宋体>版本，目前计划是在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 2006 </span><span style="FONT-SIZE: 9pt"><font face=宋体>年</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 11 </span><span style="FONT-SIZE: 9pt"><font face=宋体>月，然而最后日期会视客户回馈反应而决定。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><span style="FONT-SIZE: 9pt"><font face=宋体>在此同时，我们会广泛地提供给</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows XP and Windows Server 2003 </span><span style="FONT-SIZE: 9pt"><font face=宋体>客户获得</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>下载。</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <span lang=EN-US></span></span></p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 20</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>与</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows Vista </span><span style="FONT-SIZE: 9pt"><font face=宋体>作业系统之间的相关性为何？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">.NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows Vista </span><span style="FONT-SIZE: 9pt"><font face=宋体>作业系统的核心元件，并且预设是会安装在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows Vista </span><span style="FONT-SIZE: 9pt"><font face=宋体>作业系统，而它也会让</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows XP and Windows Server 2003 </span><font face=宋体><span style="FONT-SIZE: 9pt">客户取得。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font> </p>
<p style="LINE-HEIGHT: 12pt"><strong><span style="FONT-SIZE: 9pt"><font face=宋体>问</font></span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> 21</span></strong><span style="FONT-SIZE: 9pt"><font face=宋体>：是否</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>有任何的功能只能在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows Vista </span><span style="FONT-SIZE: 9pt"><font face=宋体>作业系统上才能执行？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br><br></span><font face=宋体><strong><span style="FONT-SIZE: 9pt">答</span></strong><span style="FONT-SIZE: 9pt">：虽然有些</span></font><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> .NET Framework 3.0 </span><span style="FONT-SIZE: 9pt"><font face=宋体>的最佳化将会因</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows Vista </span><span style="FONT-SIZE: 9pt"><font face=宋体>新功而享有利益，但我们努力提供一致性的经验在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows Vista, Windows Server 2003, and Windows XP </span><font face=宋体><span style="FONT-SIZE: 9pt">这三种作业系统之上。</span></font></p>
&nbsp;<br><img src ="http://www.blogjava.net/yeiwei/aggbug/109958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-04-11 17:45 <a href="http://www.blogjava.net/yeiwei/archive/2007/04/11/109958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET2.0文件图片处理</title><link>http://www.blogjava.net/yeiwei/archive/2007/04/04/108347.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 04 Apr 2007 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/04/04/108347.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/108347.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/04/04/108347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/108347.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/108347.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.最简单的单文件上传(没花头)2.多文件上传3.客户端检查上传文件类型(以上传图片为例)4.服务器端检查上传文件类型(以上传图片为例) 5.服务器端检查上传文件类型(可以检测真正文件名) 6.上传文件文件名唯一性处理(时间戳+SessionID)7.上传图片生成等比例缩略图8.上传图片加水印(文字水印，图片水印，文字+图片水印)9.1.最简单的单文件上传(没花头)效果图：说明：这是最基本...&nbsp;&nbsp;<a href='http://www.blogjava.net/yeiwei/archive/2007/04/04/108347.html'>阅读全文</a><img src ="http://www.blogjava.net/yeiwei/aggbug/108347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-04-04 09:49 <a href="http://www.blogjava.net/yeiwei/archive/2007/04/04/108347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#和ASP.Net面试题目集锦</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/30/107439.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 30 Mar 2007 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/30/107439.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/107439.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/30/107439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/107439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/107439.html</trackback:ping><description><![CDATA[1.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.<br>2.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程.请附code<br>3.什么叫应用程序域？什么是受管制的代码？什么是强类型系统？<br>4..Net中读写数据库需要用到哪些类？他们的作用<br>5.ASP.net的身份验证方式有哪些？分别是什么原理？<br>6.解释一下UDDI、WSDL的意义及其作用。<br>7.常用的调用webservice方法有哪些？<br>8.讲一讲你理解的web service,在dot net framework中，怎么很好的结合xml?（讲概念就行了）<br>9.C#可否对内存进行直接的操作？(这可是个难点哦？要注意！）,如果能,如何操作;如果不能,为什么?<br>10.描述一下C#中索引器的实现过程，是否只能根据数字进行索引？
<p>1.面向对象的思想主要包括什么？<br>面向对象三大特征:继承,封套,多态.面相对象的思想也不是一句两句就能说清楚..主要思想就是减少代码重复,增大代码复用率..</p>
<p>2.什么是ASP.net中的用户控件<br>问这样的问题,一般是迷惑你.因为新手还是分不清楚用户控件和服务器控件(也称自定义控件)..用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类似ASP中的include..但是功能要强大的多..</p>
<p>如果现有的 ASP.NET 服务器控件都不符合应用程序的特定要求，则可以创建封装所需功能的 Web 用户控件或 Web 自定义控件。这两种控件之间的主要区别在于设计时的易创建性与易用性。</p>
<p>Web 用户控件易于创建，但它们在高级方案中使用起来可能不太方便。开发 Web 用户控件的方式与开发 Web 窗体页的方式几乎完全相同。与 Web 窗体相似，用户控件可以在可视化设计器中创建，可以使用与 HTML 隔离的代码来编写，并且可以处理执行事件。但是，由于 Web 用户控件在运行时动态地进行编译，所以不能将它们添加到工具箱中，而且它们在添加到页面上时由简单的占位符标志符号来表示。如果您习惯于完全的 Visual Studio .NET 设计时支持（包括&#8220;属性&#8221;窗口和&#8220;设计&#8221;视图预览），这将会使 Web 用户控件使用起来更不方便。 此外，在应用程序之间共享用户控件的唯一方式是将一个单独的副本放入每个应用程序，因此如果对该控件作出了更改，将需要进行比较多的维护。</p>
<p>Web 自定义控件是编译的代码，这使得 Web 自定义控件更易于使用但更难于创建；Web 自定义控件必须使用代码来创建。一旦创建该控件，那么，您就可以将其添加到工具箱中，并在具有完全&#8220;属性&#8221;窗口支持和 ASP.NET 服务器控件的其他所有设计时功能的可视化设计器中显示该控件。此外，还可以在全局程序集缓存中安装 Web 自定义控件的单个副本，并在应用程序之间共享该副本，这将使维护变得更容易。有关更多信息，请参阅全局程序集缓存。<br>如果您的控件包含大量静态布局，用户控件则可能是较佳的选择。如果您的控件主要是动态生成的（例如数据绑定表的行、树视图的节点或选项卡 (TabControl) 控件的选项卡），自定义控件则可能是较佳的选择。</p>
<p>下表概述了这两种类型之间的主要区别：<br>Web 用户控件<br>1.难于创建<br>2.为使用可视化设计工具的使用者提供有限的支持<br>3. 每个应用程序中需要控件的一个单独副本<br>4. 不能添加到 Visual Studio 中的工具箱<br>5. 适用于静态布局<br>Web 自定义控件<br>1.易于创建<br>2. 为使用者提供完全的可视化设计工具支持<br>3. 仅在全局程序集缓存中需要控件的单个副本<br>4. 可以添加到 Visual Studio 中的工具箱<br>5. 适用于动态布局</p>
<p><br>3.什么叫应用程序域？什么是受管制的代码？什么是强类型系统？什么是装箱和拆箱？什么是重载？CTS、CLS和CLR分别作何解释？<br>这个需要当前描述了..东西太多..打字要打死了..找个比较简单的说说吧!<br>CTS:公共类型系统.主要是为了语言之间的进行标准化处理.<br>CLS:公共语言规范.主要是确保代码可以在任何语言中访问的最小标准集体<br>CLR:公共语言运行时.主要是管理代码..处理,加载代码,以及所有服务的代码</p>
<p>4.列举一下你所了解的XML技术及其应用<br>xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和config</p>
<p>5.值类型和引用类型的区别？写出C#的样例代码。<br>值类型是在内存中保存,引用类型是在内存中保存一副本.你在内存中可以有多个某种引用对象..但是值类型始终只有一个.<br>最常见的值类型就是static,struct;<br>例如:<br>static int aa = 1;//值类型<br>如果多个用户改变aa的值则,aa的值会以最后一个修改的记录为准.其他人的修改则会被冲掉.<br>引用类型,最能说明问题的就是实例化..你new出来的对象单独分配一个独立的内存..所以值不会互相冲突/</p>
<p>数据成员可以分静态变量、非静态变量两种. <br>&nbsp;静态成员：静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.<br>&nbsp;<br>&nbsp;非成静态员：所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中..<br>&nbsp;<br>&nbsp;一个类中也可以包含静态成员和非静态成员,类中也包括静态构造函数和非静态构造函数..<br>&nbsp;<br>&nbsp;对于winApp来说,静态成员对于程序员本身省了很多事,而且因为静态成员驻留内存,在方法与方法之间传递共享数据的时候,所以静态成员成了我的首选..但是不要因为方便,大量使用,尤其是在内存紧张或者<br>&nbsp;用静态方法操作一些共享值的时候.或者要写多用户系统的时候,要慎之又慎.比如:<br>&nbsp;static int id = 0;<br>&nbsp;sql = "select * from table where id=" + id;l</p>
<p>6.ADO.net中常用的对象有哪些？分别描述一下。<br>Connection 数据库连接对象<br>Command 数据库命令<br>DataReader 数据读取器<br>DataSet 数据集</p>
<p>7.如何理解委托？<br>委托的概念,最好的说明就是事件.因为事件使用的就是委托.例如:this.Load += new System.EventHandler(this.Page_Load);这个就是使用了一个委托.<br>具体的用法请参考.我以前的帖子,设计猫鼠联动..</p>
<p>8.C#中的接口和类有什么异同。<br>类是方法功能的实现和集合,接口是规范类.约束类.<br>参考我的文章:http://lixianhuei.cnblogs.com/archive/2005/08/04/207123.html</p>
<p>9.。net中读写数据库需要用到哪些类？他们的作用<br>看第六题..答案差不多</p>
<p>10.UDP连接和TCP连接的异同。<br>这个说不清楚.</p>
<p>11.ASP.net的身份验证方式有哪些？分别是什么原理？<br>window验证:为每个用户开启window帐号,验证其身份.安全性较高.<br>forms验证:为每个登陆用户写入一个身份验证票据..在web使用最广的验证方式..灵活方便.</p>
<p>12.进程和线程分别怎么理解？<br>这个是新人最容易迷惑的东西..<br>进程:Process</p>
<p>13.什么是code-Behind技术。<br>新建一个VS.NET下的项目..看到ASPX,RESX和CS三个后缀的文件了吗??这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.</p>
<p>14.活动目录的作用。<br>活动目录是window2000的最重要的功能.可以将用户信息全部集成起来,登陆以后可以访问多个不同的网络服务..没深入研究过.<br>查看一下帖子:http://www.ies.impu.edu.cn/resource/os/windowsx/WindowsGeneral/WinGeneral0008.htm</p>
<p>15..net中读写XML的类都归属于哪些命名空间？<br>System.XML类</p>
<p>16.解释一下UDDI、WSDL的意义及其作用。<br>解释不清楚了..又是一大块..</p>
<p>17.什么是SOAP,有哪些应用。<br>simple object access protocal,简单对象接受协议.以xml为基本编码结构,建立在已有通信协议上(如http,不过据说ms在搞最底层的架构在tcp/ip上的soap)的一种规范<br>是微软大力推广的Web Service使用的协议..</p>
<p>18.如何部署一个ASP.net页面。<br>不清楚问的什么意思...如果非要回答的话,就写一个带.aspx的后缀文件..然后安装IIS和FrameWork环境..浏览就好了.</p>
<p>19.如何理解.net中的垃圾回收机制。<br>垃圾回收体制如下:<br>如果发现内存不够,则垃圾回收器,将全部对象作为无效对象(被回收对象),然后先将全局变量,static,处于活动中的局部变量,以及当前CG指针指向的对象放入一个表中.然后<br>会搜索新列表中的对象所引用的对象.加入列表中,其他没有被加入列表的对象都会被回收.</p>
<p>20.常用的调用webservice方法有哪些？<br>我一般用的是WSDL..或者web引用..<br>&nbsp;<br>&nbsp;<br>&nbsp;</p>
<p>1.new有几种用法</p>
<p>第一种:new Class();</p>
<p>第二种:覆盖方法</p>
<p>public new XXXX(){}</p>
<p>第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。</p>
<p>2.如何把一个array复制到arrayList里</p>
<p>foreach( object o in array )arrayList.Add(o);</p>
<p>3.datagrid.datasouse可以连接什么数据源 [dataset,datatable,dataview]</p>
<p>dataset,datatable,dataview , IList</p>
<p>4.概述反射和序列化</p>
<p>反射:程序集包含模块，而模块包含类型，类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例，将类型绑定到现有对象，或从现有对象中获取类型。然后，可以调用类型的方法或访问其字段和属性</p>
<p>序列化:序列化是将对象转换为容易传输的格式的过程。例如，可以序列化一个对象，然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端，反序列化将从该流重新构造对象。</p>
<p>5.概述o/r mapping 的原理</p>
<p>利用反射，配置 将类于数据库表映射</p>
<p>6.类成员有( )种可访问形式</p>
<p>可访问形式？不懂。</p>
<p>可访问性：public ,protected ,private,internal</p>
<p>7.用sealed修饰的类有什么特点</p>
<p>sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类，则会发生编译时错误。</p>
<p>密封类不能同时为抽象类。</p>
<p>sealed 修饰符主要用于防止非有意的派生，但是它还能促使某些运行时优化。具体说来，由于密封类永远不会有任何派生类，所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。</p>
<p>8.列举ADO.NET中的五个主要对象，并简单描述</p>
<p>connection,command,dataReader,trans,dataset ...</p>
<p>9.执行下面代码后：</p>
<p>String strTemp ="abcdefg 某某某"；</p>
<p>Int i System.Text.Encoding.Default.GetBytes(strTemp).Length;</p>
<p>Int j = strTemp.Length;</p>
<p>问：i=(14 ) ；j=(11 )</p>
<p>i=(14 ) ；j=(11 ) 中文两个字节</p>
<p>10.C#中，string str = null 与 string str =""，请尽量用文字说明区别。(要点：说明详细的内存空间分配)</p>
<p>string str ="" 分配空间 </p>
<p>11.详述.NET里class和struct的异同！</p>
<p>class:放在 ? struct放在？</p>
<p>struct值传递</p>
<p>类与结构有很多相似之处：结构可以实现接口，并且可以具有与类相同的成员类型。然而，结构在几个重要方面不同于类：结构为值类型而不是引用类型，并且结构不支持继承。结构的值存储在&#8220;在堆栈上&#8221;或&#8220;内联&#8221;。细心的程序员有时可以通过聪明地使用结构来增强性能。</p>
<p>12.概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。</p>
<p>远程逻辑调用，remoing接口只能用在.net中</p>
<p>13.什么是code-behind技术</p>
<p>aspx and cs </p>
<p>14.概述三层结构体系</p>
<p>web/business/dataaccess</p>
<p>15.asp.net如何实现MVC模式，举例说明！</p>
<p>web/business/dataaccess</p>
<p>----------------------------------------------------------------------------------------------------------</p>
<p>1.面向对象的思想主要包括什么？</p>
<p>答:这个题范围太广,不知道说什么.</p>
<p>2.什么是ASP.net中的用户控件</p>
<p>答:用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.</p>
<p>3.什么叫应用程序域？什么是受管制的代码？什么是强类型系统？什么是装箱和拆箱？什么是重载？CTS、CLS和CLR分别作何解释？</p>
<p>答:装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言运行时,其它的不清楚.</p>
<p>4.列举一下你所了解的XML技术及其应用</p>
<p>答:XML可是好东西,保存配置,站与站之间的交流,WEB SERVICE都要用它.</p>
<p>5.值类型和引用类型的区别？写出C#的样例代码。答:结构是值类型,类是引用类型,所以传结构就是值类型的应用啦,传对象或类就是引用类型的,这个不用多写了吧.</p>
<p>&nbsp;</p>
<p>6.ADO.net中常用的对象有哪些？分别描述一下。</p>
<p>答:connection command sqladapter dataset datatable dataview等等.写不完了.</p>
<p>7.如何理解委托？</p>
<p>答:据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法.</p>
<p>msdn2005中是这样解释的:</p>
<p>委托具有以下特点：</p>
<p>委托类似于 C++ 函数指针，但它是类型安全的。</p>
<p>委托允许将方法作为参数进行传递。</p>
<p>委托可用于定义回调方法。</p>
<p>委托可以链接在一起；例如，可以对一个事件调用多个方法。</p>
<p>方法不需要与委托签名精确匹配。有关更多信息，请参见协变和逆变。</p>
<p>C# 2.0 版引入了匿名方法的概念，此类方法允许将代码块作为参数传递，以代替单独定义的方法。</p>
<p>8.C#中的接口和类有什么异同。</p>
<p>答:这个异同可多了,要说清楚还真不容易.</p>
<p>9.。net中读写数据库需要用到哪些类？他们的作用</p>
<p>答:这个类自已可以写的啊,你是指基类吗?那configuration,sqlconnection,sqlcommand等都要用到.</p>
<p>10.UDP连接和TCP连接的异同。</p>
<p>答:前者只管传,不管数据到不到,无须建立连接.后者保证传输的数据准确,须要连结.</p>
<p>11.ASP.net的身份验证方式有哪些？分别是什么原理？答:form认证,windows集成认证等,原理不清楚.</p>
<p>&nbsp;</p>
<p>12.进程和线程分别怎么理解？</p>
<p>答:进程是老子,线程是儿子,没有老子就没有儿子,一个老子可以有多个儿子.一个儿子可以成为别人的儿子,一个老子也可以为别的老子生儿子.</p>
<p>13.什么是code-Behind技术。</p>
<p>答:代码分离,这是个明智的东西,像ASP这样混成一堆很不爽.或者可以理解成HTML代码写在前台,C#代码写在后台.当</p>
<p><br>&nbsp;</p>
<p>&nbsp;</p>
<p>ASP.NET面试的题目<br>1。请简要写出你对C#及ASP的认识。</p>
<p><br>2。怎么获得文件的当前路径（代码）</p>
<p>3。 请使用ADO。NET 写出数据库连接开始事务处理，即数据库连接（代码）<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.microsoft.com/china/MSDN/library/data/dataAccess/BestPractiCEs+forUsingADO.NET.mspx?mfr=true">http://www.microsoft.com/china/MSDN/library/data/dataAccess/BestPractiCEs+forUsingADO.NET.mspx?mfr=true</a><br><a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/builddistapp/PerformanCE+COMparison+Transaction+Control.mspx?mfr=true">http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/builddistapp/PerformanCE+COMparison+Transaction+Control.mspx?mfr=true</a></p>
<p>4。在SQL语言中，如果要建立一个工资表包含职工号，姓名，职称。工资等字段。若要保证工资 字段 的取值不低于800元，最合适的实现方法是：<br>A。在创建工资表时为&#8221;工资&#8220;字段建立缺省<br>B。在创建工资表时为&#8221;工资&#8220;字段建立检查约束<br>C。在工资表建立一个触发器<br>D。为工资表数据输入编写一个程序进行控制</p>
<p>5。没有关键码序列（Q。G。M。Z。A。N。B。P。X。H。Y。S。L。T。K。E）<br>采用二路归并排序法进行排序，请写出第二趟归并后的结果？</p>
<p>6。创建一个新文本文件并向其写入一个字符串（代码）</p>
<p>7。请使用正则表达式验证电子邮件地址的合法性（代码）</p>
<p>8。如何设定DATAGRID中模板列里 下拉列表默然值，如何在编辑时，让其绑定另一个表的数据并自动讲当前值设为默认值</p>
<p>9。上机测试题目：用户管理中，用户验证，用户添加，用户删除功能，采用ACCESS数据库<br>（时间30分钟）</p>
<p><br>一、求2003年所有没有降雨的日期&nbsp;&nbsp; <br>结果集：日期<br>表名：t_rain&nbsp;&nbsp;&nbsp;&nbsp; 降雨记录<br>表结构：<br>fstartTimedatetime&nbsp; (有时间信息)&nbsp; 降雨开始时间<br>fendTimedatetime 降雨结束时间&nbsp; (可能跨日的)</p>
<p>二、问答题<br>1.三只猫三分钟内可以捉三只老鼠，一百只猫需要多久才能捉到一百只老鼠?<br>2.有两枚硬币，共值一元五角，其中一枚不是五角的硬币，请问两枚硬币的面值各是多少？<br>3.一个人购物共付了六元，零食比笔芯多五元，笔芯价格是多少？<br>4.有两人在路上走，年轻的是年长的儿子，但年长的不是年轻的父亲，年长的是谁？<br>5.一立方尺的洞里有多少垃圾？<br>6.一个男人和他遗孀的妹妹结婚是否合法？<br>7.一只猴子跌进三十尺深的井里，它每天朝上蹿三尺，但都滑下两尺，依照这个速度，猴子多少天后会蹿出井外？<br>8.抽屉里有黑白袜子各十只，如果你在黑暗中伸手入抽屉，最少要取出几只才一定会有一双颜色相同？<br>9.有三个苹果，你拿了两个，你共有多少个？<br>10.有人要赶火车，只有两分钟时间，但要走两里。如果第一里的速度是每小时三十里，第二里的速度应该是多少才能赶上这班火车？</p>
<p>三、分析：（除了答案，还需阐明思路）：<br>1、5个海盗抢到了100颗宝石，每一颗都一样的大小和价值连城。 <br>　　他们决定这么分： <br>　　1。抽签决定自己的号码（1，2，3，4，5） <br>　　2。首先，由1号提出分配方案，然后大家5人进行表决，当且仅当半数和超过半数的人同意时，按照他的提案进行分配，否则将被扔入大海喂鲨鱼。 <br>　　3。如果1号死后，再由2号提出分配方案，然后大家4人进行表决，当且仅当半数和超过半数的人同意时，按照他的提案进行分配，否则将被扔入大海喂鲨鱼。 <br>　　4。依次类推...... <br>问题：第一个海盗提出怎样的分配方案才能够使自己的收益最大化<br>条件：每个海盗都是很聪明的人，都能很理智的判断得失，从而做出选择。</p>
<p>5.有一张表，表名：Test<br>表结构：<br>&nbsp;&nbsp;&nbsp;&nbsp; id int<br>&nbsp;&nbsp;&nbsp;&nbsp; name varchar(20)<br>有以下数据：<br>&nbsp;&nbsp;&nbsp; [id]&nbsp;&nbsp;&nbsp; [name]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aaa<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bbb<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aaa<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ccc<br>要求写一个查询语句，只显示[name]有重复的数据，没有重复的不显示出来。</p>
<p>&nbsp;</p>
<p><br>传入某个属性的set方法的隐含参数的名称是什么？<br>value，它的类型和属性所声名的类型相同。 <br>如何在C#中实现继承？<br>在类名后加上一个冒号，再加上基类的名称。 <br>C#支持多重继承么？<br>不支持。可以用接口来实现。 <br>被protected修饰的属性/方法在何处可以访问？<br>在继承或间接继承与这个类的子类中可以访问。 <br>私有成员会被继承么？<br>会，但是不能被访问。所以看上去他们似乎是不能被继承的，但实际上确实被继承了。 <br>请描述一下修饰符protected internal。 <br>被protected internal修饰的属性/方法只能在它的在同一个程序集（Assembly）中的子类被访问。 <br>C#提供一个默认的无参数构造函数，当我实现了另外一个有一个参数的构造函数时候，还想保留这个无参数的构造函数。这样我应该写几个构造函数？<br>两个，一旦你实现了一个构造函数，C#就不会再提供默认的构造函数了，所以需要手动实现那个无参数构造函数。 <br>C#中所有对象共同的基类是什么？<br>System.Object. <br>重载和覆写有什么区别？<br>重载提供了对一个方法签名的不同参数调用的实现。覆写提供了子类中改变父类方法行为的实现。 <br>在方法定义中，virtual有什么含意？ <br>被virtual修饰的方法可以被子类覆写。 <br>能够将非静态的方法覆写成静态方法么？<br>不能，覆写方法的签名必须与被覆写方法的签名保持一致，除了将virtual改为override。 <br>可以覆写私有的虚方法么？<br>不可以，甚至子类中无法访问父类中的私有方法。 <br>能够阻止某一个类被其他类继承么？ <br>可以，使用关键字sealed。 <br>能够实现允许某个类被继承，但不允许其中的某个方法被覆写么？ <br>可以，标记这个类为public，并标记这个方法为sealed。 <br>什么是抽象类（abstract class）？<br>一种不可以被实例化的类。抽象类中一般含有抽象方法，当然也可有具体实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。 <br>何时必须声明一个类为抽象类？ <br>当这个类中包含抽象方法时，或是该类并没有完全实现父类的抽象方法时。 <br>接口（interface）是什么？<br>只含有共有抽象方法（public abstract method）的类。这些方法必须在子类中被实现。 <br>为什么不能指定接口中方法的修饰符？ <br>接口中的方法用来定义对象之间通信的契约，指定接口中的方法为私有或保护没有意义。他们默认为公有方法。 <br>可以继承多个接口么？ <br>当然。 <br>那么如果这些接口中有重复的方法名称呢？ <br>这种情况中你可以决定如何实现。当然需要特别得小心。但是在编译环节是没有问题的。 <br>接口和抽象类的区别是什么？ <br>接口中所有方法必须是抽象的，并且不能指定方法的访问修饰符。抽象类中可以有方法的实现，也可以指定方法的访问修饰符。 <br>如何区别重载方法？ <br>不同的参数类型，不同的参数个数，不同的参数顺序。 <br>const和readonly有什么区别？<br>const关键字用来声明编译时常量，readonly用来声明运行时常量。 <br>System.String 和System.StringBuilder有什么区别？<br>System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串，并提供一些对这个字符串修改的方法 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>1.new有几种用法</p>
<p>第一种:new Class();</p>
<p>第二种:覆盖方法</p>
<p>public new XXXX(){}</p>
<p>第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。</p>
<p>2.如何把一个array复制到arrayList里</p>
<p>foreach( object o in array )arrayList.Add(o);</p>
<p>3.datagrid.datasouse可以连接什么数据源 [dataset,datatable,dataview]</p>
<p>dataset,datatable,dataview , IList</p>
<p>4.概述反射和序列化</p>
<p>反射:程序集包含模块，而模块包含类型，类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例，将类型绑定到现有对象，或从现有对象中获取类型。然后，可以调用类型的方法或访问其字段和属性</p>
<p>序列化:序列化是将对象转换为容易传输的格式的过程。例如，可以序列化一个对象，然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端，反序列化将从该流重新构造对象。</p>
<p>5.概述o/r mapping 的原理</p>
<p>利用反射，配置 将类于数据库表映射</p>
<p>6.类成员有( )种可访问形式</p>
<p>可访问形式？不懂。</p>
<p>可访问性：public ,protected ,private,internal</p>
<p>7.用sealed修饰的类有什么特点</p>
<p>sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类，则会发生编译时错误。</p>
<p>密封类不能同时为抽象类。</p>
<p>sealed 修饰符主要用于防止非有意的派生，但是它还能促使某些运行时优化。具体说来，由于密封类永远不会有任何派生类，所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。</p>
<p><br>8.列举ADO.NET中的五个主要对象，并简单描述</p>
<p>connection,command,dataReader,trans,dataset ...</p>
<p>9.执行下面代码后：</p>
<p>String strTemp ="abcdefg 某某某"；</p>
<p>Int i System.Text.Encoding.Default.GetBytes(strTemp).Length;</p>
<p>Int j = strTemp.Length;</p>
<p>问：i=(14 ) ；j=(11 )</p>
<p>i=(14 ) ；j=(11 ) 中文两个字节</p>
<p>10.C#中，string str = null 与 string str =""，请尽量用文字说明区别。(要点：说明详细的内存空间分配)</p>
<p>string str ="" 分配空间 </p>
<p>11.详述.NET里class和struct的异同！</p>
<p>class:放在 ? struct放在？</p>
<p>struct值传递</p>
<p>类与结构有很多相似之处：结构可以实现接口，并且可以具有与类相同的成员类型。然而，结构在几个重要方面不同于类：结构为值类型而不是引用类型，并且结构不支持继承。结构的值存储在&#8220;在堆栈上&#8221;或&#8220;内联&#8221;。细心的程序员有时可以通过聪明地使用结构来增强性能。</p>
<p>12.概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。</p>
<p>远程逻辑调用，remoing接口只能用在.net中</p>
<p>13.什么是code-behind技术</p>
<p>aspx and cs </p>
<p>14.概述三层结构体系</p>
<p>web/business/dataaccess</p>
<p>15.asp.net如何实现MVC模式，举例说明！</p>
<p>web/business/dataaccess</p>
<p>&nbsp;</p>
<p>1.面向对象的思想主要包括什么？</p>
<p>答:这个题范围太广,不知道说什么.</p>
<p>2.什么是ASP.net中的用户控件</p>
<p>答:用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.</p>
<p>3.什么叫应用程序域？什么是受管制的代码？什么是强类型系统？什么是装箱和拆箱？什么是重载？CTS、CLS和CLR分别作何解释？</p>
<p>答:装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言运行时,其它的不清楚.</p>
<p>4.列举一下你所了解的XML技术及其应用<br>&nbsp;</p>
<p>答:XML可是好东西,保存配置,站与站之间的交流,WEB SERVICE都要用它.</p>
<p>5.值类型和引用类型的区别？写出C#的样例代码。</p>
<p>答:结构是值类型,类是引用类型,所以传结构就是值类型的应用啦,传对象或类就是引用类型的,这个不用多写了吧.</p>
<p>6.ADO.net中常用的对象有哪些？分别描述一下。</p>
<p>答:connection command sqladapter dataset datatable dataview等等.写不完了.</p>
<p>7.如何理解委托？</p>
<p>答:据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法.</p>
<p>msdn2005中是这样解释的:</p>
<p>委托具有以下特点：</p>
<p>委托类似于 C++ 函数指针，但它是类型安全的。</p>
<p>委托允许将方法作为参数进行传递。</p>
<p>委托可用于定义回调方法。</p>
<p>委托可以链接在一起；例如，可以对一个事件调用多个方法。</p>
<p>方法不需要与委托签名精确匹配。有关更多信息，请参见协变和逆变。</p>
<p>C# 2.0 版引入了匿名方法的概念，此类方法允许将代码块作为参数传递，以代替单独定义的方法。</p>
<p>8.C#中的接口和类有什么异同。</p>
<p>答:这个异同可多了,要说清楚还真不容易.</p>
<p>9.。net中读写数据库需要用到哪些类？他们的作用</p>
<p>答:这个类自已可以写的啊,你是指基类吗?那configuration,sqlconnection,sqlcommand等都要用到.</p>
<p>10.UDP连接和TCP连接的异同。</p>
<p>答:前者只管传,不管数据到不到,无须建立连接.后者保证传输的数据准确,须要连结.</p>
<p>11.ASP.net的身份验证方式有哪些？分别是什么原理？</p>
<p>答:form认证,windows集成认证等,原理不清楚.</p>
<p>12.进程和线程分别怎么理解？</p>
<p>答:进程是老子,线程是儿子,没有老子就没有儿子,一个老子可以有多个儿子.一个儿子可以成为别人的儿子,一个老子也可以为别的老子生儿子.</p>
<p>13.什么是code-Behind技术。</p>
<p>答:代码分离,这是个明智的东西,像ASP这样混成一堆很不爽.或者可以理解成HTML代码写在前台,C#代码写在后台.当然前台也有脚本,类的调用等,其实写在一起也是可以的.</p>
<p>14.活动目录的作用。</p>
<p>答:这个不明白.请明白的补充一下.</p>
<p>15..net中读写XML的类都归属于哪些命名空间？</p>
<p>答:System.Xml</p>
<p>我自已写的就不一定了,嘿嘿.</p>
<p>16.解释一下UDDI、WSDL的意义及其作用。</p>
<p>答:什么东西?</p>
<p>17.什么是SOAP,有哪些应用。</p>
<p>答:SOAP（Simple Object Access Protocol ）简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议，是一个基于XML的协议。使用SOAP，不用考虑任何特定的传输协议（最常用的还是HTTP协议），可以允许任何类型的对象或代码，在任何平台上，以任何一直语言相互通信。这种相互通信采用的是XML格式的消息,具体请看:http://playist.blogchina.com/2521621.html</p>
<p>18.如何部署一个ASP.net页面。</p>
<p>答:随便啦,想直接上传就直接上传,想打包成EXE就打包,看个人喜好.</p>
<p>19.如何理解.net中的垃圾回收机制。</p>
<p>答:GC?对象创建了总要清除啊,不然内存哪够用?</p>
<p>20.常用的调用webservice方法有哪些？</p>
<p>答:调用就调用,还有很多方法吗?</p>
<p>&nbsp;</p>
<p>.net笔试题</p>
<p><br>姓名：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 日期：</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 填空: (1)面向对象的语言具有________性、_________性、________性。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)列举ADO.net中的五个主要对象_______________、_____________、_______________、_______________、_________________。</p>
<p>2. 不定项选择：</p>
<p>(1) 以下叙述正确的是： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A. 接口中可以有虚方法。&nbsp;&nbsp;&nbsp;&nbsp; B. 一个类可以实现多个接口。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C. 接口不能被实例化。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D. 接口中可以包含已实现的方法。</p>
<p>&nbsp;&nbsp; (2) 从数据库读取记录，你可能用到的方法有：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A. ExecuteNonQuery&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B. ExecuteScalar</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C. Fill&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D. ExecuteReader</p>
<p>3. 简述 private、 protected、 public、 internal 修饰符的访问权限。</p>
<p><br>4. 写出一条Sql语句： 取出表A中第31到第40记录（SQLServer, 以自动增长的ID作为主键,&nbsp; 注意：ID可能不是连续的。）</p>
<p><br>5 .列举ASP.NET 页面之间传递值的几种方式。</p>
<p><br>6. 写出程序的输出结果</p>
<p>class Class1&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string str = "Class1.str";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int i = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void StringConvert(string str)&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = "string being converted.";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void StringConvert(Class1 c)&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.str = "string being converted.";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Add(int i)&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void AddWithRef(ref int i)&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main()&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i1 = 10;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i2 = 20;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string str = "str";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class1 c = new Class1();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Add(i1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddWithRef(ref i2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Add(c.i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringConvert(str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringConvert(c);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(i1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(i2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(c.i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(c.str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp; }</p>
<p><br>7.写出程序的输出结果</p>
<p>public abstract class A&nbsp; <br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public A()&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine('A');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public virtual void Fun()&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("A.Fun()");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>public class B: A&nbsp; <br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public B() <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine('B');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public new void Fun()&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("B.Fun()");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Main()&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A a = new B();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.Fun();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}</p>
<p><br>8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 写出程序的输出结果：<br>public class A&nbsp; <br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public virtual void Fun1(int i) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void Fun2(A a)&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.Fun1(1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fun1(5);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}</p>
<p><br>public class B : A&nbsp; <br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void Fun1(int i)&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Fun1 (i + 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Main()&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B b = new B();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A a = new A();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.Fun2(b);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.Fun2(a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>&nbsp;</p>
<p>9. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... </p>
<p>&nbsp;&nbsp; 求第30位数是多少， 用递归算法实现。(C#语言)</p>
<p><br>10.&nbsp; 程序设计: 猫大叫一声，所有的老鼠都开始逃跑，主人被惊醒。(C#语言)</p>
<p>要求：&nbsp; 1.要有联动性，老鼠和主人的行为是被动的。</p>
<p>2.考虑可扩展性，猫的叫声可能引起其他联动效应。</p>
<p><br>参考答案:<br>1. (1)&nbsp; 继承性、封装性、多态性。（考基本概念）<br>&nbsp;&nbsp; (2)&nbsp; IEnumerable 、 GetEnumerator (对foreach机制的理解，本来不想出这题的，凑分)<br>&nbsp;&nbsp; (3)&nbsp; ... (送分题, 对ADO.net的了解)<br>评分标准：一空1分，满分10分。</p>
<p>&nbsp;</p>
<p>2. (1) B、C (考对接口的理解)&nbsp; (2)&nbsp; B、C、D (考查对ADO.net的熟练程度)<br>&nbsp; 评分标准: 一题5分，不选或者错选均不得分。漏选得2分。满分10分。</p>
<p>&nbsp;</p>
<p>3. . private :&nbsp;&nbsp; 私有成员, 在类的内部才可以访问。<br>&nbsp;&nbsp;&nbsp;&nbsp; protected : 保护成员，该类内部和继承类中可以访问。<br>&nbsp;&nbsp;&nbsp;&nbsp; public :&nbsp;&nbsp;&nbsp; 公共成员，完全公开，没有访问限制。<br>&nbsp;&nbsp;&nbsp;&nbsp; internal:&nbsp;&nbsp; 在同一命名空间内可以访问。<br>评分标准：答对1题2分，2题5分，3题7分。全对10分。 (送分题)</p>
<p>&nbsp;</p>
<p>4.&nbsp; 解1:&nbsp; select top 10 * from A where id not in (select top 30 id from A)<br>&nbsp;&nbsp;&nbsp; 解2:&nbsp; select top 10 * from A where id &gt; (select max(id) from (select top 30 id from A )as A)<br>&nbsp;&nbsp;&nbsp; 评分标准： 写对即10分。(答案不唯一，datagrid 分页可能需要用到)<br>&nbsp;<br>5.&nbsp; 1.使用QueryString,&nbsp; 如....?id=1; response. Redirect()....<br>&nbsp;&nbsp;&nbsp; 2.使用Session变量<br>&nbsp;&nbsp;&nbsp; 3.使用Server.Transfer<br>&nbsp;&nbsp;&nbsp; ....等等<br>&nbsp;&nbsp; 评分标准： 答对1点得3分， 两点7分， 3点10分。</p>
<p><br>6.&nbsp; (考查值引用和对象引用)<br>10<br>21<br>0<br>str<br>string being converted.<br>评分标准：答对一点得2分，满分10分。</p>
<p><br>7.&nbsp; A<br>&nbsp;&nbsp;&nbsp; B<br>A.Fun()<br>评分标准： 写出A.B 得5分，写出A.Fun()得5分，满分10分。<br>(考查在继承类中构造函数, 以及new 方法, )</p>
<p>&nbsp;</p>
<p><br>8.&nbsp; 2<br>&nbsp;&nbsp;&nbsp; 5<br>&nbsp;&nbsp;&nbsp; 1<br>&nbsp;&nbsp;&nbsp; 6</p>
<p>&nbsp;</p>
<p>(一些人做这题，头都晕了.... ^_^ )</p>
<p>&nbsp;</p>
<p>9.&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; public class MainClass<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Main()&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(Foo(30));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static int Foo(int i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i &lt;= 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(i &gt; 0 &amp;&amp; i &lt;= 2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else return Foo(i -1) + Foo(i - 2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>评分标准： 写出return Foo(i -1) + Foo(i - 2); 得5分。</p>
<p>&nbsp;写出if(i &gt; 0 &amp;&amp; i &lt;= 2) return 1; 得5分。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法参数过多需要扣分（扣除分数 = 参数个数 － 1）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不用递归算法扣5分</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (递归算法在树结构建立等方面比较常用)</p>
<p>&nbsp;</p>
<p>10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;要点：1. 联动效果，运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象<br>评分标准: &lt;1&gt;.构造出Cat、Mouse、Master三个类，并能使程序运行(2分)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;2&gt;从Mouse和Master中提取抽象（5分）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;3&gt;联动效应，只要执行Cat.Cryed()就可以使老鼠逃跑，主人惊醒。(3分)</p>
<p><br>&nbsp;&nbsp;&nbsp; public interface Observer<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void Response();&nbsp;&nbsp;&nbsp; //观察者的响应，如是老鼠见到猫的反映<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public interface Subject<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void AimAt(Observer obs);&nbsp; //针对哪些观察者，这里指猫的要扑捉的对象---老鼠<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public class Mouse : Observer<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Mouse(string name, Subject subj)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name = name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subj.AimAt(this);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void Response()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(name + " attempt to escape!");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public class Master : Observer<br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Master(Subject subj)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subj.AimAt(this);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void Response()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Host waken!");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; public class Cat : Subject<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private ArrayList observers;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Cat()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.observers = new ArrayList();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void AimAt(Observer obs)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.observers.Add(obs);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void Cry()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Cat cryed!");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (Observer obs in this.observers)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obs.Response();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; class MainClass<br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cat cat = new Cat();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mouse mouse1 = new Mouse("mouse1", cat);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mouse mouse2 = new Mouse("mouse2", cat);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master master = new Master(cat);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cat.Cry();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</p>
<p><br>//---------------------------------------------------------------------------------------------</p>
<p>设计方法二: 使用event -- delegate设计..<br>&nbsp;&nbsp;&nbsp; public delegate void SubEventHandler();<br>&nbsp;&nbsp;&nbsp; public abstract class Subject<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public event SubEventHandler SubEvent;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected void FireAway()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.SubEvent != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.SubEvent();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public class Cat : Subject<br>&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void Cry()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("cat cryed.");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.FireAway();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public abstract class Observer<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Observer(Subject sub)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub.SubEvent += new SubEventHandler(Response);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public abstract void Response();&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public class Mouse : Observer<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Mouse(string name, Subject sub) : base(sub)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name = name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void Response()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(name + " attempt to escape!");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public class Master : Observer<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Master(Subject sub) : base(sub){}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void Response()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("host waken");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; class Class1<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cat cat = new Cat();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mouse mouse1 = new Mouse("mouse1", cat);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mouse mouse2 = new Mouse("mouse2", cat);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master master = new Master(cat);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cat.Cry();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p><br>1. C#中 property 与 attribute的区别，他们各有什么用处，这种机制的好处在哪里？ </p>
<p>2. 讲一讲你理解的web service,在dot net framework中，怎么很好的结合xml?（讲概念就行了）</p>
<p>3. C#, Java 和 c++的特点，有什么相同的地方，不同的地方，C#分别从c++和java中吸取了他们那些优点？</p>
<p>4. C#可否对内存进行直接的操作？(这可是个难点哦？要注意！）</p>
<p>5. 用Visual C++ 6.0编写的代码(unmanaged code)，如何在CLR下和其他dot net component结合？</p>
<p>6. 以前作过的一些项目？介绍一下自己的编程经验。(这是蒙混不过去的，基本一问就知道是真是假)</p>
<p>7. 你对公司有什么期望？你的薪水期望值？为什么学计算机？以前的工作经验（这非常重要）？</p>
<p>&nbsp;</p>
<p>Q3： 维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑？为什么</p>
<p>Q4：ADO。NET相对于ADO等主要有什么改进？</p>
<p>Q5：ASP。NET与ASP相比，主要有哪些进步？</p>
<p>Q6：C#中的委托是什么？事件是不是一种委托？</p>
<p>Q7：描述一下C#中索引器的实现过程，是否只能根据数字进行索引？</p>
<p>Q8：C#中要使一个类支持FOREACH遍历，实现过程怎样？</p>
<p>Q10：写一个HTML页面，实现以下功能，左键点击页面时显示&#8220;您好&#8221;，右键点击时显示&#8220;禁止右键&#8221;。并在2分钟后自动关闭页面。</p>
<p>Q11：你对XMLHTTP、WEBSERVICE 了解吗？简单描述其特点、作用</p>
<p>Q12：接口和抽象类有什么区别？你选择使用接口和抽象类的依据是什么？</p>
<p>Q13：自定义控件和一般用户控件的异同？如果要用这两者之一，你会选择哪种？为什么</p>
<p>Q14：大概描述一下ASP。NET服务器控件的生命周期</p>
<p>Q15：UML</p>
<p>Q16：面向对象的概念，主要特点</p>
<p>Q17：类划分的依据。类粒度问题</p>
<p>Q18：事物管理问题</p>
<p>&nbsp;</p>
<p>第一，谈谈final, finally, finalize的区别。 </p>
<p>第二，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)?</p>
<p>第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。</p>
<p>第四，&amp;和&amp;&amp;的区别。</p>
<p>第五，HashMap和Hashtable的区别。</p>
<p>第六，Collection 和 Collections的区别。</p>
<p>第七，什么时候用assert。</p>
<p>第八，GC是什么? 为什么要有GC? </p>
<p>第九，String s = new String("xyz");创建了几个String Object?</p>
<p>第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少?</p>
<p>第十一，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?</p>
<p>第十二，sleep() 和 wait() 有什么区别?</p>
<p>第十三，Java有没有goto?</p>
<p>第十四，数组有没有length()这个方法? String有没有length()这个方法?</p>
<p>第十五，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?</p>
<p>第十六，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?</p>
<p>第十七，给我一个你最常见到的runtime exception。</p>
<p>第十八，error和exception有什么区别?</p>
<p>第十九，List, Set, Map是否继承自Collection接口?</p>
<p>第二十，abstract class和interface有什么区别?</p>
<p>第二十一，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized?</p>
<p>第二十二，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?</p>
<p>第二十三，启动一个线程是用run()还是start()?</p>
<p>第二十四，构造器Constructor是否可被override?</p>
<p>第二十五，是否可以继承String类?</p>
<p>第二十六，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法?</p>
<p>第二十七，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后?</p>
<p>第二十八，编程题: 用最有效率的方法算出2乘以8等於几?</p>
<p>第二十九，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对?</p>
<p>第三十，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递?</p>
<p>第三十一，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上?</p>
<p>第三十二，编程题: 写一个Singleton出来。</p>
<p>&nbsp;</p>
<p>数据库方面：</p>
<p>&nbsp;</p>
<p>1.存储过程和函数的区别</p>
<p>2.事务是什么？</p>
<p>3.游标的作用？如何知道游标已经到了最后？</p>
<p>4.触发器分为事前触发和事后触发，这两种触发有和区别。语句级触发和行级触发有何区别。</p>
<p>&nbsp;</p>
<p>1。用C＃实现以下功能</p>
<p>&nbsp;&nbsp; a 产生一个int数组，长度为100，并向其中随机插入1-100，并且不能重复。</p>
<p>&nbsp;&nbsp; b 对上面生成的数组排序，需要支持升序、降序两种顺序</p>
<p>2。请说明在.net中常用的几种页面间传递参数的方法，并说出他们的优缺点。</p>
<p>3。请说明.net中的错误处理机制，并举例</p>
<p>4。请说出强名的含义</p>
<p>5。请列出c＃中几种循环的方法，并指出他们的不同</p>
<p>6。请指出.net中所有类型的基类</p>
<p>7。请指出GAC的含义</p>
<p>8。SQL SREVER中，向一个表中插入了新数据，如何快捷的得到自增量字段的当前值</p>
<p>&nbsp;</p>
<p>您在什么情况下会用到虚方法？它与接口有什么不同？</p>
<p>Q：Override与重载有什么区别？</p>
<p>Q：值类型与引用类型有什么区别？</p>
<p>Q：怎样理解静态变量？</p>
<p>Q：向服务器发送请求有几种方式？</p>
<p>Q：DataReader与Dataset有什么区别？</p>
<p>Q：如果在一个B/S结构的系统中需要传递变量值，但是又不能使用Session、Cookie、Application，您有几种方法进行处理？</p>
<p>Q：用.net做B/S结构的系统，您是用几层结构来开发，每一层之间的关系以及为什么要这样分层？</p>
<p>Q：软件开发过程一般有几个阶段？每个阶段的作用？</p>
<p>Q：微软推出了一系列的Application Block，请举出您所知道的Application Block并说明其作用？</p>
<p>Q：请列举一些您用到过的设计模式以及在什么情况下使用该模式？</p>
<p>Q：您对WebService的体会？</p>
<p>Q：您对编程的兴趣如何？工作中遇到不懂的问题是怎样去解决的？您一般怎样去提高自己的编程水平？</p>
<p>Q：您离职的原因是什么？</p>
<p>Q：通过超链接怎样传递中文参数？</p>
<p>Q：请编程遍历页面上所有TextBox控件并给它赋值为string.Empty？</p>
<p>Q：请编程实现一个冒泡排序算法？</p>
<p>&nbsp;</p>
<p>1、override与重载的区别</p>
<p>2、.net的错误处理机制是什么</p>
<p>3、C＃中接口和类的异同</p>
<p>4、DataReader和DataSet的异同</p>
<p>&nbsp;</p>
<p>1.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.</p>
<p>2.如果需记录类的实例个数,该如何实现,请写一个简单的类于以证明.</p>
<p>3.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程.</p>
<p>4.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.</p>
<p>&nbsp;</p>
<p>一.填空题</p>
<p>1.c#中的三元运算符是__?:___?</p>
<p>2.当整数a赋值给一个object对象时，整数a将会被__装箱(封装)___?</p>
<p>3.类成员有_____种可访问形式？&nbsp; this.;new Class().Method;</p>
<p>4.public static const int A=1;这段代码有错误么？是什么？&nbsp; const不能用static修饰</p>
<p>5.float f=-123.567F;</p>
<p>&nbsp; int i=(int)f;</p>
<p>i的值现在是_____?&nbsp;&nbsp; 123&nbsp; </p>
<p>6.利用operator声明且仅声明了&#8220;==&#8221;，有什么错误么?&nbsp; </p>
<p>7.委托声明的关键字是______? delagete</p>
<p>8.用sealed修饰的类有什么特点？密封，不能继承</p>
<p>9.在Asp.net中所有的自定义用户控件都必须继承自________?Control</p>
<p>10.在.Net中所有可序列化的类都被标记为_____?&nbsp; </p>
<p>11.在.Net托管代码中我们不用担心内存漏洞，这是因为有了______?gc</p>
<p>12.下面的代码中有什么错误吗？_______</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; using System;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; class A</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public virtual void F(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("A.F");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abstract class B:A</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public abstract override void F(); // new public abstract void F();&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>13.当类T只声明了私有实例构造函数时，则在T的程序文本外部，___可以___（可以 or 不可以）从T派生出新的类，不可以____（可以 or 不可以）直接创建T的任何实例。</p>
<p>14.下面这段代码有错误么？</p>
<p>&nbsp;&nbsp;&nbsp; switch (i){</p>
<p>&nbsp;&nbsp;&nbsp; case():</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CaseZero();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp; case 1:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CaseOne();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp; case 2:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dufault;&nbsp; //wrong</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CaseTwo();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp; }</p>
<p>15.在.Net中，类System.Web.UI.Page 可以被继承么？可以</p>
<p>&nbsp;</p>
<p>二.简答题</p>
<p>1.在c#中using和new这两个关键字有什么意义，请写出你所知道的意义？using 指令 和语句 new 创建实例 new 隐藏基类中方法</p>
<p>4.谈谈类和结构的区别？类是引用类型、结构是值类型</p>
<p>5.一个长度为10000的字符串，通过随机从a-z中抽取10000个字符组成。请用c＃语言编写主要程序来实现。</p>
<p>6.对于这样的一个枚举类型：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enum Color:byte{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Red,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Green,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blue,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Orange</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; string[] ss=Enum.GetNames(typeof(Color));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; byte[]&nbsp;&nbsp; bb=Enum.GetValues(typeof(Color));</p>
<p>试写一段程序显示出枚举类型中定义的所有符号名称以及它们对应的数值。</p>
<p>7.您了解设计模式么？请列出您所知道的设计模式的名称。 //</p>
<p>8.请在SQL Server中设计表来保存一个树状结构的组织结构图（假设结构图中只有名称这一项内容需要保存），如果我想查询某一职位下的所有职位，用一个存储过程来实现，你有什么思路？</p>
<p>9.什么叫做SQL注入，如何防止？请举例说明。</p>
<p>10.下面这段代码输出什么？为什么？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; int i=5;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; int j=5;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; if (Object.ReferenceEquals(i,j))</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Equal");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; else</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Not Equal");</p>
<p>//不相等，因为比较的是对象</p>
<p>&nbsp;</p>
<p>1.写一个实现对一段字符串翻转的方法，附加一些条件，如其中包括&#8220;，&#8221;、&#8220;.&#8221;，对其设计测试用 例 。</p>
<p>2.对一支纸杯设计测试用例（可以是广义的杯，不一定是某一支特定功能的杯） </p>
<p>开发语言概念题 </p>
<p>3.什么是反射？ </p>
<p>4.用Singleton如何写设计模式 </p>
<p>5.C#中的垃圾回收机制是怎样的？ </p>
<p>6.什么是Application Pool？ </p>
<p>7.链表和数组的区别，各有什么优缺点.</p>
<p>8.Remoting在客户端服务器怎么实现 ?</p>
<p>9.什么是友元函数？ </p>
<p>10.用标准C如何实现多态？ </p>
<p>11.什么是虚函数？ </p>
<p>12.什么是抽象函数？ </p>
<p>13.什么是内存泄漏，怎样最简单的方法判断被存泄漏 ?</p>
<p>14.用英文介绍一下使用C#/C++做的项目，主要功能 </p>
<p>15.如果要与美国开电话会议，会如何与美国的工程师沟通 </p>
<p>16.如果老板认为你的技术落后，你会怎么回答&nbsp; </p>
<p>数据库知识题 </p>
<p>17.使用什么工具来调用存储过程 </p>
<p>18.SQL Server的两种索引是何形式？索引的作用？索引的优缺点？ </p>
<p>19.触发器的作用&nbsp; </p>
<p>其它知识题及问题 </p>
<p>20.什么是Web Service？ </p>
<p>21.什么是XML？ </p>
<p>22.Socket怎么实现</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class=postText>
<p>Q：您在什么情况下会用到虚方法？它与接口有什么不同？</p>
<p>Q：Override与重载有什么区别？</p>
<p>Q：值类型与引用类型有什么区别？</p>
<p>Q：怎样理解静态变量？</p>
<p>Q：向服务器发送请求有几种方式？</p>
<p>Q：DataReader与Dataset有什么区别？</p>
<p>Q：如果在一个B/S结构的系统中需要传递变量值，但是又不能使用Session、Cookie、Application，您有几种方法进行处理？</p>
<p>Q：用.net做B/S结构的系统，您是用几层结构来开发，每一层之间的关系以及为什么要这样分层？</p>
<p>Q：软件开发过程一般有几个阶段？每个阶段的作用？</p>
<p>Q：微软推出了一系列的Application Block，请举出您所知道的Application Block并说明其作用？</p>
<p>Q：请列举一些您用到过的设计模式以及在什么情况下使用该模式？</p>
<p>Q：您对WebService的体会？</p>
<p>Q：您对编程的兴趣如何？工作中遇到不懂的问题是怎样去解决的？您一般怎样去提高自己的编程水平？</p>
<p>Q：您离职的原因是什么？</p>
<p>以下几道题目如果您不会，请较为详细的描述您的解决思路和方法</p>
<p>Q：通过超链接怎样传递中文参数？</p>
<p>Q：请编程遍历页面上所有TextBox控件并给它赋值为string.Empty？</p>
<p>Q：请编程实现一个冒泡排序算法？ </p>
<p>&nbsp;</p>
<p>1.在对SQL Server 数据库操作时应选用（a）。 <br>a)SQL Server .NET Framework 数据提供程序； <br>b)OLE DB .NET Framework 数据提供程序； <br>c)ODBC .NET Framework 数据提供程序； <br>d)Oracle .NET Framework数据提供程序； <br>2.下列选项中，（c）是引用类型。 <br>a)enum类型 <br>b)struct类型 <br>c)string类型 <br>d)int类型 <br>3.关于ASP.NET中的代码隐藏文件的描述正确的是（a） <br>a)Web窗体页的程序的逻辑由代码组成，这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为&#8220;代码隐藏&#8221;文件，如果用C＃创建，该文件将具有&#8220;.ascx.cs&#8221;扩展名。 <br>b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。 <br>c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库（.dll）文件。 <br>d)以上都不正确。 <br>4.以下描述错误的是（a） <br>a)在C++中支持抽象类而在C#中不支持抽象类。 <br>b)C++中可在头文件中声明类的成员而在CPP文件中定义类的成员，在C#中没有头文件并且在同一处声明和定义类的成员。 <br>c)在C#中可使用 new 修饰符显式隐藏从基类继承的成员。 <br>d)在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。 <br>5.C#的数据类型有（b） <br>a)值类型和调用类型； <br>b)值类型和引用类型； <br>c)引用类型和关系类型； <br>d)关系类型和调用类型； <br>6.下列描述错误的是（d） <br>a)类不可以多重继承而接口可以； <br>b)抽象类自身可以定义成员而接口不可以； <br>c)抽象类和接口都不能被实例化； <br>d)一个类可以有多个基类和多个基接口； <br>7.在DOM中，装载一个XML文档的方法（b） <br>a)save方法 <br>b)load方法 <br>c)loadXML方法 <br>d)send方法 <br>8.下列关于构造函数的描述正确的是（c） <br>a)构造函数可以声明返回类型。 <br>b)构造函数不可以用private修饰 <br>c)构造函数必须与类名相同 <br>d)构造函数不能带参数 <br>9.以下是一些C#中的枚举型的定义，其中错误的用法有（a） <br>a)public enum var1{ Mike = 100, Nike = 102, Jike } <br>b)public enum var1{ Mike = 100, Nike, Jike } <br>c)public enum var1{ Mike=-1 , Nike, Jike } <br>d)public enum var1{ Mike , Nike , Jike } <br>10.int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是（d）。 <br>a)9 <br>b)2 <br>c)6 <br>d)越界 <br>11.接口是一种引用类型，在接口中可以声明（a），但不可以声明公有的域或私有的成员变量。 <br>a)方法、属性、索引器和事件； <br>b)方法、属性信息、属性； <br>c)索引器和字段； <br>d)事件和字段； <br>12.ASP.NET框架中，服务器控件是为配合Web表单工作而专门设计的。服务器控件有两种类型，它们是(a) <br>a)HTML控件和Web控件 <br>b)HTML控件和XML控件 <br>c)XML控件和Web控件 <br>d)HTML控件和IIS控件 <br>13.ASP.NET中，在Web窗体页上注册一个用户控件，指定该控件的名称为&#8221;Mike&#8221;，正确的注册指令为(b) <br>a)&lt;%@Register TagPrefix = &#8220;Mike&#8221; TagName = &#8220;Space2&#8221; Src = &#8220;myX.ascx&#8221;%&gt; <br>b)&lt;%@Register TagPrefix = &#8220;Space2&#8221; TagName = &#8220;Mike&#8221; Src = &#8220;myX.ascx&#8221;%&gt; <br>c)&lt;%@Register TagPrefix = &#8220;SpaceX&#8221; TagName = &#8220;Space2&#8221; Src = &#8220;Mike&#8221;%&gt; <br>d)以上皆非 <br>14.在ADO.NET中，对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法，下面叙述错误的是（c）。 <br>a)insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行； <br>b)ExecuteNonQuery()方法返回执行Sql语句所影响的行数。 <br>c)Select操作的Sql语句只能由ExecuteReader()方法来执行； <br>d)ExecuteReader()方法返回一个DataReder对象； <br>15.下列ASP.NET语句（b）正确地创建了一个与SQL Server 2000数据库的连接。 <br>a)SqlConnection con1 = new Connection(&#8220;Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB&#8221;); <br>b)SqlConnection con1 = new SqlConnection(&#8220;Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB&#8221;); <br>c)SqlConnection con1 = new SqlConnection(Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB); <br>d)SqlConnection con1 = new OleDbConnection(&#8220;Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB&#8221;); <br>16.Winform中，关于ToolBar控件的属性和事件的描述不正确的是(d)。 <br>a)Buttons属性表示ToolBar控件的所有工具栏按钮 <br>b)ButtonSize属性表示ToolBar控件上的工具栏按钮的大小，如高度和宽度 <br>c)DropDownArrows属性表明工具栏按钮（该按钮有一列值需要以下拉方式显示）旁边是否显示下箭头键 <br>d)ButtonClick事件在用户单击工具栏任何地方时都会触发 <br>17.在ADO.NET中执行一个存储过程时，如果要设置输出参数则必须同时设置参数的方向和（d ），必要时还要设置参数尺寸。 <br>a)大小； <br>b)上限； <br>c)初始值； <br>d)类型； <br></p>
<div class=post>
<div class=postText>18.如果将窗体的FormBoderStyle设置为None，则(B)。 <br>a)窗体没有边框并不能调整大小； <br>b)窗体没有边框但能调整大小； <br>c)窗体有边框但不能调整大小； <br>d)窗体是透明的； <br>19.如果要将窗体设置为透明的，则( b) <br>a)要将FormBoderStyle属性设置为None； <br>b)要将Opacity属性设置为小于100%得值； <br>c)要将locked 属性设置为True； <br>d)要将 Enabled属性设置为True； <br>20.下列关于C#中索引器理解正确的是(c ) <br>a)索引器的参数必须是两个或两个以上 <br>b)索引器的参数类型必须是整数型 <br>c)索引器没有名字 <br>d)以上皆非 <br>21.下面描述错误的是(D )。 <br>a)窗体也是控件； <br>b)窗体也是类； <br>c)控件是从窗体继承来的； <br>d)窗体的父类是控件类； <br>22.要对注册表进行操作则必须包含(D )。 <br>a)System.ComponentModel命名空间； <br>b)System.Collections命名空间； <br>c)System.Threading命名空间； <br>d)Microsoft.Win32命名空间； <br>23.要创建多文档应用程序，需要将窗体的(d )属性设为true。 <br>a)DrawGrid； <br>b)ShowInTaskbar； <br>c)Enabled； <br>d)IsMdiContainer； <br>24.如果设treeView1=new TreeView()，则treeView1.Nodes.Add("根节点")返回的是一个 (a)类型的值。 <br>a)TreeNode； <br>b)int； <br>c)string； <br>d)TreeView；&nbsp;</div>
<div class=postText><br>&nbsp;25.下面关于XML的描述错误的是（ d）。 <br>a)XML提供一种描述结构化数据的方法； <br>b)XML 是一种简单、与平台无关并被广泛采用的标准； <br>c)XML文档可承载各种信息； <br>d)XML只是为了生成结构化文档； <br>26. 以下的C#代码，试图用来定义一个接口： <br>public interface IFile <br>{ <br>int A; <br>int delFile() <br>{ <br>A = 3; <br>} <br>void disFile(); <br>} <br>关于以上的代码，以下描述错误的是(A,B )。 <br>a)以上的代码中存在的错误包括：不能在接口中定义变量，所以int A代码行将出现错误； <br>b)以上的代码中存在的错误包括：接口方法delFile是不允许实现的，所以不能编写具体的实现函数； <br>c)代码void disFile();声明无错误，接口可以没有返回值； <br>d)代码void disFile();应该编写为void disFile(){}；<br>29.在C#中利用Socket进行网络通信编程的一般步骤是：建立Socket侦听、（ a）30.声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是（b ）。 <br>a)void myCallBack(int x) ； <br>b)int receive(int num) ； <br>c)string receive(int x) ； <br>d)不确定的； <br>二、判断题，对的打&#8730;错的打&#215;（每小题2分，共20分） <br>1.( T)在C#中，装箱操作是将值类型转化成引用类型。 <br>2.( F)接口中的成员不可以有访问域修饰符，但可以有其它修饰符。 <br>3.( F)在C#中，索引器是专门用来访问对象中的数组信息的。 <br>4.( T)在C#中，接口可以被多重继承而类不能。 <br>5.( F)在C#中，int[][]是定义一个int型的二维数组。 <br>6.( T)异常类对象均为System．Exception类的对象。 <br>7.(T ) 当窗体最小化后，再次还原成为活动窗体时将自动触发Paint事件。 <br>8.( T) ASP.NET中，使用验证控件来验证用户输入，要求用户不可跳过该项输入，并且用户输入值在0和1000之间，则适用RequiredFieldValidator和RangeValidator控件。 <br>9.( F) 声明委托实际上是声明了一个方法。 <br>10.(T ) 任何事物都是对象。&nbsp;<br>1.请简述一下用Socket进行同步通讯编程的详细步骤 <br>1、在应用程序和远程设备中使用协议和网络地址初始化套接字 <br>2、在应用程序中通过指定端口和地址建立监听 <br>3、远程设备发出连接请求 <br>4、应用程序接受连接产生通信scoket <br>5、应用程序和远程设备开始通讯（在通讯中应用程序将挂起直到通讯结束） <br>6、通讯结束，关闭应用程序和远程设备的Socket回收资源 <br>2.比较ADO 与ADO.NET 的不同。</div>
</div>
</div><img src ="http://www.blogjava.net/yeiwei/aggbug/107439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-30 11:35 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/30/107439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Asp.net 2.0 GridView数据导出Excel文件</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105751.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105751.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105751.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105751.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105751.html</trackback:ping><description><![CDATA[<p>(一) . 运行示例图</p>
		<p> 1. 待导出数据的GridView图:</p>
		<p align="left">
				<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812216877.jpg" />
		</p>
		<p>2. 生成的Excel文件</p>
		<p>
				<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812216688.jpg" />
		</p>
		<p>(二). 代码</p>
		<p> 1. 前台页面 GridViewToExcelFile.aspx 代码:</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> 1<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />&lt;%@ Page Language="C#" AutoEventWireup="true" <span style="COLOR: #ff0000">EnableEventValidation="false"</span> CodeFile="GridViewToExcelFile.aspx.cs" Inherits="_Default" %&gt;<br /> 2<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" /><br /> 3<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br /> 4<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" /><br /> 5<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />&lt;html xmlns="http://www.w3.org/1999/xhtml" &gt;<br /> 6<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />&lt;head runat="server"&gt;<br /> 7<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />    &lt;title&gt;Untitled Page&lt;/title&gt;<br /> 8<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />&lt;/head&gt;<br /> 9<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />&lt;body&gt;<br />10<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />    &lt;form id="form1" runat="server"&gt;<br />11<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />    &lt;div&gt;<br />12<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />        &lt;asp:GridView ID="gvFoods" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None" EnableViewState="true"&gt;<br />13<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />            &lt;FooterStyle BackColor="Tan" /&gt;<br />14<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />            &lt;SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" /&gt;<br />15<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />            &lt;PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" /&gt;<br />16<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />            &lt;HeaderStyle BackColor="Tan" Font-Bold="True" /&gt;<br />17<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />            &lt;AlternatingRowStyle BackColor="PaleGoldenrod" /&gt;<br />18<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />        &lt;/asp:GridView&gt;<br />19<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />        &lt;br /&gt;<br />20<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />        &lt;asp:Button ID="Button1" runat="server" BackColor="#C0C0FF" OnClick="Button1_Click"<br />21<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />            Text="Create Excel" Width="137px" /&gt;<br />22<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />    &lt;/div&gt;<br />23<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />    &lt;/form&gt;<br />24<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />&lt;/body&gt;<br />25<img alt="" src="http://www.webasp.net/article/uploadfile/200701/20071812217337.gif" align="top" src_cetemp="/Images/OutliningIndicators/None.gif" />&lt;/html&gt;</div>
		<p> 2. 页面后台文件 GridViewToExcelFile.aspx.cs 代码:</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">  1 using System;<br />  2 using System.Data;<br />  3 using System.Configuration;<br />  4 using System.Web;<br />  5 using System.Web.Security;<br />  6 using System.Web.UI;<br />  7 using System.Web.UI.WebControls;<br />  8 using System.Web.UI.WebControls.WebParts;<br />  9 using System.Web.UI.HtmlControls;<br /> 10 using System.IO;<br /> 11 using System.Text;<br /> 12 using System.Collections;<br /> 13 <br /> 14 public partial class _Default : System.Web.UI.Page <br /> 15 {<br /> 16     protected void Page_Load(object sender, EventArgs e)<br /> 17     {<br /> 18        if(!Page.IsPostBack)<br /> 19        {<br /> 20           CreateStructure();<br /> 21           this.gvFoods.DataSource = this.CreateData();<br /> 22           this.gvFoods.DataBind();<br /> 23        }<br /> 24     }<br /> 25    private DataTable CreateStructure()<br /> 26    {<br /> 27       DataTable dt = new DataTable();<br /> 28       dt.Columns.Add(new DataColumn("CategoryID", typeof(int)));<br /> 29       dt.Columns.Add(new DataColumn("CategoryName", typeof(string)));<br /> 30       dt.Columns.Add(new DataColumn("Price", typeof(int)));      <br /> 31       return dt;<br /> 32    }<br /> 33    public DataSet CreateData()<br /> 34    {<br /> 35       DataSet ds = new DataSet();<br /> 36       DataTable dt = this.CreateStructure();<br /> 37 <br /> 38       DataRow drNew = dt.NewRow();      <br /> 39       drNew = dt.NewRow();<br /> 40       drNew["CategoryID"] = 1;<br /> 41       drNew["CategoryName"] = "Apple";<br /> 42       drNew["Price"] = 2;<br /> 43       dt.Rows.Add(drNew);<br /> 44 <br /> 45       drNew = dt.NewRow();<br /> 46       drNew["CategoryID"] = 2;<br /> 47       drNew["CategoryName"] = "Banana";<br /> 48       drNew["Price"] = 3;<br /> 49       dt.Rows.Add(drNew);<br /> 50 <br /> 51       drNew = dt.NewRow();<br /> 52       drNew["CategoryID"] = 3;<br /> 53       drNew["CategoryName"] = "Orange";<br /> 54       drNew["Price"] = 1;<br /> 55       dt.Rows.Add(drNew);<br /> 56 <br /> 57       drNew = dt.NewRow();<br /> 58       drNew["CategoryID"] = 4;<br /> 59       drNew["CategoryName"] = "Radish";<br /> 60       drNew["Price"] = 2;<br /> 61       dt.Rows.Add(drNew);<br /> 62 <br /> 63       drNew = dt.NewRow();<br /> 64       drNew["CategoryID"] = 5;<br /> 65       drNew["CategoryName"] = "Pen";<br /> 66       drNew["Price"] = 3;<br /> 67       dt.Rows.Add(drNew);<br /> 68 <br /> 69       drNew = dt.NewRow();<br /> 70       drNew["CategoryID"] = 6;<br /> 71       drNew["CategoryName"] = "Pencil";<br /> 72       drNew["Price"] = 7;<br /> 73       dt.Rows.Add(drNew);<br /> 74 <br /> 75       drNew = dt.NewRow();<br /> 76       drNew["CategoryID"] = 7;<br /> 77       drNew["CategoryName"] = "Ruler";<br /> 78       drNew["Price"] = 3;<br /> 79       dt.Rows.Add(drNew);<br /> 80 <br /> 81       drNew = dt.NewRow();<br /> 82       drNew["CategoryID"] = 8;<br /> 83       drNew["CategoryName"] = "Eraser";<br /> 84       drNew["Price"] = 5;<br /> 85       dt.Rows.Add(drNew);<br /> 86 <br /> 87       ds.Tables.Add( dt );<br /> 88       return ds;<br /> 89    }<br /> 90    protected void Button1_Click(object sender, EventArgs e)<br /> 91    {     <br /> 92       StringWriter sw = new StringWriter();<br /> 93       HtmlTextWriter htw = new HtmlTextWriter(sw);<br /> 94       this.gvFoods.RenderControl(htw);<br /> 95       string strHtml = sw.ToString().Trim();<br /> 96 <br /> 97       string ExcelFileName = "FoodList.xls";<br /> 98       string FilePhysicialPathName = Request.PhysicalApplicationPath;      <br /> 99       <br />100       //生成的Excel文件名<br />101       string objectExcelFileName = Path.Combine(FilePhysicialPathName, ExcelFileName);<br />102 <br />103       if( File.Exists( objectExcelFileName ))<br />104       {<br />105          File.Delete(objectExcelFileName);<br />106       }<br />107       FileStream fs = new FileStream(objectExcelFileName, FileMode.Create);<br />108       BinaryWriter bw = new BinaryWriter(fs, Encoding.GetEncoding("GB18030"));<br />109       bw.Write(strHtml);<br />110       bw.Close();<br />111       fs.Close();<br />112 <br />113    }<br />114    <span style="COLOR: #ff0000">public override void VerifyRenderingInServerForm(Control control)<br />115    {<br />116       //base.VerifyRenderingInServerForm(control);<br />117    }  <br /></span>118 }<br />119 </div><img src ="http://www.blogjava.net/yeiwei/aggbug/105751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:36 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.netWeb用户控件使用技巧</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105750.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105750.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105750.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105750.html</trackback:ping><description><![CDATA[<div class="con_sample">
				<p>本人学习.net用户控件的过程：如何读取子控件的值，自定义事件，动态控制子控件的状态，附带例子。</p>
		</div>
		<div class="con_all">
				<p>
				</p>
				<p>关于Web用户控件如何读取子控件的值，自定义事件，动态控制子控件状态的应用。</p>
				<p>效果图：</p>
				<p>
						<img alt="" src="http://www.webasp.net/article/uploadfile/200701/2007115105123105.jpg" />
				</p>
				<p> </p>
				<p>/*用户控件界面开始*/</p>
				<p>&lt;%@ Control Language="C#" AutoEventWireup="true" CodeFile="SearchBar.ascx.cs" Inherits="Singcn.UC.SearchBar" %&gt;</p>
				<p>&lt;table width="100%" border="0" cellpadding="0" cellspacing="0" class="coolBar"&gt;<br />  &lt;tr&gt;<br />    &lt;td style="WIDTH: 3px; CURSOR: move; height: 26px;"&gt;&lt;DIV CLASS="TBHandle"&gt;&lt;/DIV&gt;&lt;/TD&gt;<br />    &lt;td style="height: 26px"&gt;<br />        &amp;nbsp;查询：&lt;asp:TextBox ID="search_txt" runat="server" CssClass="TextBox" Width="120px"&gt;&lt;/asp:TextBox&gt;<br />        &lt;asp:DropDownList ID="search_lx" runat="server"&gt;</p>
				<p>        &lt;/asp:DropDownList&gt;<br />        &lt;asp:Button ID="BOk" runat="server" CssClass="Button" Text="查询" OnClick="BOk_Click"/&gt;<br />        &lt;asp:Label ID="Label1" runat="server" Text="Label"&gt;&lt;/asp:Label&gt;&lt;/td&gt;<br />  &lt;/tr&gt;<br />&lt;/table&gt;</p>
				<p>/*用户控件界面结束*/</p>
				<p> </p>
				<p> </p>
				<p>/*用户控件代码开始*/</p>
				<p>namespace MY.UC<br />{<br />    using System;<br />    using System.Data;<br />    using System.Configuration;<br />    using System.Collections;<br />    using System.Web;<br />    using System.Web.Security;<br />    using System.Web.UI;<br />    using System.Web.UI.WebControls;<br />    using System.Web.UI.WebControls.WebParts;<br />    using System.Web.UI.HtmlControls;</p>
				<p>    public delegate void BOkClickHandler(object sender, System.EventArgs e); //定义查询按钮委托</p>
				<p>    //自定义枚举,用户控制查询条显示模式<br />    public enum EBarType { mintype = 1, usertype, xwxxtype };<br />    //1=缺省模式,2=操作员模式,3=新闻管理模式</p>
				<p>
						<br />    public partial class SearchBar : System.Web.UI.UserControl<br />    {<br />        public event BOkClickHandler BOkClick;//定义事件<br />        <br />        public string SearchTxt//设置文本框内容<br />        {<br />            get { return this.search_txt.Text; }//this.search_txt.Text<br />            set { this.search_txt.Text = value; }<br />        }</p>
				<p>
						<br />        private EBarType _BarType;<br />        public EBarType BarType//设置显示模式<br />        {<br />            get { return _BarType; }<br />            set <br />            {<br />                _BarType = value;<br />                switch (value)<br />                {<br />                    case EBarType.xwxxtype:<br />                        showxwxx();<br />                        break;</p>
				<p>                    case EBarType.usertype:<br />                        showuser();<br />                        break;</p>
				<p>                    default://EBarType.mintype;<br />                        showmin();<br />                        break;<br />                }</p>
				<p>            }<br />        }<br />    <br />    <br />        private bool _TxtVisible;<br />        public bool TxtVisible<br />        {<br />            get { return _TxtVisible; }<br />            set<br />            {<br />                _TxtVisible = value;<br />                this.search_txt.Visible = _TxtVisible;<br />            }<br />        }//控制文本框是否显示</p>
				<p>        private bool _LXVisible;<br />        public bool LXVisible<br />        {<br />            get { return _LXVisible; }<br />            set<br />            {<br />                _LXVisible = value;<br />                this.search_lx.Visible = _LXVisible;<br />            }<br />        }//控制下拉列表是否显示</p>
				<p>        <br />        //private string _SearchLX;<br />        public string SearchLX<br />        {<br />            get { return this.search_lx.SelectedItem.Value; }//this.search_lx.SelectedItem.Value;_SearchLX<br />            set<br />            {<br />                for (int myi = 0; myi &lt; search_lx.Items.Count ; myi++)<br />                {<br />                    if (search_lx.Items[myi].Value == value)<br />                    {<br />                        search_lx.SelectedIndex = myi;<br />                        break;<br />                    }<br />                }<br />            }<br />        }//设置下拉列表的值</p>
				<p>        protected void Page_Load(object sender, EventArgs e)<br />        {</p>
				<p>        }</p>
				<p>        #region web 窗体设计器生成的代码<br />        override protected void OnInit(EventArgs e)<br />        {<br />            InitializeComponent();<br />            base.OnInit(e);</p>
				<p>        }</p>
				<p>        private void InitializeComponent()<br />        {<br />            this.BOk.Click += new System.EventHandler(this.BOk_Click);//这一行很重要<br />        }<br />        #endregion</p>
				<p>        protected void BOk_Click(object sender, EventArgs e)<br />        {<br />//            this._SearchTxt = this.search_txt.Text;<br />            //this._SearchLX = this.search_lx.SelectedItem.Value;<br />            if (BOkClick != null)<br />                BOkClick(this, e);<br />        }</p>
				<p>        private void showxwxx()//新闻管理模式的界面处理<br />        {<br />            Label1.Visible = false;<br />            search_txt.Visible = true;<br />            search_lx.Visible = true;<br />            search_lx.Items.Clear();<br />            ListItem myitem = new ListItem();<br />            myitem.Text = "标题";<br />            myitem.Value = "1";<br />            search_lx.Items.Add(myitem);<br />            myitem = new ListItem();<br />            myitem.Text = "作者";<br />            myitem.Value = "2";<br />            search_lx.Items.Add(myitem);<br />            search_lx.SelectedIndex = 0;<br />        <br />        }<br />        private void showuser()//操作员模式的界面处理<br />        {<br />            Label1.Visible = false;<br />            search_txt.Visible = true;<br />            search_lx.Visible = true;<br />            search_lx.Items.Clear();<br />            ListItem myitem = new ListItem();<br />            myitem.Text="用户ID";<br />            myitem.Value="1";<br />            search_lx.Items.Add(myitem);<br />            myitem = new ListItem();<br />            myitem.Text = "用户名称";<br />            myitem.Value = "2";<br />            search_lx.Items.Add(myitem);<br />            search_lx.SelectedIndex = 0;</p>
				<p>        }</p>
				<p>        private void showmin()//缺省模式的界面处理<br />        {<br />            Label1.Visible = true;<br />            search_txt.Visible = true;<br />            search_lx.Visible = false;<br />            search_lx.Items.Clear();</p>
				<p>
						<br />        }<br />    }<br />}<br />/*用户控件代码结束*/</p>
				<p>
				</p>
				<p>
				</p>
				<p>/*测试页界面开始*/</p>
				<p>&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="SearchBarTest.aspx.cs" Inherits="Control_SearchBarTest" %&gt;</p>
				<p>&lt;%@ Register Src="SearchBar.ascx" TagName="SearchBar" TagPrefix="uc1" %&gt;</p>
				<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</p>
				<p>&lt;html xmlns="http://www.w3.org/1999/xhtml" &gt;<br />&lt;head runat="server"&gt;<br />    &lt;title&gt;无标题页&lt;/title&gt;<br />    &lt;link href="../CSS/system.css" _fcksavedurl=""../CSS/system.css"" _fcksavedurl=""../CSS/system.css"" _fcksavedurl=""../CSS/system.css"" rel="stylesheet" type="text/css" /&gt;<br />    <br />    &lt;link href="../CSS/searchbar.css" rel="stylesheet" type="text/css" /&gt;    <br />&lt;/head&gt;<br />&lt;body&gt;<br />    &lt;form id="form1" runat="server"&gt;<br />    &lt;div&gt;<br />        &lt;uc1:SearchBar ID="SearchBar1" runat="server" BarType="usertype" /&gt;<br />        &lt;asp:Label ID="Label1" runat="server" Text="查询结果"&gt;&lt;/asp:Label&gt;&lt;br /&gt;<br />        &lt;asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="缺省" /&gt;<br />        &lt;asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="操作员界面" /&gt;<br />        &lt;asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="新闻管理界面" /&gt;<br />        &lt;asp:Button ID="Button4" runat="server" OnClick="Button4_Click" Text="隐藏下拉框" /&gt;&lt;/div&gt;<br />        &lt;br /&gt;<br />    &lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />/*测试页界面结束*/</p>
				<p>/*测试页代码开始*/</p>
				<p>using System;<br />using System.Data;<br />using System.Configuration;<br />using System.Collections;<br />using System.Web;<br />using System.Web.Security;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.WebControls.WebParts;<br />using System.Web.UI.HtmlControls;<br />using MY.UC;</p>
				<p>public partial class Control_SearchBarTest : System.Web.UI.Page<br />{<br />    protected void Page_Load(object sender, EventArgs e)<br />    {</p>
				<p>    }</p>
				<p>    #region web 窗体设计器生成的代码<br />    override protected void OnInit(EventArgs e)<br />    {<br />        InitializeComponent();<br />        base.OnInit(e);<br />    }</p>
				<p>    private void InitializeComponent()<br />    {<br />        //注册查询条的按钮事件<br />        this.SearchBar1.BOkClick += new BOkClickHandler(this.SearchBar1_BOkClick);</p>
				<p>    }<br />    #endregion</p>
				<p>    protected void SearchBar1_BOkClick(object sender, EventArgs e)<br />    {<br />        //查询按钮事件<br />        Label1.Text = "查询内容："+this.SearchBar1.SearchTxt +"  选择列表:"+ this.SearchBar1.SearchLX;</p>
				<p>    }<br />    protected void Button1_Click(object sender, EventArgs e)<br />    {<br />        this.SearchBar1.BarType = EBarType.mintype;<br />    }</p>
				<p>    protected void Button2_Click(object sender, EventArgs e)<br />    {<br />        this.SearchBar1.BarType = EBarType.usertype;<br />    }</p>
				<p>    protected void Button3_Click(object sender, EventArgs e)<br />    {<br />        this.SearchBar1.BarType = EBarType.xwxxtype;<br />    }</p>
				<p>    protected void Button4_Click(object sender, EventArgs e)<br />    {<br />        this.SearchBar1.LXVisible = false;<br />    }<br />}</p>
				<p>
						<br />/*测试页代码结束*/</p>
		</div><img src ="http://www.blogjava.net/yeiwei/aggbug/105750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:35 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在ASP.NET中插入flash</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105749.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105749.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105749.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105749.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105749.html</trackback:ping><description><![CDATA[<strong>
				<div class="con_all">
						<p>
						</p>
						<p>学asp。net的同学可能还在疑问是否能播放动画，其实在asp。net中的swf格式的播放和在html中是一样的</p>
						<p>你只需要在asp。net中的界面中的&lt;html&gt;和&lt;/html&gt;中插入下边的</p>
						<p>代码就行了 <br />  &lt;div   align="center"&gt;   <br />    <br />  &lt;!----------------------以下代码用来显示flash-------------------------&gt;   <br />    <br />    &lt;object   classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"   codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"   width="150"   height="280"&gt;   <br />    <br />    &lt;param   name="movie"       value="你的swf格式的地址"&gt;   <br />    <br />    &lt;!----   上value值填入flash的地址，你的flash在本机上就用相对地址!----&gt;   <br />                                                                                                          <br />    &lt;param   name="quality"   value="high"&gt;   <br />    <br />    &lt;param   name="SCALE"   value="exactfit"&gt;   <br />                                                                                <br />    &lt;!----   下src值填入和刚才一样的地址!----&gt;           <br />                      <br />    &lt;embed   src="你的swf格式的地址"   width="150"   height="280"   quality="high"   pluginspage="http://www.macromedia.com/go/getflashplayer"   type="application/x-shockwave-flash"   scale="exactfit"&gt;&lt;/embed&gt;   <br />                                                                                                        <br />  &lt;/object&gt;   <br />    <br />  &lt;!----------------------显示flash代码结束------------------------&gt;   <br />    <br />  &lt;/div&gt;   <br />就ok啦 <br /></p>
						<p>
						</p>
				</div>
		</strong><img src ="http://www.blogjava.net/yeiwei/aggbug/105749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:34 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>net开发趣题两则-联想优秀程序员与专业程序员（downmoon).net</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105748.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105748.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105748.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105748.html</trackback:ping><description><![CDATA[<div class="con_sample">
				<p>从以下的问题可以看出：真正写代码的人往往跳入代码中自娱自乐而不自知，却忘记了思考问题的本质，这可能就是优秀程序员与所谓的专业程序员最大的不同，</p>
		</div>
		<div class="con_all">
				<p>
				</p>
				<style type="text/css"><![CDATA[
.lineBorderBlue1 
{ 
	
	BORDER-TOP: #999999 1px groove; 
	BORDER-BOTTOM: #999999 1px groove;
	BORDER-LEFT: #999999 1px groove; 
	BORDER-RIGHT: #999999 1px groove;  
	background-color:#efefef;
}
]]&gt;</style>
一、月薪上万的net开发人员问题：<br />有一队伍长１００米，匀速前进，传令兵以匀速从队首运动到队尾然后返回队首，其间队伍前进了１００米，问传令兵运动的距离。<br />假设总共花了100秒, 队伍的速度则为1; V为传令兵速度, 传令兵到队尾的距离为S。<br />则总共走 100 M + 2 * S。<br />---------------------------<br />传令兵走S，则此时部队走100-S；传令兵到尾部。<br />往前走，路程为100+S，而部队刚才走了100-S，则此时当走100-（100-S） = S<br />时间相同。<br />则有<br />S / （100+S ）= （100-S） /S<br />=&gt; S^2 = 10000 -S^2<br />=&gt; S^2 = 5000;<br />=&gt; S = 70.71067811865475244008443621049 <br />=&gt;CLOSE<br />开方函数在Math命名空间里有。<br />也可自己迭代出来。<br />二、月薪5万，微软中国研究院最新面试题，<br />小明和小强都是张老师的学生，张老师的生日是M月N日，<br />2人都知道张老师的生日是下列10组中的一天，<br />张老师把M值告诉了小明，把N值告诉了小强，<br />张老师问他们知道他的生日是那一天吗？<br />3月4日 3月5日 3月8日<br />6月4日 6月7日<br />9月1日 9月5日<br />12月1日 12月2日 12月8日<br />小明说：如果我不知道的话，小强肯定也不知道<br />小强说：本来我也不知道，但是现在我知道了<br />小明说：哦，那我也知道了<br />请根据以上对话推断出张老师的生日是哪一天<br /><br />理由：<br />1. 小明说：如果我不知道的话，小强肯定也不知道，  那么：6月7日和 12月2日 就被剔除<br />2. 小明说：如果我不知道的话，小强肯定也不知道＋小强说：本来我也不知道，但是现在我知道了<br />那么：只有6月4日是唯一确定的</div><img src ="http://www.blogjava.net/yeiwei/aggbug/105748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:33 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax.net使用初体验</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105746.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105746.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105746.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105746.html</trackback:ping><description><![CDATA[<p>AJAX在去年已经接触过，但都是使用手动的方法编写客户端代码，再加上被请求的页面，感觉非常累，虽然早听说过AJAX.NET和其他一些第3方开发的框架，却一直没有时间来体验。今天干完手上的活，下了个最新版本的AJAX.NET体验了下<br /><br />我使用的还是VS2003，下载了个最新版本的AJAX.NET 6.4.5.1，下载地址：www.schwarz-interactive.de 下面说说使用方法：<br /><br />1、准备工作<br />新建项目，使用.NET1.1就引用下载下来的AJAX.NET的类库AjaxPro.dll，如果是使用.NET2.0 就引用AjaxPro2.dll<br />首先修改WEB.CONFIG文件<br /><span style="FONT-SIZE: 9pt"> 在<span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">system.web</span><span style="COLOR: blue">&gt; 节点内增加<br /></span></span><span style="FONT-SIZE: 9pt; COLOR: blue"><br />&lt;</span><span style="FONT-SIZE: 9pt; COLOR: maroon">httpHandlers</span><span style="FONT-SIZE: 9pt; COLOR: blue">&gt;<br /></span><span style="FONT-SIZE: 9pt">     <span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">add</span><span style="COLOR: red">verb</span><span style="COLOR: blue">="*"</span><span style="COLOR: red">path</span><span style="COLOR: blue">="*.ashx"</span><span style="COLOR: red">type</span><span style="COLOR: blue">="AjaxPro.AjaxHandlerFactory,AjaxPro"/&gt;<br /></span></span><span style="FONT-SIZE: 9pt; COLOR: blue">&lt;/</span><span style="FONT-SIZE: 9pt; COLOR: maroon">httpHandlers</span><span style="FONT-SIZE: 9pt; COLOR: blue">&gt;</span></p>
		<span style="FONT-SIZE: 9pt; COLOR: blue">
				<div>
						<br />2、然后在Page_Load事件中注册页面类<br />如我将使用AJAX的页面类名为‘AjaxControls’，注册语句就这样写：<br />      <br />AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxControls));<br /><br />红字的地方是我的页面的类名 
<div>这句的作用实际上是在页面被请求的时候生成几句调用JS的SCRIPT代码<br /></div><div><br />3、编写服务器端处理函数<br /><div align="left"><span style="FONT-SIZE: 9pt">        如：<br />         [AjaxPro.AjaxMethod]</span></div><div align="left"><span style="FONT-SIZE: 9pt">         <span style="COLOR: blue">public</span><span style="COLOR: blue">string</span> Fun(<span style="COLOR: blue">string</span> str) </span></div><div align="left"><span style="FONT-SIZE: 9pt">         {</span></div><div align="left"><span style="FONT-SIZE: 9pt">              <span style="COLOR: blue">return</span> str;</span></div><div><span style="FONT-SIZE: 9pt">         }<br /><br />‘[AjaxPro.AjaxMethod]’这句是关键，函数或方法写法没什么特别的地方，只是要使用这句声明这个函数是由AJAX.NET在页面异步请求的，总之记住要通过AJAX获得数据的后台函数就使用[AjaxPro.AjaxMethod]来声明一下。<br /></span></div><div><span style="FONT-SIZE: 9pt">另外，在AJAX.NET中如果处理函数需要对SESSION进行操作，‘[AjaxPro.AjaxMethod]’需要改成‘[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]’在 [AjaxPro.AjaxMethod(AjaxPro.……)]  的‘…… ’部分ajax.net还提供了其他很多方法，可以处理一些特殊的请求。</span></div><div><span style="FONT-SIZE: 9pt"></span></div><div><span style="FONT-SIZE: 9pt"></span></div><div><span style="FONT-SIZE: 9pt">还有一点注意，如果使用Application，直接读取或写入Application也是不行的，需要使用HttpContext.Current.Application，同样对 Request的访问也需要使用HttpContext.Current.Request。原因是直接使用的Application 或Request等 都是由Page类继承下来的，而用Ajax.net对后台方法访问的时候，这些方法并不属于Page类。但是Session比较特殊，使用 HttpContext.Current.Session仍然不能访问，必须使用上面一段所用的方法并且直接就用Session就行。</span></div><div><span style="FONT-SIZE: 9pt"><br /></span><div><span style="FONT-SIZE: 9pt"></span></div><div><span style="FONT-SIZE: 9pt">4、客户端代码</span></div><div><span style="FONT-SIZE: 9pt">在我的这个示例中，使用‘Ajax.AjaxControls.Fun("测试用的传递的字符串参数");’请求后台的函数，然后返回一个OBJECT对象，这个OBJECT的VALUE属性就可以得到后台函数的返回值</span></div><div><span style="FONT-SIZE: 9pt">如：<br /></span></div><div><span style="FONT-SIZE: 9pt"><div>function doTest() </div><div>{ </div><div>var getobject = Ajax.AjaxControls.Fun("测试用的传递的字符串参数"); </div><div>alert(getobject.value); </div><div>}<br /></div><div></div><div>Ajax 是我这个项目的命名空间</div><div>AjaxControls 是我这个页面的的类名</div><div>Fun 很明显就是声明了的那个AJAX可调用的方法名</div><div>()中的参数也就是我的Fun函数所需要的参数</div><div>doTest() 只是一个客户段的函数，可以绑到控件的事件中，也可以已不用事件，随便怎么处理</div><div></div><div></div><div>客户端异步请求这个函数所得到的和平时我们用函数返回的稍微不同的就是，平时直接得到函数类型的返回值，而使用AJAX.NET客户端异步请求后台函数得到的是个OBJECT，要通过这个OBJECT的VALUE属性才能得到函数返回的值。</div><div></div><div></div><div>通常这里的客户段脚本还可以这样写：</div><div><span style="FONT-SIZE: 9pt">  
<div>function doTest() </div><div>{ </div><div>Ajax.AjaxControls.Fun("测试用的传递的字符串参数",getdata); </div><div>}</div><div></div><div>function getdata(rv)</div><div>{</div><div>    alert(rv.value);</div><div>}<br /><br /></div></span></div><div></div><div>Ajax.AjaxControls.Fun 中的参数除了对应后台函数的参数外，最后可以使用一个表达式参数，这个参数是某个客户段函数名，设置后，Ajax.AjaxControls.Fun请求后所获得OBJECT对象将被做为 表达式参数函数的一个参数传递到该函数中，然后通过这个OBJECT参数的VALUE就可以获得 AJAX请求后台函数所返回的值了</div><div></div><div>通过这几个步骤 就可以做出一个简单的使用Ajax.net结合.NET的示例页面了。</div><div></div><div></div><div></div><div></div></span></div><div><span style="FONT-SIZE: 9pt"></span><br />下面说说用后的感受：</div><div>总体感觉上使用起来很方便，很简单，但是功能不够强大，也许是我初次涉及的缘故，还没摸索出更高级的使用方法，但是在对服务器控件的控制上基本不能实现，需要使用其他方法如获得控件输出样式，然后通过客户端方法加载，还有除了能异步的获得后台请求的函数或方法的返回值之外，其他更具体复杂的操作都需要手动的写代码解决，不过确实是不错的东西，可以很快速的完成某些AJAX的效果。也许还有很多更强大的功能我还没摸索到，希望大家指教</div></div></div></div>
		</span><img src ="http://www.blogjava.net/yeiwei/aggbug/105746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:32 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的webservice开发例子</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105742.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105742.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105742.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105742.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105742.html</trackback:ping><description><![CDATA[<p>简单的webservice开发例子</p>
		<p>Axis支持三种web  service的部署和开发，分别为：  <br /> <br />1、Dynamic  Invocation  Interface  (  DII)  <br /> <br />2、Stubs方式  <br /> <br />3、Dynamic  Proxy方式  <br /> <br />二、编写DII(Dynamic  Invocation  Interface  )方式web服务  <br /> <br />1.编写服务端程序HelloClient  <br /> <br /> <br />public  class  HelloClient  <br />{  <br />       public  String  getName(String  name)  <br />       {  <br />               return  "hello  "+name;  <br />       }  <br />}  <br />   <br /> <br /> <br /> <br />2、将源码拷贝到Axis_HOME下，重命名为  HelloClient.jws    <br /> <br />3、访问连接http://localhost:8080/Axis/HelloClient.jws?wsdl，页面显示Axis自动生成的wsdl    <br /> <br />4、编写访问服务的客户端  TestHelloClient.java    <br /> <br /> <br />import  org.apache.Axis.client.Call;  <br />import  org.apache.Axis.client.Service;  <br />import  javax.xml.namespace.QName;  <br />import  javax.xml.rpc.ServiceException;  <br />import  java.net.MalformedURLException;  <br />import  java.rmi.RemoteException;  <br /> <br />public  class  SayHelloClient2  <br />{  <br />       public  static  void  main(String[]  args)  <br />           {  <br />               try  <br />                       {  <br />   String  endpoint  =  <br />   "http://localhost:8080/Axis/HelloClient.jws";  <br /> <br />       Service  service  =  new  Service();  <br />                       Call  call  =  null;  <br /> <br />                       call  =  (Call)  service.createCall();  <br /> <br />                       call.setOperationName(new  QName(  <br />                             "http://localhost:8080/Axis/HelloClient.jws",    <br />                                         "getName"));  <br />                       call.setTargetEndpointAddress  <br />                                   (new  java.net.URL(endpoint));  <br /> <br />                       String  ret  =  (String)  call.invoke(new  Object[]    <br />                                   {"zhangsan"});  <br />                       System.out.println("return  value  is  "  +  ret);  <br />               }    <br />                       catch  (Exception  ex)  <br />                       {  <br />             ex.printStackTrace();  <br />               }  <br />       }  <br />}  <br />   <br /> <br /> <br /> <br />三、编写Dynamic  Proxy方式访问服务    <br /> <br />1、编写部署服务端程序，同上边DII方式，本次仍使用上边部署的HelloClient    <br /> <br />2、编写代理接口    <br /> <br /> <br />public  interface  HelloClientInterface  <br />extends  java.rmi.Remote  <br />{  <br />       public  String  getName(String  name)  <br />           throws  java.rmi.RemoteException;  <br />}  <br />   <br /> <br /> <br /> <br />3、编写并执行客户端程序TestHelloClient.java    <br /> <br /> <br />import  javax.xml.rpc.Service;  <br />import  javax.xml.rpc.ServiceFactory;  <br />import  java.net.URL;  <br />import  javax.xml.namespace.QName;  <br /> <br />public  class  TestHelloClient    <br />{  <br />       public  static  void  main(String[]  args)  <br />           {  <br />               try  <br />               {  <br />                       String  wsdlUrl  =    <br />                                   "http://localhost:8080/Axis/HelloClient.jws?wsdl";  <br />                       String  nameSpaceUri  =    <br />                                   "http://localhost:8080/Axis/HelloClient.jws";  <br />                       String  serviceName  =  "HelloClientService";  <br />                       String  portName  =  "HelloClient";  <br /> <br />                       ServiceFactory  serviceFactory  =    <br />                                   ServiceFactory.newInstance();  <br />                       Service  afService  =  <br />                                   serviceFactory.createService(new  URL(wsdlUrl),  <br />                 new  QName(nameSpaceUri,  serviceName));  <br />                       HelloClientInterface  proxy  =  (HelloClientInterface)  <br />               afService.getPort(new  QName(  <br />                                       nameSpaceUri,  portName),    <br />                                                           HelloClientInterface.class);  <br />                       System.out.println  <br />                                   ("return  value  is  "+proxy.getName("john")  )  ;  <br />               }catch(Exception  ex)  <br />               {  <br />                       ex.printStackTrace()  ;  <br />               }  <br />       }  <br />}  <br />   <br /> <br /> <br /> <br />四、编写wsdd发布web服务，编写stub  client访问web服务    <br /> <br />1、编写服务端程序server,SayHello.java，编译server.SayHello.java    <br /> <br /> <br />package  server;  <br />public  class  SayHello  <br />{  <br />       public  String  getName(String  name)  <br />       {  <br />               return  "hello  "+name;  <br />       }  <br />}  <br />2.编写LogHandler.java  <br />import  org.apache.Axis.AxisFault;  <br />import  org.apache.Axis.Handler;  <br />import  org.apache.Axis.MessageContext;  <br />import  org.apache.Axis.handlers.BasicHandler;  <br /> <br />import  java.util.Date;  <br /> <br />public  class  LogHandler    <br />extends  BasicHandler    <br />{  <br /> public  void  invoke  <br />(MessageContext  msgContext)    <br />throws  AxisFault  <br />       {  <br />               /**  Log  an  access  each  time    <br />                       we  get  invoked.  <br />                 */  <br />               try  {  <br />                       Handler  serviceHandler  <br />                                   =  msgContext.getService();  <br /> <br />                       Integer  numAccesses  =  <br />   (Integer)serviceHandler.getOption("accesses");  <br />                       if  (numAccesses  ==  null)  <br />                               numAccesses  =  new  Integer(0);  <br />numAccesses  =  new  Integer  <br />(numAccesses.intValue()  +  1);  <br />Date  date  =  new  Date();  <br /> String  result  =    <br /> date  +  ":  service  "  +  <br />msgContext.getTargetService()  +  <br />"  accessed  "  +  numAccesses  +  "  time(s).";  <br />serviceHandler.setOption  <br />("accesses",  numAccesses);  <br />System.out.println(result);  <br />               }  catch  (Exception  e)  <br />                       {  <br />                       throw  AxisFault.makeFault(e);  <br />               }  <br />       }  <br />}  <br />   <br /> <br /> <br /> <br />3、编写wsdd文件    <br /> <br /> <br />deploy.wsdd  <br />&lt;deployment  xmlns=  <br />"http://xml.apache.org/Axis/wsdd/"  <br />   xmlns:java=  <br />                                   "http://xml.apache.org/Axis/wsdd/providers/java"&gt;                        <br />     &lt;handler  name="print"  type="java:LogHandler"/&gt;    <br /> &lt;service  name="sayhello"  <br /> provider="java:RPC"&gt;  <br />     &lt;requestFlow&gt;  <br />         &lt;handler  type="print"/&gt;  <br />     &lt;/requestFlow&gt;  <br />   &lt;parameter  name="className"    <br />   value="server.SayHello"/&gt;  <br />   &lt;parameter  name="allowedMethods"  <br />   value="*"/&gt;      <br /> &lt;/service&gt;  <br />&lt;/deployment&gt;  <br />   <br /> <br /> <br /> <br />3、将编译后的文件拷贝到Axis_HOME/WEB-INF/classes下，如：D:\tomcat\webapps\Axis\WEB-INF\classes    <br /> <br />4、发布服务：    <br /> <br />java  org.apache.Axis.client.AdminClient  deploy.wsdd    <br /> <br />5、生成client  stub文件    <br /> <br />a:方式1    <br /> <br />将SayHello.java拷贝到Axis_HOME/下，重命名为SayHello.jws，    <br /> <br />执行下面的命令生存client  stub    <br /> <br /> <br />java  org.apache.Axis.wsdl.WSDL2Java    <br />-p  client    http://localhost:8080  <br />/Axis/services/SayHello.jws?wsdl  <br />   <br /> <br /> <br /> <br />b:方式2    <br /> <br />执行如下命令生成SayHello.wsdl    <br /> <br /> <br />java  org.apache.Axis.wsdl.Java2WSDL  <br />-oSayHello.wsdl  -lhttp://localhost:8080  <br />/Axis/services/SayHello  -nsayhello  server.SayHello  <br />   <br /> <br /> <br /> <br />执行如下命令生成client  stub    <br /> <br /> <br />java  org.apache.Axis.wsdl.WSDL2Java    <br />SayHello.wsdl    -p  client  <br />   <br /> <br /> <br /> <br />生成的stub  client文件列表为：    <br /> <br />1.SayHello.java    <br /> <br />2.SayHelloService.java。    <br /> <br />3.SayHelloServiceLocator.java    <br /> <br />4.SayHelloSoapBindingStub.java    <br /> <br />6、编写客户端程序，编译并执行    <br /> <br /> <br />public  class  SayHelloClient  <br />{  <br />       public  static  void  main(String[]  args)  <br />           {  <br />               try  <br />                       {  <br />       SayHelloService  service  =  new  client.  <br />             SayHelloServiceLocator();  <br />                   client.SayHello_PortType    <br />                           client  =  service.getSayHello();  <br />                       String  retValue=client.getName("zhangsan");  <br />                       System.out.println(retValue);  <br />}    <br />catch  (Exception  e)  <br />{  <br /> System.err.println  <br /> ("Execution  failed.  Exception:  "  +  e);  <br />               }  <br />       }  <br />}  <br /></p><img src ="http://www.blogjava.net/yeiwei/aggbug/105742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:30 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService初探（推荐）</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105744.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105744.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105744.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105744.html</trackback:ping><description><![CDATA[Web Service初探（推荐）&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />简介&lt;br&gt; <br />&lt;br&gt; <br />回顾过去的六年，难以想象如果没有互联网的话，网络计算会变成什么样。更早的超文本模式失败了，而互联网成功了，这其中最基本的原因可以归结为：互联网简单且无处不在。从服务提供者（如网上商店）的角度来看，只要你会打字，你就可以接受服务。从服务API的角度来看，互联网上绝大多数的活动都可以由三种方法（GET, POST, 和PUT ） 以及一种标记语言来完成。Web Service的兴起正是基于这样一个事实：Web不仅可以作为一个信息平台 ，也可以作为一个服务平台。 &lt;br&gt; <br />这里的“Services”不是指Amazon.com提供的那种粗糙的服务，而是一种组件服务，其他人可以用来构造更强大的服务。例如，Microsoft提供了Passport服务，提供Web上的认证功能，所以，类似华盛顿邮报之类的电子报纸就不必自己开发认证服务，只要交给Passport做就可以了。当然，这只是一个假设。&lt;br&gt; <br />&lt;br&gt; <br />Oracle的动态服务白皮书（dynamic services whitepaper）提供了更多组件服务的例子：汇率转换，翻译，货物运输等等。IBM对Web Service有一个更为正式的定义：&lt;br&gt; <br />&lt;br&gt; <br />Web ervices 是一种新的web应用程序分支，他们是自包含、自描述、模块化的应用，可以发布、定位、通过web调用。Web service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后，其他web services应用程序可以发现并调用它部署的服务。&lt;br&gt; <br />&lt;br&gt; <br />IBM的Web Service指南接着说在几年前Web Service还是一个效率低下无法引起人们兴趣的概念。但是随着带宽和存储变的更为便宜，内容更为动态化，对不同平台上广泛而多样的计算设备的集成的要求也更为强烈，同时，也使得人们对代价（带宽和存储）不那么敏感。&lt;br&gt; <br />&lt;br&gt; <br />当我已经有了我中意的中间件平台（RMI, Jini, CORBA, DCOM 等等)时，为什么还要为Web而烦恼呢？中间件确实提供了强大的服务实现手段，但是，他们当中没有一个是绝对的胜利者。Web作为信息发布者的力量就在于简单且无处不在，这对解决现在这样一个分裂中间件世界很重要。Web通过在传统中间件平台上更有效实现的Services，来提供一个统一且广泛适用的接口，这样就改善了这个平台。&lt;br&gt; <br />&lt;br&gt; <br />从一个N层应用程序结构的角度来看，web service只是一个方便程序访问的包装，服务还是要靠中间件来实现。访问包括服务请求处理（监听者）和一个支持商业逻辑操作的接口，商业逻辑本身是由传统的中间件平台实现的。&lt;br&gt; <br />&lt;br&gt; <br />Web Services平台&lt;br&gt; <br />&lt;br&gt; <br />那么什么是web service 平台呢？最基本的平台是XML加HTTP。HTTP是一个在Internet上广泛使用的协议。XML是一种元语言，你可以用它书写特定的语言来描述客户和服务之间或者组件和复杂服务之间的交互。在web server之后，XML格式的消息被转变成中间件的请求，返回的结果也会转化成XML格式。 &lt;br&gt; <br />&lt;br&gt; <br />你可能会问，这与说CORBA是IDL加上RPC不是一样吗？这个平台到底如何支持service的发现，事务，安全，认证等等基本功能，以使它真正成为一个平台呢? 下面我们将讲述这一点。 &lt;br&gt; <br />&lt;br&gt; <br />有必要增加一些服务，同时保持简单性和普遍性，来把Web构建成一个功能更强大的平台。可以认为功能全面的web services平台是XML＋HTTP＋SOAP＋WSDL＋UDDI。在更高层次上，可能还要加上一些尚未广泛接受的技术如XAML,XLANG, XKMS,和XFS。&lt;br&gt; <br />&lt;br&gt; <br />以下是对这些平台要素的简要描述。需要指出的是，这些还是发展中的技术，很多时候对一个问题会有多种解决方案。&lt;br&gt; <br />&lt;br&gt; <br />SOAP (远程调用) &lt;br&gt; <br />UDDI (贸易，目录服务) &lt;br&gt; <br />WSDL (描述服务特征) &lt;br&gt; <br />XLANG/XAML (为包括多种web services的复杂web事务提供支持） &lt;br&gt; <br />XKMS (XML Key Management Specification) - 支持认证和注册，这个工作还在进展之中 &lt;br&gt; <br />&lt;br&gt; <br />SOAP&lt;br&gt; <br />&lt;br&gt; <br />SOAP是一个协议规范，定义了传递XML-encoded数据时的统一方式。它还定义了使用HTTP作为底层通信协议时执行远程调用（RPC）的方法。&lt;br&gt; <br />&lt;br&gt; <br />SOAP的兴起是基于这样一种认识，无论现在的中间件是如何的好，他们都需要一个WAN包装。以XML格式发送消息有很多好处，如能够确保互用性。中间件使用者看来愿意容忍解析和序列化XML文档的代价，因为这可以让他们的软件使用范围更宽。&lt;br&gt; <br />&lt;br&gt; <br />IBM, Microsoft, UserLand,和DevelopMentor在2000年向W3C提交了SOAP，并成为W3C的Note，SOAP更长远的发展规划现在是由W3C的XML协议工作组来制定。这有力的表明了直到W3C工作组交付规范为止，SOAP都将是一个稳定的规范。&lt;br&gt; <br />&lt;br&gt; <br />UDDI (Universal Description, Discovery and Integration Service)&lt;br&gt; <br />&lt;br&gt; <br />UDDI为客户提供了动态查找其它web &lt;br&gt; <br />&lt;br&gt; <br />services的机制。使用UDDI接口，商务处理可以动态的连接到外部的商务合作者提供的服务上。一个UDDI注册类似于CORBA的trader，也可以把它想象成商业应用程序的DNS服务。一个UDDI注册有两种客户：要发布一个服务（和使用接口）的商务应用，以及想要得到特定服务的客户。下表是UDDI提供服务的概述。UDDI层在SOAP层之上，并假定请求和应答都是以SOAP消息传送的UDDI对象。下面还包含了一个简单的查询。&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />关于支持全方位的发现（full-featured discovery），UDDI没有一个近期的计划。UDDI希望能够成为支持其它标准的更高层服务的基础。UDDI计划支持更复杂的商务逻辑，包括层次型商业组织。UDDI有着广泛的支持，IBM, Ariba,和 &lt;br&gt; <br />&lt;br&gt; <br />Microsoft都全力推动它。到目前为止，它还不是一个开放的标准。&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />UDDI 举例&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />查询：下面在SOAP封装之内的查询，返回Microsoft的详细信息。&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;find_business &lt;br&gt; <br />&lt;br&gt; <br />generic=&amp;quot;1.0&amp;quot; xmlns=&amp;quot;urn:uddi-org:api&amp;quot;&amp;gt; &lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />face=Arial,Helvetica&amp;gt; &lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;name&amp;gt;Microsoft&amp;lt;/name&amp;gt; &lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />face=Arial,Helvetica&amp;gt;&amp;lt;/find_business&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />结果：businessInfo元素中包含了Microsoft注册的服务信息，也包括这个UDDI服务本身。&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;businessList generic=&amp;quot;1.0&amp;quot;&lt;br&gt; <br />operator=&amp;quot;Microsoft Corporation&amp;quot;&lt;br&gt; <br />truncated=&amp;quot;false&amp;quot;&lt;br&gt; <br />xmlns=&amp;quot;urn:uddi-org:api&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;businessInfos&amp;gt;&lt;br&gt; <br />&amp;lt;businessInfo&lt;br&gt; <br />businessKey=&amp;quot;0076B468-EB27-42E5-AC09-9955CFF462A3&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;name&amp;gt;Microsoft Corporation&amp;lt;/name&amp;gt;&lt;br&gt; <br />&amp;lt;description xml:lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br&gt; <br />Empowering people through great software -&lt;br&gt; <br />any time, any place and on any device is Microsoft’s &lt;br&gt; <br />vision. As the worldwide leader in software for personal&lt;br&gt; <br />and business computing, we strive to produce innovative &lt;br&gt; <br />products and services that meet our customer’s&lt;br&gt; <br />&amp;lt;/description&amp;gt;&lt;br&gt; <br />&amp;lt;serviceInfos&amp;gt;&lt;br&gt; <br />&amp;lt;serviceInfo&lt;br&gt; <br />businessKey=&amp;quot;0076B468-EB27-42E5-AC09-9955CFF462A3&amp;quot; &lt;br&gt; <br />serviceKey=&amp;quot;1FFE1F71-2AF3-45FB-B788-09AF7FF151A4&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;name&amp;gt;Web services for smart searching&amp;lt;/name&amp;gt;&lt;br&gt; <br />&amp;lt;/serviceInfo&amp;gt;&lt;br&gt; <br />&amp;lt;serviceInfo&lt;br&gt; <br />businessKey=&amp;quot;0076B468-EB27-42E5-AC09-9955CFF462A3&amp;quot;&lt;br&gt; <br />serviceKey=&amp;quot;8BF2F51F-8ED4-43FE-B665-38D8205D1333&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;name&amp;gt;Electronic Business Integration Services&amp;lt;/name&amp;gt;&lt;br&gt; <br />&amp;lt;/serviceInfo&amp;gt;&lt;br&gt; <br />&amp;lt;serviceInfo&lt;br&gt; <br />businessKey=&amp;quot;0076B468-EB27-42E5-AC09-9955CFF462A3&amp;quot;&lt;br&gt; <br />serviceKey=&amp;quot;611C5867-384E-4FFD-B49C-28F93A7B4F9B&amp;quot;&amp;gt; &lt;br&gt; <br />&amp;lt;name&amp;gt;Volume Licensing Select Program&amp;lt;/name&amp;gt; &lt;br&gt; <br />&amp;lt;/serviceInfo&amp;gt;&lt;br&gt; <br />&amp;lt;serviceInfo&lt;br&gt; <br />businessKey=&amp;quot;0076B468-EB27-42E5-AC09-9955CFF462A3&amp;quot;&lt;br&gt; <br />serviceKey=&amp;quot;A8E4999A-21A3-47FA-802E-EE50A88B266F&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;name&amp;gt;UDDI Web Sites&amp;lt;/name&amp;gt;&lt;br&gt; <br />&amp;lt;/serviceInfo&amp;gt; &lt;br&gt; <br />&amp;lt;/serviceInfos&amp;gt;&lt;br&gt; <br />&amp;lt;/businessInfo&amp;gt;&lt;br&gt; <br />&amp;lt;/businessInfos&amp;gt;&lt;br&gt; <br />&amp;lt;/businessList&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />WSDL ：Web服务定义语言&lt;br&gt; <br />&lt;br&gt; <br />WSDL为服务提供者提供了描述构建在不同协议或编码方式之上的web &lt;br&gt; <br />&lt;br&gt; <br />service请求基本格式的方法。WSDL用来描述一个web &lt;br&gt; <br />&lt;br&gt; <br />service能做什么，它的位置在哪里，如何调用它等等。在假定以SOAP/HTTP/MIME &lt;br&gt; <br />&lt;br&gt; <br />作为远程对象调用机制的情况下，WSDL会发挥最大作用。UDDI注册描述了web &lt;br&gt; <br />&lt;br&gt; <br />service的绝大多数方面，包括服务的绑定细节。WSDL可以看作是UDDI服务描述的子集。&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />WSDL将服务定义为一个网络端点的集合，或者说端口的集合。在WSDL里面，端点及消息的抽象定义与它们具体的网络实现和数据格式绑定是分离的。这样就可以重用这些抽象定义：消息，需要交换的数据的抽象描述；端口类型，操作的抽象集合。针对一个特定端口类型的具体协议和数据格式规范构成一个可重用的绑定。一个端口定义成网络地址和可重用的绑定的联接，端口的集合定义为服务。因此一个WSDL文档在定义网络服务的时候使用如下的元素：&lt;br&gt; <br />类型-- &lt;br&gt; <br />&lt;br&gt; <br />使用某种的类型系统（比如XSD）定义数据类型的容器 &lt;br&gt; <br />消息-- 通讯数据抽象的有类型的定义 &lt;br&gt; <br />操作-- &lt;br&gt; <br />&lt;br&gt; <br />服务支持的动作的抽象描述 &lt;br&gt; <br />端口类型-- 一个操作的抽象集合，该操作由一个或多个端点支持 &lt;br&gt; <br />绑定-- &lt;br&gt; <br />&lt;br&gt; <br />针对一个特定端口类型的具体的协议规范和数据格式规范 &lt;br&gt; <br />端口-- 一个单一的端点，定义成一个绑定和一个网络地址的联接 &lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />服务-- 相关的端点的集合 &lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />所以，可以这样说，WSDL给客户提供了一个模板，方便他们描述和绑定服务。&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />下面是一个简单的例子，例子中的服务用来查找Motorala股票的价格。&lt;br&gt; <br />&lt;br&gt; <br />服务描述：&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br&gt; <br />&amp;lt;definitions name=&amp;quot;StockQuote&amp;quot;&lt;br&gt; <br />targetNamespace=&amp;quot;http://example.com/stockquote.wsdl&amp;quot;&lt;br&gt; <br />xmlns:tns=&amp;quot;http://example.com/stockquote.wsdl&amp;quot;&lt;br&gt; <br />xmlns:xsd1=&amp;quot;http://example.com/stockquote.xsd&amp;quot;&lt;br&gt; <br />xmlns:soap=&amp;quot;http://schemas.xmlsoap.org/wsdl/soap/&amp;quot;&lt;br&gt; <br />xmlns=&amp;quot;http://schemas.xmlsoap.org/wsdl/&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;types&amp;gt;&lt;br&gt; <br />&amp;lt;schema targetNamespace=&amp;quot;http://example.com/stockquote.xsd&amp;quot;&lt;br&gt; <br />xmlns=&amp;quot;http://www.w3.org/1999/XMLSchema&amp;quot;&amp;gt; &lt;br&gt; <br />&amp;lt;element name=&amp;quot;TradePriceRequest&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;complexType&amp;gt;&lt;br&gt; <br />&amp;lt;all&amp;gt;&lt;br&gt; <br />&amp;lt;element name=&amp;quot;tickerSymbol&amp;quot; type=&amp;quot;string&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;/all&amp;gt; &lt;br&gt; <br />&amp;lt;/complexType&amp;gt; &lt;br&gt; <br />&amp;lt;/element&amp;gt;&lt;br&gt; <br />&amp;lt;element name=&amp;quot;TradePrice&amp;quot;&amp;gt; &lt;br&gt; <br />&amp;lt;complexType&amp;gt; &lt;br&gt; <br />&amp;lt;all&amp;gt;&lt;br&gt; <br />&amp;lt;element name=&amp;quot;price&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt; &lt;br&gt; <br />&amp;lt;/all&amp;gt; &lt;br&gt; <br />&amp;lt;/complexType&amp;gt; &lt;br&gt; <br />&amp;lt;/element&amp;gt; &lt;br&gt; <br />&amp;lt;/schema&amp;gt;&lt;br&gt; <br />&amp;lt;/types&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;message name=&amp;quot;GetLastTradePriceInput&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;part name=&amp;quot;body&amp;quot; element=&amp;quot;xsd1:TradePrice&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;/message&amp;gt;&lt;br&gt; <br />&amp;lt;message name=&amp;quot;GetLastTradePriceOutput&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;part name=&amp;quot;body&amp;quot; element=&amp;quot;xsd1:TradePriceResult&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;/message&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;portType name=&amp;quot;StockQuotePortType&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;operation name=&amp;quot;GetLastTradePrice&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;input message=&amp;quot;tns:GetLastTradePriceInput&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;output message=&amp;quot;tns:GetLastTradePriceOutput&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;/operation&amp;gt;&lt;br&gt; <br />&amp;lt;/portType&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;binding name=&amp;quot;StockQuoteSoapBinding&amp;quot;&lt;br&gt; <br />type=&amp;quot;tns:StockQuotePortType&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;soap:binding style=&amp;quot;document&amp;quot;&lt;br&gt; <br />transport=&amp;quot;http://schemas.xmlsoap.org/soap/http&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;operation name=&amp;quot;GetLastTradePrice&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;soap:operation&lt;br&gt; <br />soapAction=&amp;quot;http://example.com/GetLastTradePrice&amp;quot;/&amp;gt; &lt;br&gt; <br />&amp;lt;input&amp;gt;&lt;br&gt; <br />&amp;lt;soap:body use=&amp;quot;literal&amp;quot; &lt;br&gt; <br />namespace=&amp;quot;http://example.com/stockquote.xsd&amp;quot;&lt;br&gt; <br />encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;/input&amp;gt; &lt;br&gt; <br />&amp;lt;output&amp;gt;&lt;br&gt; <br />&amp;lt;soap:body use=&amp;quot;literal&amp;quot; &lt;br&gt; <br />namespace=&amp;quot;http://example.com/stockquote.xsd&amp;quot;&lt;br&gt; <br />encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;/&amp;gt; &lt;br&gt; <br />&amp;lt;/output&amp;gt; &lt;br&gt; <br />&amp;lt;/operation&amp;gt;&lt;br&gt; <br />&amp;lt;/binding&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;service name=&amp;quot;StockQuoteService&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;documentation&amp;gt;My first service&amp;lt;/documentation&amp;gt;&lt;br&gt; <br />&amp;lt;port name=&amp;quot;StockQuotePort&amp;quot; binding=&amp;quot;tns:StockQuoteBinding&amp;quot;&amp;gt; &lt;br&gt; <br />&amp;lt;soap:address location=&amp;quot;http://example.com/stockquote&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;/port&amp;gt;&lt;br&gt; <br />&amp;lt;/service&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;/definitions&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;binding name=&amp;quot;StockQuoteServiceBinding&amp;quot; &lt;br&gt; <br />type=&amp;quot;StockQuoteServiceType&amp;quot;&amp;gt; &lt;br&gt; <br />&amp;lt;soap:binding style=&amp;quot;rpc&amp;quot;&lt;br&gt; <br />transport=&amp;quot;http://schemas.xmlsoap.org/soap/http&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;operation name=&amp;quot;getQuote&amp;quot;&amp;gt; &lt;br&gt; <br />&amp;lt;soap:operation &lt;br&gt; <br />soapAction=&amp;quot;http://www.getquote.com/GetQuote&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;input&amp;gt;&lt;br&gt; <br />&amp;lt;soap:body type=&amp;quot;InMessageRequest&amp;quot;&lt;br&gt; <br />namespace=&amp;quot;urn:live-stock-quotes&amp;quot; &lt;br&gt; <br />encoding=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;/&amp;gt; &lt;br&gt; <br />&amp;lt;/input&amp;gt;&lt;br&gt; <br />&amp;lt;output&amp;gt;&lt;br&gt; <br />&amp;lt;soap:body type=&amp;quot;OutMessageResponse&amp;quot;&lt;br&gt; <br />encoding=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;/output&amp;gt;&lt;br&gt; <br />&amp;lt;/operation&amp;gt; &lt;br&gt; <br />&amp;lt;/binding&amp;gt;&lt;br&gt; <br />&amp;lt;service name=&amp;quot;StockQuoteService&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;documentation&amp;gt;My first service&lt;br&gt; <br />&amp;lt;/documentation&amp;gt;&lt;br&gt; <br />&amp;lt;port name=&amp;quot;StockQuotePort&amp;quot;&lt;br&gt; <br />binding=&amp;quot;tns:StockQuoteBinding&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;soap:address location=&amp;quot;http://example.com/stockquote&amp;quot;/&amp;gt;&lt;br&gt; <br />&amp;lt;/port&amp;gt;&lt;br&gt; <br />&amp;lt;/service&amp;gt;&lt;br&gt; <br />&amp;lt;/definitions&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />SOAP请求：&lt;br&gt; <br />&lt;br&gt; <br />POST /StockQuote HTTP/1.1&lt;br&gt; <br />Host: www.stockquoteserver.com&lt;br&gt; <br />Content-Type: text/xml;&lt;br&gt; <br />charset=&amp;quot;utf-8&amp;quot;&lt;br&gt; <br />Content-Length: nnnn&lt;br&gt; <br />SOAPAction: &amp;quot;Some-URI&amp;quot;&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;SOAP-ENV:Envelope&lt;br&gt; <br />xmlns:SOAP-ENV=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; &lt;br&gt; <br />SOAP-ENV:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt; &lt;br&gt; <br />&amp;lt;SOAP-ENV:Body&amp;gt;&lt;br&gt; <br />&amp;lt;m:GetLastTradePrice&lt;br&gt; <br />xmlns:m=&amp;quot;Some-URI&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;symbol&amp;gt;MOT&amp;lt;/symbol&amp;gt;&lt;br&gt; <br />&amp;lt;/m:GetLastTradePrice&amp;gt; &lt;br&gt; <br />&amp;lt;/SOAP-ENV:Body&amp;gt;&lt;br&gt; <br />&amp;lt;/SOAP-ENV:Envelope&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />SOAP应答：&lt;br&gt; <br />&lt;br&gt; <br />HTTP/1.1 200 OK Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot;&lt;br&gt; <br />Content-Length: nnnn&lt;br&gt; <br />&lt;br&gt; <br />&amp;lt;SOAP-ENV:Envelope&lt;br&gt; <br />xmlns:SOAP-ENV=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br&gt; <br />SOAP-ENV:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;/&amp;gt; &lt;br&gt; <br />&amp;lt;SOAP-ENV:Body&amp;gt;&lt;br&gt; <br />&amp;lt;m:GetLastTradePriceResponse&lt;br&gt; <br />xmlns:m=&amp;quot;Some-URI&amp;quot;&amp;gt;&lt;br&gt; <br />&amp;lt;Price&amp;gt;14.5&amp;lt;/Price&amp;gt;&lt;br&gt; <br />&amp;lt;/m:GetLastTradePriceResponse&amp;gt;&lt;br&gt; <br />&amp;lt;/SOAP-ENV:Body&amp;gt;&lt;br&gt; <br />&amp;lt;/SOAP-ENV:Envelope&amp;gt;&lt;br&gt; <br />&lt;br&gt; <br />XLANG&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />数据库中的事务的传统概念是原子性，即要么不做，要么全做。在分布式的系统中维持这种原子性，一般采用一种代价昂贵的处理方式，即两相承诺。另一个相对优化的模型也在研究之中（最初叫做sagas，由Hector &lt;br&gt; <br />&lt;br&gt; <br />Garcia-Molina提出），即每个动作都有一个明确的互补动作，用以取消该动作产生的结果。在现实生活中，这种互补动作的例子很多，比如说，你在信用卡里取出$52，互补动作就是存入$52，你发出一封Email说“你将会在7天内拿到你预定的产品”，互补动作就是发Email说“哦，你还得多等几天”。XLang就是基于这样一个概念，用来表示任何要取消的请求的互补动作。而Web &lt;br&gt; <br />&lt;br&gt; <br />Service的分布式基础将推动XLang规范的发展，使之能完成复杂的撤销操作。 &lt;br&gt; <br />&lt;br&gt; <br />XAML&lt;br&gt; <br />&lt;br&gt; <br />Transaction Authority Markup Language (XAML)提供了传统的两相承诺事务语义。在XAML规范中有一个B2B事务的例子。XAML不完全局限于两相承诺，某些操作也可以象XLang一样有互补动作。两相承诺在企业集成中显然是很有效的，而大量的web事务（如B2C事务）在更便宜的互补动作模型中可以完成。除非XAML把互补动作放在第一位，否则还是XLang存在的的理由更充分。&lt;br&gt; <br />&lt;br&gt; <br />Scenario&lt;br&gt; <br />&lt;br&gt; <br />下面的场景演示了一个商业事务，包括一批web service，并将利用XAML。考虑一家公司在网上向一家化工厂购买苯。为了让买家能够购买，卖方必须有第三方提供的附加增值服务，如运货方式，付款方式，意外保险，安全运输执照等等。必须等到所有服务都就绪且满足他的要求，买方才会同意购买。他可以买或者不买，换句话说，必须满足所有的相关要求，才有可能完成这次商务活动。&lt;br&gt; <br />&lt;br&gt; <br />提供顶层商业事务功能的软件必须协调每个web service。包括（1）卖方存货系统；（2）保险服务确保产品能被运输；（3）财务服务确保依照卖方的形式付款；（4）运输服务保证按时发送货物；（5）协调服务确保与政府的安全要求一致。&lt;br&gt; <br />&lt;br&gt; <br />XKMS (XML Key Management Specification)&lt;br&gt; <br />&lt;br&gt; <br />XKMS是Microsoft和Verisign用XML应用程序集成PKI和数字认证（用于Internet事务安全性）的成果。关键的思想是将签名处理放到Web上的可信服务器（trust server）上，这样小客户就不必自己来做这些内容。XKMS依赖于XML数字签名规范和正在制定中的XML加密规范。现在的XKMS规范依赖于XML，SOAP，WSDL。&lt;br&gt; <br />&lt;br&gt; <br />其它例子&lt;br&gt; <br />&lt;br&gt; <br />Web service平台是一个发展的生态系统，达尔文主义还在起作用，这里有进化，有竞争，还有混乱。下面是一个小例子。&lt;br&gt; <br />&lt;br&gt; <br />XFS &lt;br&gt; <br />&lt;br&gt; <br />XMethods 文件系统服务让你能够通过SOAP接口读或贴文件。这个系统让开发者可以创建使用集中而稳定数据的服务。理想情况下，这种文件系统能够用来集中被多个节点访问的信息。例如，可以用它支持程序补丁的自动升级。XFS提供了一个客户端工具，在Windows Explorer中集成了XFS web service，这样Windows Explorer集成了基于XML-SOAP的文件系统。XFS是开放源码的，由xmethods.com始创，它的前景还不清楚，但是，这个想法在技术上是很有吸引力的。&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br /><img src ="http://www.blogjava.net/yeiwei/aggbug/105744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:30 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebServices入门</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105741.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105741.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105741.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105741.html</trackback:ping><description><![CDATA[[pre]WebServices入门 <br />——理论篇 <br />瑞联科技（中国）有限公司 李春林[/pre] <br />本文档是用ctrl+c －&gt; ctrl+v产生出来的入门级文档，主要是想说明什么是webservices，webservices的架构，以及几个相关的xml文档。由于小弟知识及技术非常有限，文中不妥之处请各位兄台指正，小弟在此谢过啦。 <br />什么是webservices? <br />从表面上看：Webservices 就是一个应用程序，它向外界暴露出一个能够通过Web进行调用的API。这就是说，你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Webservices 的应用程序叫做客户。 <br />更专业的描述如下：Webservices是描述一些操作（利用标准化的 XML 消息传递机制可以通过网络访问这些操作）的接口。Webservices是用标准的、规范的 XML 概念描述的，称为 Webservices的服务描述。这一描述囊括了与服务交互需要的全部细节，包括消息格式（详细描述操作）、传输协议和位置。该接口隐藏了实现服务的细节，允许独立于实现服务基于的硬件或软件平台和编写服务所用的编程语言使用服务。这允许并支持基于 Webservices的应用程序成为松散耦合、面向组件和跨技术实现。Webservices履行一项特定的任务或一组任务。Webservices可以单独或同其它 Webservices一起用于实现复杂的聚集或商业交易，以及企业集成（EAI）。 <br />Webservices模型 <br />Webservices体系结构基于三种角色（服务提供者、服务注册中心和服务请求者）之间的交互。交互涉及发布、查找和绑定操作。这些角色和操作一起作用于 Webservices构件： <br /><br />Webservices软件模块及其描述。在典型（并非 非典^_^）情况下，服务提供者托管可通过网络访问的软件模块（Webservices的一个实现）。服务提供者定义 Web 服务的服务描述并把它发布到服务请求者或服务注册中心。服务请求者使用查找操作来从本地或服务注册中心检索服务描述，然后使用服务描述与服务提供者进行绑定并调用 Web 服务实现或同它交互。服务提供者和服务请求者角色是逻辑结构，因而服务可以表现两种特性。下图 图示了这些操作、提供这些操作的组件及它们之间的交互。 <br /><br />Webservices协议栈 <br />要以一种可互操作的方式执行发布、发现和绑定这三个操作，必须有一个包含每一层标准的 Webservices协议栈。下图展示了一个概念性 Webservices协议栈。上面的几层建立在下面几层提供的功能之上。垂直的条表示在协议栈中每一层必须满足的需求。左面的文本表示协议栈的那一层所应用的标准技术。 <br /><br />下面对上面是概念性的协议栈中，的每一层做一个粗糙的说明： <br />第一层（Network）：这一层的这些协议都是现在运用比较广泛的协议啦，现在HTTP运用的最多啦，好处是显而易见的，其他的我就不多说了吧。（主要我怕我说出来会错误百出，被大家嘲笑。 *_*）。 <br />第二层（XML-Based Messaging）这一层中主要体现怎么去调用Webservices。现在运用比较广泛的主要有两种，一种是xml-rpc（XML-Remote Procedure Call）， 另一种是SOAP(Simple Object Access Protocal)。相比之下SOAP比XML-RPC有一定的优势：SOAP在处理复杂数据（如数组等）要比XML-RPC更容易一些；XML-RPC没有标准化错误代码；下面我们着重看看SOAP： <br />什么是SOAP？ <br />对SOAP的一种简单理解： <br />SOAP是一种XML Application，SOAP简单的理解，就是这样的一个开放协议SOAP=RPC+HTTP+XML：采用HTTP作为底层通讯协议；RPC作为一致性的调用途径，ＸＭＬ作为数据传送的格式，允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互。如下图： <br /><br />对SOAP更深一步的理解： <br />SOAP简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议，是一个基于XML的协议，它包括四个部分：SOAP封装(envelop)，封装定义了一个描述消息中的内容是什么，是谁发送的，谁应当接受并处理它以及如何处理它们的框架，如下图；SOAP编码规则（encoding rules），用于表示应用程序需要使用的数据类型的实例，一般遵循XMLSchema（定义了一系列的简单数据类型）规范; SOAP RPC表示(RPC representation)，表示远程过程调用和应答的协定;SOAP绑定（binding），使用底层协议交换信息。虽然这四个部分都作为SOAP的一部分，作为一个整体定义的，但他们在功能上是相交的、彼此独立的。特别的，信封和编码规则是被定义在不同的XML命名空间(namespace)中，这样使得定义更加简单。 <br /><br />图：SOAP封装(envelop) <br />下面让我们来看一个SOAP的例子： <br />[pre]POST /calendar-request HTTP/1.1 <br />Host: www.todaytech.com.cn <br />Content-Type: text/plain; charset="utf-8" <br />Content-Length: 507 <br />SOAPAction:”” <br /><br />&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" <br />xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt; <br />&lt;soapenv:Body&gt; <br />&lt;ns1:searchPaynoteResponse <br />soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />xmlns:ns1="http://external.charge.gfmis.todaytech.com"&gt; <br />&lt;searchPaynoteReturn href="#id0"/&gt; <br />&lt;/ns1:searchPaynoteResponse&gt; <br />&lt;multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />xsi:type="ns2:ExternalPaynoteVO" <br />xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" <br />xmlns:ns2="http://vo.charge.gfmis.todaytech.com"&gt; <br />&lt;paynoteNO xsi:type="xsd:string"&gt;0300000003004&lt;/paynoteNO&gt; <br />&lt;startDate xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;disaID xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;annotation xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;chargeItemNO3 xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;amount xsi:type="xsd:double"&gt;0.0&lt;/amount&gt; <br />&lt;chargeItemNO2 xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;loginKey xsi:type="xsd:string"&gt;YCpTEwKEw&lt;/loginKey&gt; <br />&lt;chargeItemNO1 xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;userSign xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;operator xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;userCert xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;quantity3 xsi:type="xsd:double"&gt;0.0&lt;/quantity3&gt; <br />&lt;quantity2 xsi:type="xsd:double"&gt;0.0&lt;/quantity2&gt; <br />&lt;unitName xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;srvSign xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;quantity1 xsi:type="xsd:double"&gt;0.0&lt;/quantity1&gt; <br />&lt;srvCert xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;externalPaynoteNO xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;status xsi:type="xsd:int"&gt;1&lt;/status&gt; <br />&lt;randStr xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;returnCode xsi:type="xsd:int"&gt;0&lt;/returnCode&gt; <br />&lt;endDate xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;price3 xsi:type="xsd:double"&gt;0.0&lt;/price3&gt; <br />&lt;price2 xsi:type="xsd:double"&gt;0.0&lt;/price2&gt; <br />&lt;price1 xsi:type="xsd:double"&gt;0.0&lt;/price1&gt; <br />&lt;unitNO xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;payerName xsi:type="xsd:string" xsi:nil="true"/&gt; <br />&lt;/multiRef&gt; <br />&lt;/soapenv:Body&gt; <br />&lt;/soapenv:Envelope&gt;[/pre] <br />第三层（Service Description）：在这一层中主要是我们服务的描述，向客户端说明我们的服务，告诉客户端、我们的提供了什么样的接口可供调用(WHAT)，怎么样去调用(HOW)，到那去调用(WHERE)。在这一层中主要的协议是WSDL(Web Services Description Language)。WSDL 是一种XML Application，它的作用就是给客户端描述我们接口的WHAT,HOW,WHERE，也就是说：WSDL 服务定义为分布式系统提供了可机器识别的SDK文档，并且可用于描述自动执行应用程序通信中所涉及的细节。 <br />WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中，由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来，因此可以对抽象定义进行再次使用：消息，指对交换数据的抽象描述；而端口类型，指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联，可以定义一个端口，而端口的集合则定义为服务。因此，WSDL 文档在Web服务的定义中使用下列元素： <br />&amp;#8226; Types - 数据类型定义的容器，它使用某种类型系统(一般地使用XML Schema中的类型系统)。 <br />&amp;#8226; Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。 <br />&amp;#8226; Operation - 对服务中所支持的操作的抽象描述，一般单个Operation描述了一个访问入口的请求/响应消息对。 <br />&amp;#8226; PortType - 对于某个访问入口点类型所支持的操作的抽象集合，这些操作可以由一个或多个服务访问点来支持。 <br />&amp;#8226; Binding - 特定端口类型的具体协议和数据格式规范的绑定。 <br />&amp;#8226; Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。 <br />&amp;#8226; Service - 相关服务访问点的集合。 <br />我们可以参考下图，来理解一下WSDL文档的结构组织： <br /><br />说明：其中， <br />Types是一个数据类型定义的容器，包含了所有在消息定义中需要的XML元素的类型定义，它一般遵循XMLSchema的规范。 <br />Message具体定义了在通信中使用的消息的数据结构，Message元素包含了一组Part元素，每个Part元素都是最终消息的一个组成部分，每个Part都会引用一个DataType来表示它的结构。Part元素不支持嵌套(可以使用DataType来完成这方面的需要)，都是并列出现。 <br />PortType具体定义了一种服务访问入口的类型，何谓访问入口的类型呢？就是传入/传出消息的模式及其格式。一个PortType可以包含若干个Operation，而一个Operation则是指访问入口支持的一种类型的调用。在WSDL里面支持四种访问入口调用的模式： <br />1. 单请求; <br />2. 单响应; <br />3. 请求/响应; <br />4. 响应/请求。 <br />Service描述的是一个具体的被部署的Web服务所提供的所有访问入口的部署细节，一个Service往往会包含多个服务访问入口，而每个访问入口都会使用一个Port元素来描述。 <br />Port描述的是一个服务访问入口的部署细节，包括通过哪个Web地址(URL)来访问，应当使用怎样的消息调用模式来访问等。其中消息调用模式则是使用Binding结构来表示。 <br />Binding结构定义了某个PortType与某一种具体的网络传输协议或消息传输协议相绑定，从这一层次开始，描述的内容就与具体服务的部署相关了。比如可以将PortType与SOAP/HTTP绑定，也可以将PortType与MIME/SMTP相绑定等。 <br /><br />下面我们给出一个WSDL的文档实例： <br />[pre]&lt;?xml version="1.0" encoding="UTF-8"?&gt; <br />&lt;wsdl:definitions targetNamespace="http://external.charge.gfmis.todaytech.com" <br />xmlns="http://schemas.xmlsoap.org/wsdl/" <br />xmlns:apachesoap="http://xml.apache.org/xml-soap" <br />xmlns:impl="http://external.charge.gfmis.todaytech.com-impl" <br />xmlns:intf="http://external.charge.gfmis.todaytech.com" <br />xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" <br />xmlns:tns2="http://vo.charge.gfmis.todaytech.com" <br />xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" <br />xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" <br />xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt; <br />&lt;wsdl:types&gt; <br />&lt;schema targetNamespace="http://vo.charge.gfmis.todaytech.com" <br />xmlns="http://www.w3.org/2001/XMLSchema"&gt; <br />&lt;import namespace="http://schemas.xmlsoap.org/soap/encoding/"/&gt; <br />&lt;complexType name="ExternalPaynoteVO"&gt; <br />&lt;sequence&gt; <br />&lt;element name="amount" type="xsd:double"/&gt; <br />&lt;element name="annotation" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="chargeItemNO1" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="chargeItemNO2" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="chargeItemNO3" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="disaID" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="endDate" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="externalPaynoteNO" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="loginKey" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="operator" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="payerName" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="paynoteNO" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="price1" type="xsd:double"/&gt; <br />&lt;element name="price2" type="xsd:double"/&gt; <br />&lt;element name="price3" type="xsd:double"/&gt; <br />&lt;element name="quantity1" type="xsd:double"/&gt; <br />&lt;element name="quantity2" type="xsd:double"/&gt; <br />&lt;element name="quantity3" type="xsd:double"/&gt; <br />&lt;element name="randStr" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="returnCode" type="xsd:int"/&gt; <br />&lt;element name="srvCert" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="srvSign" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="startDate" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="status" type="xsd:int"/&gt; <br />&lt;element name="unitNO" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="unitName" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="userCert" nillable="true" type="xsd:string"/&gt; <br />&lt;element name="userSign" nillable="true" type="xsd:string"/&gt; <br />&lt;/sequence&gt; <br />&lt;/complexType&gt; <br />&lt;element name="ExternalPaynoteVO" nillable="true" type="tns2:ExternalPaynoteVO"/&gt; <br />&lt;/schema&gt; <br />&lt;/wsdl:types&gt; <br /><br />&lt;wsdl:message name="logoutRequest"&gt; <br />&lt;wsdl:part name="epnvo" type="tns2:ExternalPaynoteVO"/&gt; <br />&lt;/wsdl:message&gt; <br />&lt;wsdl:message name="searchPaynoteResponse"&gt; <br />&lt;wsdl:part name="searchPaynoteReturn" type="tns2:ExternalPaynoteVO"/&gt; <br />&lt;/wsdl:message&gt; <br />&lt;wsdl:message name="searchPaynoteRequest"&gt; <br />&lt;wsdl:part name="epnvo" type="tns2:ExternalPaynoteVO"/&gt; <br />&lt;/wsdl:message&gt; <br />&lt;wsdl:message name="genPaynoteResponse"&gt; <br />&lt;wsdl:part name="genPaynoteReturn" type="tns2:ExternalPaynoteVO"/&gt; <br />&lt;/wsdl:message&gt; <br />&lt;wsdl:message name="loginResponse"&gt; <br />&lt;wsdl:part name="loginReturn" type="tns2:ExternalPaynoteVO"/&gt; <br />&lt;/wsdl:message&gt; <br />&lt;wsdl:message name="logoutResponse"&gt; <br />&lt;wsdl:part name="logoutReturn" type="tns2:ExternalPaynoteVO"/&gt; <br />&lt;/wsdl:message&gt; <br />&lt;wsdl:message name="genPaynoteRequest"&gt; <br />&lt;wsdl:part name="epvo" type="tns2:ExternalPaynoteVO"/&gt; <br />&lt;/wsdl:message&gt; <br />&lt;wsdl:message name="loginRequest"&gt; <br />&lt;wsdl:part name="epnvo" type="tns2:ExternalPaynoteVO"/&gt; <br />&lt;/wsdl:message&gt; <br />&lt;wsdl:portType name="ExternalInterface"&gt; <br />&lt;wsdl:operation name="login" parameterOrder="epnvo"&gt; <br />&lt;wsdl:input message="intf:loginRequest" name="loginRequest"/&gt; <br />&lt;wsdl:output message="intf:loginResponse" name="loginResponse"/&gt; <br />&lt;/wsdl:operation&gt; <br />&lt;wsdl:operation name="logout" parameterOrder="epnvo"&gt; <br />&lt;wsdl:input message="intf:logoutRequest" name="logoutRequest"/&gt; <br />&lt;wsdl:output message="intf:logoutResponse" name="logoutResponse"/&gt; <br />&lt;/wsdl:operation&gt; <br />&lt;wsdl:operation name="genPaynote" parameterOrder="epvo"&gt; <br />&lt;wsdl:input message="intf:genPaynoteRequest" <br />name="genPaynoteRequest"/&gt; <br />&lt;wsdl:output message="intf:genPaynoteResponse" <br />name="genPaynoteResponse"/&gt; <br />&lt;/wsdl:operation&gt; <br />&lt;wsdl:operation name="searchPaynote" parameterOrder="epnvo"&gt; <br />&lt;wsdl:input message="intf:searchPaynoteRequest" <br />name="searchPaynoteRequest"/&gt; <br />&lt;wsdl:output message="intf:searchPaynoteResponse" <br />name="searchPaynoteResponse"/&gt; <br />&lt;/wsdl:operation&gt; <br />&lt;/wsdl:portType&gt; <br />&lt;wsdl:binding name="ExternalInterfaceSoapBinding" <br />type="intf:ExternalInterface"&gt; <br />&lt;wsdlsoap:binding style="rpc" <br />transport="http://schemas.xmlsoap.org/soap/http"/&gt; <br />&lt;wsdl:operation name="login"&gt; <br />&lt;wsdlsoap:operation soapAction=""/&gt; <br />&lt;wsdl:input name="loginRequest"&gt; <br />&lt;wsdlsoap:body <br />encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />namespace="http://external.charge.gfmis.todaytech.com" use="encoded"/&gt; <br />&lt;/wsdl:input&gt; <br />&lt;wsdl:output name="loginResponse"&gt; <br />&lt;wsdlsoap:body <br />encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />namespace="http://external.charge.gfmis.todaytech.com" use="encoded"/&gt; <br />&lt;/wsdl:output&gt; <br />&lt;/wsdl:operation&gt; <br />&lt;wsdl:operation name="logout"&gt; <br />&lt;wsdlsoap:operation soapAction=""/&gt; <br />&lt;wsdl:input name="logoutRequest"&gt; <br />&lt;wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />namespace="http://external.charge.gfmis.todaytech.com" use="encoded"/&gt; <br />&lt;/wsdl:input&gt; <br />&lt;wsdl:output name="logoutResponse"&gt; <br />&lt;wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />namespace="http://external.charge.gfmis.todaytech.com" use="encoded"/&gt; <br />&lt;/wsdl:output&gt; <br />&lt;/wsdl:operation&gt; <br />&lt;wsdl:operation name="genPaynote"&gt; <br />&lt;wsdlsoap:operation soapAction=""/&gt; <br />&lt;wsdl:input name="genPaynoteRequest"&gt; <br />&lt;wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />namespace="http://external.charge.gfmis.todaytech.com" use="encoded"/&gt; <br />&lt;/wsdl:input&gt; <br />&lt;wsdl:output name="genPaynoteResponse"&gt; <br />&lt;wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />namespace="http://external.charge.gfmis.todaytech.com" use="encoded"/&gt; <br />&lt;/wsdl:output&gt; <br />&lt;/wsdl:operation&gt; <br />&lt;wsdl:operation name="searchPaynote"&gt; <br />&lt;wsdlsoap:operation soapAction=""/&gt; <br />&lt;wsdl:input name="searchPaynoteRequest"&gt; <br />&lt;wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />namespace="http://external.charge.gfmis.todaytech.com" use="encoded"/&gt; <br />&lt;/wsdl:input&gt; <br />&lt;wsdl:output name="searchPaynoteResponse"&gt; <br />&lt;wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" <br />namespace="http://external.charge.gfmis.todaytech.com" use="encoded"/&gt; <br />&lt;/wsdl:output&gt; <br />&lt;/wsdl:operation&gt; <br />&lt;/wsdl:binding&gt; <br />&lt;wsdl:service name="ExternalInterfaceService"&gt; <br />&lt;wsdl:port binding="intf:ExternalInterfaceSoapBinding" name="ExternalInterface"&gt; <br /><br />&lt;wsdlsoap:address location="http://localhost:7001/gfmis/services/ExternalInterface"/&gt; <br />&lt;/wsdl:port&gt; <br />&lt;/wsdl:service&gt; <br />&lt;/wsdl:definitions&gt;[/pre] <br />第四层（Service Publication）: <br />第五层（Service Discovery）：这两层都是关于UDDI的协议，我们暂时用不上，现在也暂时没有，以后补上（^_^）。 <br /><img src ="http://www.blogjava.net/yeiwei/aggbug/105741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:29 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>教你制做Web实时进度条</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105740.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105740.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105740.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105740.html</trackback:ping><description><![CDATA[<p>网上已经有很多Web进度条的例子，但是很多都是估算时间，不能正真反应任务的真实进度。我自己结合多线程和ShowModalDialog制做了一个实时进度条，原理很简单：使用线程开始长时间的任务，定义一个Session，当任务进行到不同的阶段改变Session的值，线程开始的同时使用ShowModalDialog打开一个进度条窗口，不断刷新这个窗口获取Session值，反应出实时的进度。下面就来看看具体的代码：（文章结尾处下载源代码）</p>
		<p>先新建一个Default.aspx页面，<br />客户端代码：</p>
		<p>&lt;body MS_POSITIONING="GridLayout"&gt;<br />    &lt;form id="Form1" method="post" runat="server"&gt;<br />            &lt;br&gt;<br />            &lt;br&gt;<br />            &lt;asp:Button id="Button1" runat="server" Text="Start Long Task!"&gt;&lt;/asp:Button&gt;<br />    &lt;/form&gt;<br />&lt;/body&gt;<br />服务器端代码：<br />using System;<br />using System.Collections;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Web;<br />using System.Web.SessionState;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.HtmlControls;<br />using System.Text;</p>
		<p>namespace WebProgressBar<br />{<br />    /**//// &lt;summary&gt;<br />    /// Summary description for _Default.<br />    /// &lt;/summary&gt;<br />    public class _Default : System.Web.UI.Page<br />    {<br />        protected System.Web.UI.WebControls.Button Button1;<br />    <br />        private void Page_Load(object sender, System.EventArgs e)<br />        {<br />            // Put user code to initialize the page here<br />        }</p>
		<p>        Web Form Designer generated code#region Web Form Designer generated code<br />        override protected void OnInit(EventArgs e)<br />        {<br />            //<br />            // CODEGEN: This call is required by the ASP.NET Web Form Designer.<br />            //<br />            InitializeComponent();<br />            base.OnInit(e);<br />        }<br />        <br />        /**//// &lt;summary&gt;<br />        /// Required method for Designer support - do not modify<br />        /// the contents of this method with the code editor.<br />        /// &lt;/summary&gt;<br />        private void InitializeComponent()<br />        {    <br />            this.Button1.Click += new System.EventHandler(this.Button1_Click);<br />            this.Load += new System.EventHandler(this.Page_Load);</p>
		<p>        }<br />        #endregion</p>
		<p>        private void LongTask()<br />        {<br />            //模拟长时间任务<br />            //每个循环模拟任务进行到不同的阶段<br />            for(int i=0;i&lt;11;i++)<br />            {<br />                System.Threading.Thread.Sleep(1000);<br />                //设置每个阶段的state值，用来显示当前的进度<br />                Session["State"] = i+1;<br />            }<br />            //任务结束<br />            Session["State"] = 100;</p>
		<p>        }</p>
		<p>        public static void OpenProgressBar(System.Web.UI.Page Page)<br />        {<br />            StringBuilder sbScript = new StringBuilder();</p>
		<p>            sbScript.Append("&lt;script language='javascript' type='text/javascript'&gt;\n");<br />            sbScript.Append("&lt;!--\n");<br />            //需要IE5.5以上支持<br />            sbScript.Append("window.showModalDialog('Progress.aspx','','dialogHeight: 100px; dialogWidth: 350px; edge: Raised; center: Yes; help: No; resizable: No; status: No;scroll:No;');\n");<br />            //IE5.5以下使用window.open<br />            //sbScript.Append("window.open('Progress.aspx','', 'height=100, width=350, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no');\n");<br />            sbScript.Append("// --&gt;\n");<br />            sbScript.Append("&lt;/script&gt;\n");</p>
		<p>            Page.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());<br />        }</p>
		<p>        private void Button1_Click(object sender, System.EventArgs e)<br />        {<br />            System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(LongTask));<br />            thread.Start();</p>
		<p>            Session["State"]=1;<br />            OpenProgressBar(this.Page);<br />        }<br />    }<br />}</p>
		<p>
				<br />新建一个进度条页面Progress.aspx<br />客户端：<br />在head中加入&lt;base target="_self"&gt;<br />&lt;body MS_POSITIONING="GridLayout"&gt;<br />        &lt;form id="Form1" method="post" runat="server"&gt;<br />            &lt;asp:Label id="lblMessages" runat="server"&gt;&lt;/asp:Label&gt;<br />            &lt;asp:Panel id="panelBarSide" runat="server" Width="300px" BorderStyle="Solid" BorderWidth="1px"<br />                ForeColor="Silver"&gt;<br />                &lt;asp:Panel id="panelProgress" runat="server" Width="10px" BackColor="Green"&gt;&lt;/asp:Panel&gt;<br />            &lt;/asp:Panel&gt;<br />            &lt;asp:Label id="lblPercent" runat="server" ForeColor="Blue"&gt;&lt;/asp:Label&gt;<br />        &lt;/form&gt;<br />&lt;/body&gt;<br />服务器端：<br />using System;<br />using System.Collections;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Web;<br />using System.Web.SessionState;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.HtmlControls;</p>
		<p>namespace WebProgressBar<br />{<br />    /**//// &lt;summary&gt;<br />    /// Summary description for Progress.<br />    /// &lt;/summary&gt;<br />    public class Progress : System.Web.UI.Page<br />    {<br />        protected System.Web.UI.WebControls.Label lblMessages;<br />        protected System.Web.UI.WebControls.Panel panelProgress;<br />        protected System.Web.UI.WebControls.Panel panelBarSide;<br />        protected System.Web.UI.WebControls.Label lblPercent;<br />    <br />        private int state = 0;<br />        private void Page_Load(object sender, System.EventArgs e)<br />        {<br />            // Put user code to initialize the page here<br />            if(Session["State"]!=null)<br />            {<br />                state = Convert.ToInt32(Session["State"].ToString());<br />            }<br />            else<br />            {<br />                Session["State"]=0;<br />            }<br />            if(state&gt;0&amp;&amp;state&lt;=10)<br />            {<br />                this.lblMessages.Text = "Task undertaking!";<br />                this.panelProgress.Width = state*30;<br />                this.lblPercent.Text = state*10 + "%";<br />                Page.RegisterStartupScript("","&lt;script&gt;window.setTimeout('window.Form1.submit()',100);&lt;/script&gt;");<br />            }<br />            if(state==100)<br />            {<br />                this.panelProgress.Visible = false;<br />                this.panelBarSide.Visible = false;<br />                this.lblMessages.Text = "Task Completed!";<br />                Page.RegisterStartupScript("","&lt;script&gt;window.close();&lt;/script&gt;");<br />            }<br />        }</p>
		<p>        Web Form Designer generated code#region Web Form Designer generated code<br />        override protected void OnInit(EventArgs e)<br />        {<br />            //<br />            // CODEGEN: This call is required by the ASP.NET Web Form Designer.<br />            //<br />            InitializeComponent();<br />            base.OnInit(e);<br />        }<br />        <br />        /**//// &lt;summary&gt;<br />        /// Required method for Designer support - do not modify<br />        /// the contents of this method with the code editor.<br />        /// &lt;/summary&gt;<br />        private void InitializeComponent()<br />        {    <br />            this.Load += new System.EventHandler(this.Page_Load);</p>
		<p>        }<br />        #endregion<br />    }<br />}<br /></p><img src ="http://www.blogjava.net/yeiwei/aggbug/105740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:28 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web2.0时代，RSS你会用了吗？(技术实现总结)</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/23/105739.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 23 Mar 2007 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/23/105739.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105739.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/23/105739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105739.html</trackback:ping><description><![CDATA[如见Web2.0被吵的如火如荼，同时也有很多的评论褒贬不一。有人说Web2.0就是“一帮人在看皇帝的新装而已”。也有人说Web2.0将是一场变革。无论这些争论有没有价值，但我相信，存在就有它的必然性。也许Web2.0更像是一种商业模式，一个观念的变革而非技术。<br />     不管怎样，它来了，你准备好了吗？<br />     说到Web2.0，就会提到Blog、TAG、SNS、RSS、wiki这些软件应用和xml、ajax等这些新理论和技术实现。<br />RSS毋容置疑就是其重要的应用之一。<br /><br />     那么什么是RSS？它到底有什么用呢？ 
<div class="postText"><p>     RSS是站点与站点之间共享内容的一种简易方式(也称为“聚合内容”)，通常被用于新闻和其他按顺序排列的网站，例如Blog网站。网站提供RSS输出，有利于让用户发现网站内容的更新。网站用户可以在客户端借助于类似新闻资讯阅读器等支持RSS的新闻聚合工具软件，在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。<br />     RSS是基于XML的一种形式。并且所有的RSS文件都要遵守万维网联盟(W3C)站点发布的XML 1.0规范。具体格式可以查一下RSS 2.0规范，这里就不再重复粘贴了。</p><p>下面是我总结的几种RSS的技术实现代码：</p><p>1.在线生成RSS聚合页。</p><p>(1)创建Rss.aspx<br />&lt;%@ Page language="c#" Codebehind="Rss.aspx.cs" AutoEventWireup="false" Inherits="LiTianPing.Rss" %&gt;<br />只留下这一行，其余的都删掉。</p><p>(2)后台代码；Rss.aspx.cs</p><p>  private void Page_Load(object sender, System.EventArgs e)<br />  {    <br />   Response.ContentType="text/xml";<br />   Response.Write(GetRSS());<br />  }</p><p>  /// &lt;summary&gt;<br />  /// 取得聚合文章<br />  /// &lt;/summary&gt;<br />  /// &lt;returns&gt;&lt;/returns&gt;<br />  public string GetRSS()<br />  {<br />   News t=new News();//自己的业务类<br />   DataSet ds=t.GetListByClass(1);//根据类别得到数据<br />   <br />   StringBuilder strCode=new StringBuilder();<br />   strCode.Append("&lt;?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?&gt;");<br />   strCode.Append("&lt;rss version='2.0' xmlns:dc=\"http://purl.org/dc/elements/1.1/\"");<br />   strCode.Append(" xmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\" ");<br />   strCode.Append(" xmlns:wfw=\"http://wellformedweb.org/CommentAPI/\" xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\"&gt;");<br />   strCode.Append("&lt;channel&gt;");<br />   strCode.Append("&lt;title&gt;李天平RSSDemo&lt;/title&gt;");<br />   strCode.Append("&lt;link&gt;http://"+Request.ServerVariables["SERVER_NAME"]+"&lt;/link&gt; ");<br />   strCode.Append("&lt;description&gt;天道酬勤&lt;/description&gt; ");  <br />   strCode.Append("&lt;copyright&gt;Copyright 2005&lt;/copyright&gt; ");      <br />   <br />   foreach(DataRow row in ds.Tables[0].Rows)<br />   {<br />    string Id=row["Id"].ToString();<br />    string title=row["title"].ToString();<br />    string description=row["description"].ToString();<br />    string pubdate=row["pubdate"].ToString();<br />    string ClassId=row["ClassId"].ToString();<br />    //string author=row["author"].ToString();</p><p>    strCode.Append("&lt;item&gt;");<br />    strCode.Append("&lt;title&gt;"+title+"&lt;/title&gt;");<br />    strCode.Append("&lt;link&gt;http://"+Request.ServerVariables["SERVER_NAME"]+"/NewsShow.aspx?ID="+Id+"&lt;/link&gt;");<br />    strCode.Append("&lt;subject&gt;"+description+"&lt;/subject&gt;");<br />    strCode.Append("&lt;description&gt;&lt;![CDATA["+description+"]]&gt;&lt;/description&gt;");    <br />    strCode.Append("&lt;PubDate&gt;"+pubdate+"&lt;/PubDate&gt;");<br />    strCode.Append("&lt;category&gt;"+ClassId+"&lt;/category&gt;");<br />    strCode.Append("&lt;/item&gt;");    <br />   }<br />   strCode.Append("&lt;/channel&gt;");<br />   strCode.Append("&lt;/rss&gt;");  <br />   return strCode.ToString();<br />  }</p><p> (3) XmlTextWriter实现方式2；Rss.aspx.cs</p><p>  string xmlDoc="rss.xml"; <br /> private void Page_Load(object sender, System.EventArgs e)<br />  {    <br />   xmlDoc=Server.MapPath(".")+xmlDoc;   <br />   GetRSS2();<br />   XmlDocument doc= new XmlDocument();<br />   doc.Load(xmlDoc);<br />   Response.ContentType = "text/xml";<br />   doc.Save(Response.Output);<br />  }<br />  /// &lt;summary&gt;<br />  /// 取得聚合文章<br />  /// &lt;/summary&gt;<br />  /// &lt;returns&gt;&lt;/returns&gt;<br />  public void GetRSS2()<br />  {<br />   News t=new News();<br />   DataSet ds=t.GetListByClass(1);<br />   <br />   XmlTextWriter writer = new XmlTextWriter(xmlDoc,Encoding.UTF8);<br />   writer.Formatting = Formatting.Indented;<br />   writer.WriteStartDocument(true);<br />   writer.WriteComment("RSS页的实现");<br />   writer.WriteStartElement("rss");<br />   writer.WriteAttributeString("version","2.0");      <br />   writer.WriteStartElement("channel");   <br />   writer.WriteStartElement("title");<br />   writer.WriteString("李天平RSSDemo");<br />   writer.WriteEndElement();<br />   writer.WriteStartElement("link");   <br />   writer.WriteString("http://"+Request.ServerVariables["SERVER_NAME"]);<br />   writer.WriteEndElement();   <br />   writer.WriteStartElement("description");<br />   writer.WriteString("天道酬勤");<br />   writer.WriteEndElement();<br />   writer.WriteStartElement("copyright");<br />   writer.WriteString("Copyright 2005");<br />   writer.WriteEndElement();<br />   writer.WriteStartElement("language");<br />   writer.WriteString("zh-cn");<br />   writer.WriteEndElement();  <br />      <br />   foreach(DataRow row in ds.Tables[0].Rows)<br />   {<br />    string Id=row["Id"].ToString();<br />    string title=row["title"].ToString();<br />    string description=row["description"].ToString();<br />    string pubdate=row["pubdate"].ToString();<br />    string ClassId=row["ClassId"].ToString();<br />    //string author=row["author"].ToString();</p><p>    writer.WriteStartElement("item");<br />    writer.WriteStartElement("title");<br />    writer.WriteString(title);<br />    writer.WriteEndElement();<br />    writer.WriteStartElement("link");<br />    writer.WriteString("http://"+Request.ServerVariables["SERVER_NAME"]+"/NewsShow.aspx?ID="+Id) ;<br />    writer.WriteEndElement();<br />    writer.WriteStartElement("description");<br />    writer.WriteCData(description);<br />    writer.WriteEndElement();<br />    writer.WriteStartElement("pubDate");<br />    writer.WriteString(pubdate);<br />    writer.WriteEndElement();<br />    writer.WriteStartElement("category");<br />    writer.WriteString(ClassId);<br />    writer.WriteEndElement();<br />    writer.WriteEndElement();  <br />   }<br />   writer.WriteEndElement();<br />   writer.WriteEndElement();<br />   writer.Flush();<br />   writer.Close();<br /> <br />  }<br />2.在线RSS阅读获取。</p><p>页面代码：<br />  &lt;P style="FONT-SIZE: 11px"&gt;<br />   Feed种子：&lt;asp:TextBox id="FeedUrl" runat="server" Width="440px"&gt;&lt;/asp:TextBox&gt;&lt;BR&gt;<br />   显示条数：&lt;asp:TextBox id="Num" runat="server" Width="48px"&gt;&lt;/asp:TextBox&gt;&lt;/P&gt;<br />  &lt;P style="FONT-SIZE: 11px"&gt;<br />   &lt;asp:Button id="GetFeed" runat="server" Text="获得RSS"&gt;&lt;/asp:Button&gt;&lt;BR&gt;<br />   &lt;BR&gt;<br />   &lt;asp:Label id="RssFeed" runat="server"&gt;&lt;/asp:Label&gt;&lt;/P&gt;</p><p>后台代码：<br />  /// &lt;summary&gt;<br />  /// 获得要显示的Feed种子数据<br />  /// &lt;/summary&gt;<br />  /// &lt;param name="RssUrl"&gt;&lt;/param&gt;<br />  /// &lt;param name="showNewsCount"&gt;&lt;/param&gt;<br />  /// &lt;returns&gt;&lt;/returns&gt;<br />  public string LoadRSS(string RssUrl, int showNewsCount)<br />  { <br />   string strRssList = "";<br />   string strMsg;<br />   try<br />   {      <br />    XmlDocument objXMLDoc = new XmlDocument();    <br />    objXMLDoc.Load(RssUrl);   <br />    XmlNodeList objItems = objXMLDoc.GetElementsByTagName("item");    <br />   <br />    if(showNewsCount &gt; 30)<br />     showNewsCount = 10;   <br />    if(showNewsCount &lt; 1)<br />     showNewsCount = objItems.Count;<br />   <br />    string title="";<br />    string link="";  <br />    int i;</p><p>    if(objXMLDoc.HasChildNodes == true)<br />    {<br />     i = 1;<br />        foreach(XmlNode objNode in objItems)<br />     {<br />      if(i&lt;=showNewsCount)<br />      {<br />       if(objNode.HasChildNodes == true)<br />       {<br />        XmlNodeList objItemsChild = objNode.ChildNodes;<br />        foreach(XmlNode objNodeChild in objItemsChild)<br />        {<br />         switch(objNodeChild.Name)<br />         {<br />          case "title":<br />           title = objNodeChild.InnerText;<br />           break;<br />          case "link":<br />           link = objNodeChild.InnerText;<br />           break;          <br />         }         <br />        } <br />        i = i+1;<br />        strRssList += "&lt;a href=" + link +" target=_blank&gt;" + title + "&lt;/a&gt;&lt;br&gt;";  <br />       }       <br />      }<br />     }        <br />    }<br />    strMsg = strRssList;<br />   }<br />   catch<br />   {<br />    strMsg = "RSS Feed 源数据出错！";<br />   }<br />   return strMsg;<br />  }</p><p>  //获取按钮,获取指定RSS<br />  private void GetFeed_Click(object sender, System.EventArgs e)<br />  {<br />   if(FeedUrl.Text == "")//RSS地址<br />   {<br />    RssFeed.Text = "信息源不能为空，您可刷新重试或联系管理员！";<br />    return ;<br />   }  <br />   RssFeed.Text = LoadRSS(FeedUrl.Text,Convert.ToInt32(Num.Text)); //获取指定数目  <br />  }</p><p>3.无刷新动态更新的在线RSS阅读获取</p><p>&lt;%@ Page language="c#" Codebehind="XmlHttp.aspx.cs" AutoEventWireup="false" Inherits="LiTianPing.XmlHttp" %&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" &gt;<br />&lt;HTML&gt;<br /> &lt;HEAD&gt;<br />  &lt;title&gt;XmlHttp&lt;/title&gt;<br />  &lt;meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"&gt;<br />  &lt;meta name="CODE_LANGUAGE" Content="C#"&gt;<br />  &lt;meta name="vs_defaultClientScript" content="JavaScript"&gt;<br />  &lt;meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"&gt;<br />  &lt;style&gt;td { font-size: 9pt}<br />  &lt;/style&gt;<br />  &lt;script&gt;<br />  &lt;!-- <br />  var oDiv <br />  var xh     <br />  function getXML()<br />  {   <br />   xh =new ActiveXObject("Microsoft.XMLHTTP"); <br />   oDiv = document.getElementById("rssitem");<br />   oDiv.style.display= "";<br />   try<br />   {<br />    //如果是本地改成下面语句直接读取<br />    //xh.open("GET","/Rss.aspx",false);    <br />    xh.open("GET","Http://ltp.cnblogs.com/Rss.aspx",false);<br />    xh.send(null);<br />    loadData(xh,oDiv);<br />   }<br />   catch(e)<br />   {<br />    error(oDiv);<br />   }<br />  }<br />  function loadData(xh,oDiv)<br />  {<br />   if (xh.readyState == 4)<br />   {<br />    xml = xh.responsexml;<br />    var i;<br />    var nodes = xml.selectNodes("/rss/channel/item");<br />    var bloglink = xml.selectSingleNode("/rss/channel/link").text;<br />    oDiv.innerHTML = "";<br />    var html;    <br />    for(i=0;i&lt;nodes.length;i++)<br />    {    <br />        <br />      html += "&lt;div &gt;";<br />      html += "    &lt;div &gt;";<br />      html += "        &lt;a class=font1 href='" +nodes[i].selectSingleNode("link").text + "' target='_blank'&gt;" + nodes[i].selectSingleNode("title").text +"&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;";<br />      html += "    &lt;/div&gt;";<br />      html += "    &lt;div &gt;";<br />      html += "        " +nodes[i].selectSingleNode("description").text;<br />      html += "    &lt;/div&gt;"            <br />      //html += "    &lt;/div&gt;";<br />      html += "&lt;/div&gt;&lt;hr&gt;";</p><p>    }<br />    oDiv.innerHTML = html;<br />   }<br />   else<br />   {<br />    error(oDiv);<br />   }<br />  }</p><p>  function error(oDiv)<br />  {<br />   oDiv.innerHTML = "载入失败";<br />  }<br />  --&gt;<br />  &lt;/script&gt;<br /> &lt;/HEAD&gt;<br /> &lt;body MS_POSITIONING="GridLayout" onload="window.setTimeout('getXML()',200);"&gt;<br />  &lt;form id="Form1" method="post" runat="server"&gt;<br />   &lt;div align=center&gt;<br />   &lt;table cellpadding="0" cellspacing="0" border="0" width="80%"&gt;<br />    &lt;tr&gt;<br />     &lt;td&gt;<br />      &lt;div id="rssitem" style="WIDTH:80%"&gt;数据载入中...&lt;/div&gt;<br />     &lt;/td&gt;<br />    &lt;/tr&gt;<br />   &lt;/table&gt;<br />   &lt;/div&gt;<br />  &lt;/form&gt;<br /> &lt;/body&gt;<br />&lt;/HTML&gt;</p></div><img src ="http://www.blogjava.net/yeiwei/aggbug/105739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-23 10:27 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/23/105739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我想在网页中键鼠标右键弹出自己的菜单，但不知道如何不让它显示IE自带的菜单？</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/22/105519.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Thu, 22 Mar 2007 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/22/105519.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105519.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/22/105519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105519.html</trackback:ping><description><![CDATA[<p>答1：<br />&lt;html&gt; <br />&lt;head&gt; <br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <br />&lt;style&gt; <br />.menu{ cursor: hand;  <br />display: none;  <br />position: absolute;  <br />top: 0; left: 0;  <br />overflow: hidden; <br />background-color: "#CFCFCF";  <br />border: "1 solid";  <br />border-top-color: "#EFEFEF";  <br />border-left-color: "#EFEFEF";  <br />border-right-color: "#505050";  <br />border-bottom-color: "#505050";  <br />font: 10pt 宋体; <br />margin:0pt;padding: 2pt <br />} <br /> <br />.menu SPAN {width: 100%; cursor: hand; padding-left: 10pt} <br />.menu SPAN.selected {background: navy; color:white; cursor: hand} <br />&lt;/style&gt; <br /> <br />&lt;xml id="contextDef"&gt; <br />&lt;xmldata&gt; <br />&lt;contextmenu id="demo"&gt; <br />&lt;item id="viewsource" value="查看源文件"/&gt; <br />&lt;item id="back" value="后退……"/&gt; <br />&lt;item id="meng" value="访问【孟宪会之精彩世界】"/&gt; <br />&lt;item id="calculate" value="执行 JavaScript 代码"/&gt; <br />&lt;/contextmenu&gt; <br />&lt;contextmenu id="demob"&gt; <br />&lt;item id="菜单项例子1" value="菜单项例子1" /&gt; <br />&lt;item id="菜单项例子2" value="菜单项例子2" /&gt; <br />&lt;/contextmenu&gt; <br />&lt;/xmldata&gt; <br />&lt;/xml&gt; <br />&lt;SCRIPT&gt; <br />// 定义全局变量 <br />var bContextKey=false; <br />function fnGetContextID(el) { <br />while (el!=null) { <br />if (el.contextmenu) return el.contextmenu <br />el = el.parentElement <br />} <br />return "" <br />} <br /> <br />function fnDetermine(){ <br />oWorkItem=event.srcElement; <br />//键盘上的菜单键被按下时。 <br />if(bContextKey==true){ <br />//如果菜单的“状态”为“false” <br />if(oContextMenu.getAttribute("status")=="false"){ <br />//捕获鼠标事件，以便和页面交互。 <br />oContextMenu.setCapture(); <br />//根据鼠标位置，确定菜单位置。 <br />oContextMenu.style.top=event.clientY + document.body.scrollTop + 1; <br />oContextMenu.style.left=event.clientX + document.body.scrollLeft + 1; <br />oContextMenu.innerHTML=""; <br /> <br />//设定菜单的“状态”为“true” <br />var sContext = fnGetContextID(event.srcElement) <br />if (sContext!="") { <br />fnPopulate(sContext) <br />oContextMenu.setAttribute("status","true"); <br />event.returnValue=false; <br />} <br />else <br />event.returnValue=true <br />} <br />} <br />else{ <br />// 如果键盘菜单键没有按下，并且菜单的“状态”为“true”。 <br />if(oContextMenu.getAttribute("status")=="true"){ <br />if((oWorkItem.parentElement.id=="oContextMenu") &amp;&amp; (oWorkItem.getAttribute("component")=="menuitem"))<br />{ <br />fnFireContext(oWorkItem) <br />} <br />// 当鼠标离开菜单或单击菜单项后，重设菜单（隐藏）  <br />oContextMenu.style.display="none"; <br />oContextMenu.setAttribute("status","false"); <br />oContextMenu.releaseCapture(); <br />oContextMenu.innerHTML=""; <br />event.returnValue=false; <br />} <br />} <br />} <br />function fnPopulate(sID)<br />{ <br />var str="" <br />var elMenuRoot =  <br />document.all.contextDef.XMLDocument.childNodes(0).selectSingleNode('contextmenu[@id="' + sID + '"]'<br />) <br />if (elMenuRoot) { <br />for(var i=0;i&lt;elMenuRoot.childNodes.length;i++) <br />str+='&lt;span component="menuitem" menuid="' + elMenuRoot.childNodes[i].getAttribute("id") +'" id=oMenuItem' + i + '&gt;' + elMenuRoot.childNodes[i].getAttribute("value") + "&lt;/SPAN&gt;&lt;BR&gt;" <br />oContextMenu.innerHTML=str; <br />oContextMenu.style.display="block"; <br />oContextMenu.style.pixelHeight = oContextMenu.scrollHeight  <br />} <br />} <br /> <br />function fnChirpOn(){ <br />if((event.clientX&gt;0) &amp;&amp;(event.clientY&gt;0)&amp;&amp;(event.clientX&lt;document.body.offsetWidth)&amp;&amp;(event.clientY&lt;document.body.offsetHeight))<br />{ <br />oWorkItem=event.srcElement; <br />if(oWorkItem.getAttribute("component")=="menuitem"){ <br />oWorkItem.className = "selected" <br />} <br />} <br />} <br />function fnChirpOff(){ <br />if((event.clientX&gt;0) &amp;&amp; (event.clientY&gt;0) &amp;&amp; (event.clientX&lt;document.body.offsetWidth) &amp;&amp;(event.clientY&lt;document.body.offsetHeight))<br />{ <br />oWorkItem=event.srcElement; <br />if(oWorkItem.getAttribute("component")=="menuitem"){ <br />oWorkItem.className = "" <br />} <br />} <br />} <br /> <br />function fnInit(){ <br />if (oContextMenu) { <br />oContextMenu.style.width=180; <br />oContextMenu.style.height=document.body.offsetHeight/2; <br />oContextMenu.style.zIndex=2;  <br />//设置菜单样式  <br />document.oncontextmenu=fnSuppress; <br />} <br />} <br /> <br />function fnInContext(el) { <br />while (el!=null) { <br />if (el.id=="oContextMenu") return true <br />el = el.offsetParent <br />} <br />return false <br />} <br /> <br />function fnSuppress(){ <br />if (!(fnInContext(event.srcElement))) {  <br />oContextMenu.style.display="none"; <br />oContextMenu.setAttribute("status","false"); <br />oContextMenu.releaseCapture(); <br />bContextKey=true; <br />} <br />fnDetermine(); <br />bContextKey=false; <br />} <br /> <br />function javameng(){ <br />window.open("<a href="http://lucky.myrice.com&quot;,&quot;_blank&quot;,&quot;width=400,height=400,top=20,left=20">http://lucky.myrice.com","_blank","width=400,height=400,top=20,left=20</a>") <br />} <br /> <br />function fnFireContext(oItem) {  <br />// 自定义上下文菜单项的功能 <br />switch (oItem.menuid) { <br />case "viewsource": <br />location.href = "view-source:" + location.href <br />break; <br />case "back": <br />history.back() <br />break; <br />case "meng": <br />location.href="<a href="http://lucky.myrice.com">http://lucky.myrice.com</a>" <br />break; <br />case "calculate": <br />javameng() <br />break; <br />default: <br />alert("你点击的菜单项是:\n\n\n" + oItem.menuid +"啊！！！") <br />} <br />} <br />&lt;/SCRIPT&gt; <br /> <br />&lt;BODY onload="fnInit()" onclick="fnDetermine()" bgcolor="#ccffcc"&gt; <br />&lt;div status="false" onmouseover="fnChirpOn()" onmouseout="fnChirpOff()" id="oContextMenu" class="menu"&gt;&lt;/div&gt;这里放你任意的其他的东西！ ...&lt;br&gt;... 这里放你任意的其他的东西！ ...&lt;br&gt;... 这里放你任意的其他的东西！ ...&lt;br&gt;&lt;br&gt; <br />&lt;P contextmenu="demo"&gt;这里是利用上下文菜单的里子！你把鼠标移动到这里，然后单击鼠标又键，可以看到菜单内容！&lt;br&gt;这里是利用上下文菜单的里子！你把鼠标移动到这里，然后单击鼠标又键，可以看到菜单内容！&lt;br&gt;这里是利用上下文菜单的里子！你把鼠标移动到这里，然后单击鼠标又键，可以看到菜单内容！&lt;br&gt;这里是利用上下文菜单的里子！你把鼠标移动到这里，然后单击鼠标又键，可以看到菜单内容！&lt;br&gt;这里是利用上下文菜单的里子！你把鼠标移动到这里，然后单击鼠标又键，可以看到菜单内容！&lt;br&gt;&lt;/p&gt;&lt;p&gt;你也可以把鼠标放到下面的图象上面，点击又键！&lt;p&gt; <br />&lt;center&gt;&lt;IMG SRC="<a href="http://lucky.myrice.com/javabk1.jpg">http://lucky.myrice.com/javabk1.jpg</a>"　 <br />contextmenu="demob"&gt; <br />&lt;/body&gt; <br />&lt;/html&gt; </p>
		<p>______________________________________________________________________________________________<br />答2：<br />&lt;body&gt;<br />&lt;script language="javascript"&gt; <br />document.body.oncontextmenu=new Function('return false;');<br />&lt;/script&gt;  <br />&lt;/body&gt;<br /></p><img src ="http://www.blogjava.net/yeiwei/aggbug/105519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-22 11:54 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/22/105519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML Web services 基础结构</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/22/105517.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Thu, 22 Mar 2007 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/22/105517.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/105517.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/22/105517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/105517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/105517.html</trackback:ping><description><![CDATA[<strong>
				<p>若要在 Web 的多样性世界里取得成功，在涉及到操作系统、对象模型和编程语言的选择时，XML Web services不能有任何倾向性。同样，若要使 XML Web services像其他基于 Web 的技术一样被广泛采用，则它们必须是： <br /><br />松耦合的：如果对两个系统的唯一要求是要理解前面提到的自我描述的基于文本的消息，那么这两个系统就被认为是松耦合的。另一方面，紧耦合系统要求大量自定义系统开销来进行通信，并要求系统之间有更多的了解。 </p>
				<p>常见的通信：大概不会有人会在现在或不远的将来生成一个无法连接到 Internet 的操作系统，因此，需要提供常见的通信信道。同样，能够将几乎所有系统或设备连接到 Internet 的能力将确保这样的系统和设备能够为连接到 Internet 的所有其他系统或设备所使用。 </p>
				<p>通用数据格式：通过用现有的开放式标准而不是专用的封闭通信方法，任何支持同样的开放式标准的系统都能够理解 XML Web services。在采用自我描述的基于文本的消息时，XML Web services及其客户端无须知道每个基础系统的构成即可共享该消息，这使得自治系统和完全不同的系统之间能够进行通信。XML Web services使用 XML 实现此功能。 </p>
				<p>XML Web services采用一种基础结构，该基础结构提供下列内容：定位 XML Web services的发现机制、定义如何使用这些服务的服务说明以及通信时使用的标准连网形式。 <br /><br /><strong>XML Web services基础结构</strong></p>
				<p>XML Web services目录 XML Web services目录提供一个用以定位其他单位提供的 XML Web services的中心位置。XML Web services目录（如 UDDI注册表）充当此角色。XML Web services客户端可能或可能不需要引用 XML Web services的目录。 <br /><br />XML Web services发现 XML Web services发现是定位（或发现）使用 Web 服务描述语言 (WSDL) 对特定 XML Web services进行描述的一个或多个相关文档的过程。DISCO 规范定义定位服务说明的算法。如果 XML Web services客户端知道服务说明的位置，它们可以跳过发现过程。 </p>
				<p>XML Web services说明 若要了解如何与特定的 XML Web services进行交互，需要提供定义该 XML Web services支持何种交互操作的服务说明。XML Web services客户端必须知道如何与 XML Web services进行交互才可以使用该服务。</p>
				<p>XML Web services连网形式 为实现通用的通信，XML Web services使用开放式连网形式进行通信，该格式是任何能够支持最通用的 Web 标准的系统都可以理解的协议。SOAP 是 XML Web services通信的主要协议。</p>
		</strong><img src ="http://www.blogjava.net/yeiwei/aggbug/105517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-22 11:52 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/22/105517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转1片文章</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/14/103807.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 14 Mar 2007 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/14/103807.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/103807.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/14/103807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/103807.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/103807.html</trackback:ping><description><![CDATA[媳妇说：“煮淡一点你就嫌没有味道，现在煮咸一点你却说咽不下。你究竟想怎么样？”母亲一见儿子回来，二话不说便把饭菜往嘴里送。她怒瞪他一眼。他试了一口，马上吐出来，儿子说：“我不是说过了吗，妈有病不能吃太咸！” <br /><br />　　“*****以后你来煮！”媳妇怒气冲冲地回房。 <br /><br />　　儿子无奈地轻叹一声，然后对母亲说：“妈，别吃了，我去煮碗面条给你？” <br /><br />　　“仔，你是不是有话想跟妈说，是就说好了，别憋在心里！” <br /><br />　　“妈，公司下个月升我职，我会很忙，至于老婆，她说很想出来工作，所以……” <br /><br />　　母亲马上意识到儿子的意思：“仔，不要送妈去老人院。”声音似乎在哀求。 <br /><br />　　儿子沉默片刻，他是在寻找更好的理由。“妈，其实老人院并没有甚么不好？知道老婆一但工作，一定没有时间好好服侍你。老人院有吃有住有人服侍照顾，不是比在家里好得多吗？” <br /><br />　　“可是，阿财叔他……” <br /><br />　　洗了澡，草草吃了一碗方便面，儿子便到书房去。他茫然地伫立于窗前，有些犹豫不决。母亲年轻便守寡，含辛茹苦将他抚养成人，供他出国读书。但她从不用年轻时的牺牲当作要胁他孝顺的筹码，反而是妻子以婚姻要胁他！真的要让母亲住老人院吗？他问自己，他有些不忍。 <br /><br />　　“可以陪你下半世的人是你老婆，难道是你妈吗？”阿财叔的儿子总是这样提醒他。 <br /><br />　　“你妈都这么老了，好命的话可以活多几年，为何不趁这几年好好孝顺她呢？树欲静而风不息，子欲养而亲不在啊！”亲戚总是这样劝他。 <br /><br />　　儿子不敢再想下去，深怕自己真的会改变初衷。 <br /><br />　　晚，太阳收敛起灼热的金光，躲在山后憩息。一间建在郊外山岗的一座贵族老人院。 <br /><br />　　是的，钱用得越多，儿子才心安理得。当儿子领着母亲步入大厅时，崭新的电视机，42英寸的荧幕正播放着一部喜剧，但观众一点笑声也没有。 <br /><br />　　几个衣着一样，发型一样的老妪歪歪斜斜地坐在发沙上，神情呆滞而落寞。有个老人在自言语，有个正缓缓弯下腰，想去捡掉在地上的一块饼干吃。儿子知道母亲喜欢光亮，所以为她选了一间阳光充足的房间。从窗口望出去，树荫下，一片芳草如茵。几名护士推着坐在轮椅的老者在夕阳下散步，四周悄然寂静得令人心酸。纵是夕阳无限好，毕竟已到了黄昏，他心中低低叹息。 <br /><br />　　“妈，我……我要走了！”母亲只能点头。他走时，母亲频频挥手，她张着没有牙的嘴，苍白干燥的咀唇在嗫嚅着，一副欲语还休的样子。儿子这才注意到母亲银灰色的头发，深陷的眼窝以及打着细褶的皱脸。母亲，真的老了！ <br /><br />　　他霍然记起一则儿时旧事。那年他才6岁，母亲有事回乡，不便携他同行，于是把他寄住在阿财叔家几天。母亲临走时，他惊恐地抱着母亲的腿不肯放，伤心大声号哭道：“妈妈不要丢下我！妈妈不要走！”最后母亲没有丢下他。他连忙离开房间，顺手把门关上，不敢回头，深恐那记忆像鬼魅似地追缠而来。 <br /><br />　　他回到家，妻子与岳母正疯狂的把母亲房里的一切扔个不亦乐乎。身高3英寸的奖杯──那是他小学作文比赛《我的母亲》第1名的胜利品！华英字典──那是母亲整个月省吃省用所买给他的第1份生日礼物！还有母亲临睡前要擦的风湿油，没有他为她擦，带去老人院又有甚么意义呢？ <br /><br />　　“够了，别再扔了！”儿子怒吼道。 <br /><br />　　“这么多垃圾，不把它扔掉，怎么放得下我的东西。”岳母没好气地说。 <br /><br />　　“就是嘛！你赶快把你妈那张烂床给抬出去，我明天要为我妈添张新的！” <br /><br />　　一堆童年的照片展现在儿子眼前，那是母亲带他到动物园和游乐园拍的照片。 <br /><br />　　“它******，一样也不能丢！” <br /><br />　　“你这算甚态度？对我妈这么大声，我要你向我妈道歉！”(楼主注：这算什么儿子，把自己的母亲送到养老院，然后把岳母接来住，要就一起去送，要就留自己的母亲） <br /><br />　　“我娶你就要爱你的母亲，为甚么？嫁给我就不能爱我的母亲？” <br /><br />　　雨后的黑夜分外冷寂，街道萧瑟，行人车辆格外稀少。一辆宝马在路上飞驰，频频闯红灯，陷黄格，呼一声又飞驰而过。那辆轿车一路奔往山岗上的那间老人院，停车直奔上楼，推开母亲卧房的门。他幽灵似地站着，母亲正抚摸着风湿痛的双腿低泣。她见到儿子手中正拿着那瓶风湿油，显然感到安慰的说：“妈忘了带，幸好你拿来！”他走到母亲身边，跪了下来。“很晚了，妈自己擦可以了，你明天还要上班，回去吧！” <br /><br />　　他嗫嚅片刻，终于忍不住啜泣道：“妈，对不起，请原谅我！我们回家去吧！” <br /><br />　　～～后语～～ <br /><br />　　随着自己愈长大，看着父母亲脸庞从年轻变憔悴，头发从乌丝变白发,动作从迅捷变缓慢，多心疼！父母亲总是将最好、最宝贵的留给我们，像蜡烛不停的燃烧自己，照亮孩子！而我呢？有没有腾出一个空间给我的父母，或者只是在当我需要停泊岸时，才会想起他们…… <br /><br />　　其实父母亲要的真的不多，只是一句随意的问候「爸、妈，你们今天好吗？」随意买的宵夜，煮一顿再普通不过的晚餐，睡前帮他们盖盖被子，天冷帮他们添衣服、戴手套....都能让他们高兴温馨很久。有时，我常在想：我希望我的子女以后如何对我。那现在，我有没有如此对待我的父母？我相信，人是环环相扣的；现在，你如何对待你的父母；以后，你的子女就如何待你。 <br /><br />　　朋友，人世间最难报的就是父母恩，愿我们都能：以反哺之心奉敬父母，以感恩之心孝顺父母！ <br /><br />　　～共勉之～ <br /><br />　　生命不要求我们成为最好的，只要求我们作最大的努力！ <br /><br />　　老人安养院墙上发现的一篇文章 <br /><br />　　孩子！当你还很小的时候，我花了很多时间，教你慢慢用汤匙、用筷子吃东西。教你系鞋带、扣扣子、溜滑梯、教你穿衣服、梳头发、拧鼻涕。这些和你在一起的点点滴滴，是多么的令我怀念不已。所以，当我想不起来，接不上话时，请给我一点时间，等我一下，让我再想一想……极可能最后连要说什么，我也一并忘记。孩子！你忘记我们练习了好几百回，才学会的第一首娃娃歌吗？是否还记得每天总要我绞尽脑汁，去回答不知道你从哪里冒出来的吗？所以，当我重复又重复说着老掉牙的故事，哼着我孩提时代的儿歌时，体谅我。让我继续沉醉在这些回忆中吧！切望你，也能陪着我闲话家常吧！孩子，现在我常忘了扣扣子、系鞋带。吃饭时，会弄脏衣服，梳头发时手还会不停的抖，不要催促我，要对我多一点耐心和温柔，只要有你在一起，就会有很多的温暖涌上心头。 <br /><br />　　孩子！如今，我的脚站也站不稳，走也走不动。所以，请你紧紧的握着我的手，陪着我，慢慢的。就像当年一样，我带着你一步一步地走。 <br /><br />　　若为人子女也不懂得如何体谅他们，那他们便只能于痛苦中渡过余生，黑暗中逝去……<img src ="http://www.blogjava.net/yeiwei/aggbug/103807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-14 16:16 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/14/103807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows应用程序版的google搜索引擎源码</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/09/102766.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 09 Mar 2007 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/09/102766.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/102766.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/09/102766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/102766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/102766.html</trackback:ping><description><![CDATA[<p>很多时候感觉用<a href="http://www.google.com/"><font color="#003366">www.google.com</font></a>搜索网站挺麻烦的，查阅MSDN的知识库后用C#写了这个windows应用程序版的google搜索引擎，主要调用了google开放出来的web service,不过搜索时速度还不是很快，但至少省去了右键[在新窗口中打开]的麻烦，以下是程序的源码，虽然挺长的，不过关键代码并不多，抛砖引玉吧。</p>
		<br />
		<p>//Form1.cs</p>
		<br />
		<p>using System;<br />using System.Drawing;<br />using System.Collections;<br />using System.ComponentModel;<br />using System.Windows.Forms;<br />using System.Data;<br />using System.Diagnostics;</p>
		<br />
		<p>namespace WindowsApplication2<br />{<br /><br /> public class Form1 : System.Windows.Forms.Form<br /> {<br />  private System.Windows.Forms.TextBox textBox2;<br />  private System.Windows.Forms.Button button1;<br />  private System.Windows.Forms.Label label1;<br />  private System.Windows.Forms.Label label2;<br />  private System.Windows.Forms.ListBox listBox1;<br />  private String sKey;<br /><br />  private System.ComponentModel.Container components = null;</p>
		<br />
		<p>  public Form1()<br />  {<br />   InitializeComponent();<br />  }</p>
		<br />
		<p>
				<br />  protected override void Dispose( bool disposing )<br />  {<br />   if( disposing )<br />   {<br />    if (components != null) <br />    {<br />     components.Dispose();<br />    }<br />   }<br />   base.Dispose( disposing );<br />  }</p>
		<br />
		<p>  #region Windows Form Designer generated code<br /><br />  private void InitializeComponent()<br />  {<br />   this.textBox2 = new System.Windows.Forms.TextBox();<br />   this.button1 = new System.Windows.Forms.Button();<br />   this.label1 = new System.Windows.Forms.Label();<br />   this.label2 = new System.Windows.Forms.Label();<br />   this.listBox1 = new System.Windows.Forms.ListBox();<br />   this.SuspendLayout();<br />   // <br />   // textBox2<br />   // <br />   this.textBox2.Location = new System.Drawing.Point(8, 32);<br />   this.textBox2.Name = "textBox2";<br />   this.textBox2.Size = new System.Drawing.Size(240, 21);<br />   this.textBox2.TabIndex = 1;<br />   this.textBox2.Text = "ERP";<br />   // <br />   // button1<br />   // <br />   this.button1.Location = new System.Drawing.Point(264, 32);<br />   this.button1.Name = "button1";<br />   this.button1.TabIndex = 2;<br />   this.button1.Text = "搜索";<br />   this.button1.Click += new System.EventHandler(this.button1_Click);<br />   // <br />   // label1<br />   // <br />   this.label1.BackColor = System.Drawing.SystemColors.Info;<br />   this.label1.Location = new System.Drawing.Point(136, 8);<br />   this.label1.Name = "label1";<br />   this.label1.Size = new System.Drawing.Size(104, 16);<br />   this.label1.TabIndex = 3;<br />   this.label1.Text = "单击此处获得帮助";<br />   this.label1.Click += new System.EventHandler(this.label1_Click);<br />   // <br />   // label2<br />   // <br />   this.label2.Location = new System.Drawing.Point(8, 8);<br />   this.label2.Name = "label2";<br />   this.label2.TabIndex = 4;<br />   this.label2.Text = "请输入关键字： ";<br />   // <br />   // listBox1<br />   // <br />   this.listBox1.HorizontalScrollbar = true;<br />   this.listBox1.ItemHeight = 12;<br />   this.listBox1.Location = new System.Drawing.Point(8, 64);<br />   this.listBox1.Name = "listBox1";<br />   this.listBox1.Size = new System.Drawing.Size(360, 292);<br />   this.listBox1.TabIndex = 5;<br />   this.listBox1.DoubleClick += new System.EventHandler(this.listBox1_DoubleClick);<br />   // <br />   // Form1<br />   // <br />   this.AcceptButton = this.button1;<br />   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);<br />   this.ClientSize = new System.Drawing.Size(376, 365);<br />   this.Controls.Add(this.listBox1);<br />   this.Controls.Add(this.label2);<br />   this.Controls.Add(this.label1);<br />   this.Controls.Add(this.button1);<br />   this.Controls.Add(this.textBox2);<br />   this.Name = "Form1";<br />   this.Text = "Google搜索引擎 V1.0 by <a href="mailto:yzwgh@sina.com"><font color="#003366">yzwgh@sina.com</font></a>";<br />   this.ResumeLayout(false);</p>
		<br />
		<p>  }<br />  #endregion</p>
		<br />
		<p>
				<br />  [STAThread]<br />  static void Main() <br />  {<br />   Application.Run(new Form1());<br />  }</p>
		<br />
		<p>  private void button1_Click(object sender, System.EventArgs e)<br />  {<br />   try<br />   {<br />    sKey="R1SnlcZQFHIBYlBCYdip3j1ERCvueU2Z";<br />    googleapi.GoogleSearchService s=new googleapi.GoogleSearchService();<br /><br />   <br />    googleapi.GoogleSearchResult r=s.doGoogleSearch(sKey, textBox2.Text, <br />     0, 10, false, "", false, "", "", "");<br />    googleapi.ResultElement[] re=r.resultElements;<br />    this.listBox1.Items.Clear();<br />    for (int i=0;i&lt;re.Length;i++)<br />    {<br /><br />     this.listBox1.Items.Add((object)(re<i>.title));<br />     this.listBox1.Items.Add((object)(re<i>.URL));<br /><br />    }<br />   }<br />   catch(Exception eee)<br />   {<br />    MessageBox.Show(eee.Message,this.Text );<br />   }</i></i></p>
		<br />
		<p>  }</p>
		<br />
		<p>  private void listBox1_DoubleClick(object sender, System.EventArgs e)<br />  {<br />   try<br />   {<br />    String url;<br />    url=listBox1.Text;<br />    Process p  = Process.Start(@url);<br />   }<br />   catch (Exception ee)<br />   {<br />    MessageBox.Show(ee.Message);<br />   }<br />  }</p>
		<br />
		<p>  private void label1_Click(object sender, System.EventArgs e)<br />  {<br />   String s;<br />   s=this.Text + "\n";<br />   s=s+"作者：yzwgh\n";<br />   s=s+"EMail：<a href="mailto:yzwgh@sina.com\n"><font color="#003366">yzwgh@sina.com\n</font></a>";<br />   s=s+"双击下面的网址可打开相应的链接。";<br />   MessageBox.Show(s,this.Text );<br />  }<br /> }<br />}<br /></p><img src ="http://www.blogjava.net/yeiwei/aggbug/102766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-09 11:08 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/09/102766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>部署水晶报表时的常见问题及解决方案</title><link>http://www.blogjava.net/yeiwei/archive/2007/03/09/102762.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Fri, 09 Mar 2007 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/03/09/102762.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/102762.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/03/09/102762.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/102762.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/102762.html</trackback:ping><description><![CDATA[<p>目录：<br />1、载入报表时报错<br />2、部署到 Windows 98 / ME 时，出错："Load Report Failed" <br />3、在Win98的客户端运行提示"该字段名未知"<br />4、分发到客户机时“查询引擎出错”<br />5、load crpe32.dll failed<br />6、在 ASP.NET 程序中加载报表时，出错："Load Report Failed" <br />7、部署 .NET 9.1 程序到 Windows 98 时，出错："Load Report Failed" <br />------------------------------------------------<br />1、载入报表时报错<br />问题出在报表发布上。<br />发布使用水晶报表的项目需要包含三种组件：报表（*.rpt）、模块（*.msm）、运行库（*.msm），这些模块文件是在 C:\Program Files\Common Files\Merge Modules\ 目录里面。<br />(1)报表（*.rpt）<br />用户编程时创建的水晶报表文件。<br />(2)模块（*.msm）<br />Managed.msm 该模块包含了CR for VS .NET 的管理模块，如 CrystalDecisions、CrystalReports.Engine.DLL、CrystalDecisions.Web.DLL, 和 CrystalDecisions.Windows.Forms.DLL……<br />Managed_chs.msm 是该模块的中文版语言支持。<br />Database_Access.msm 该模块包含了数据库的驱动、与不同数据库的联结、报表导出为 RTF 和 HTML 格式的文档和图表组件。 <br />Database_Access_chs.msm 是此模块的中文版语言支持。<br />Regwiz.msm 注册信息模块，非常重要，必需在这个模块输入水晶报表的注册序列号，如果不填，编译的时候就无法通过<br />(3)运行库（*.msm）<br />如果报表文件使用了 ADO.NET 的 dataset 数据集对象，那么 VC_CRT.msm 和 VC_STL.msm 模块也必须包含在安装工程中。而且这两个模块的文件安装属性的"Module Retargetable Folder"项必须修改成为系统目录<br />在VS.NET安装工程中，系统检测出来的依赖项只有 dotNETFXRedist_x86_chs.msm 和 Managed.msm这两个模块，其他的模块我们需要手动加入。<br />(1)在解决方案资源管理器里，右键单击安装项目选择"添加"-〉"合并模块（M）"<br />(2)在"添加模块"对话窗体，选择 Managed_chs.msm 、Database_Access, Database_Access_chs, regwiz、VC_CRT.msm 和 VC_STL.msm 模块<br />(3)重新生成安装项目，没问题，只是生成的安装程序一下子大了七、八兆。<br />-------------------------<br />2、部署到 Windows 98 / ME 时，出错："Load Report Failed" <br />是因为查询引擎 DLL(CRQE.dll)在客户计算机上没有正确注册。<br />要解决这个问题，可以在客户计算机上手动注册 CRQE.dll，使用下面的命令：<br />regsvr32 "C:\program files\common files\Crystal Decisions\1.0\bin\CRQE.dll"<br />如果 CRQE.dll 没有成功注册，并且问题继续存在，在客户计算机上检查 ATL.dll 的版本。ATL.dll for Windows 98/ME 正确的版本是 3.0.8449。<br />通过使用下面三种方法中的任意一种方法，可以找到并注册正确版本的 ATL.dll。<br />(1)在客户计算机上装 IE6.0。<br />(2)在客户计算机上，手动复制和注册 ATL.dll，然后运行用于 Crystal Reports 分发的安装包。<br />(2)将 ATL.msm 合并模块添加到安装工程，ATL.msm 是 Visual Studio installer 1.1 的一部分，可以去微软的网站<a href="http://msdn.microsoft.com/vstudio/downloads/tools/vsi11/download.aspx"><font color="#003366">http://msdn.microsoft.com/vstudio/downloads/tools/vsi11/download.aspx</font></a>下载， 添加办法同上。<br />-------------------------<br />3、在Win98的客户端运行提示"该字段名未知"<br />报表在Win2000的客户端一切正常，在Win98的客户端运行提示"该字段名未知"？<br />是因为报表使用到的 sql server 数据库中的字段名为中文的缘故，将其字段名改名为英文字段名。<br />-------------------------<br />4、分发到客户机时“查询引擎出错”<br />(1)“安装项目”要包含下列合并模块：<br />VC_CRT.msm <br />VC_STL.msm <br />(2)此外，确保 Msvcr70.dll 和 Msvcp70.dll 在客户计算机的“系统目录”里。<br />-------------------------<br />5、load crpe32.dll failed<br />下面是cr9net_deployment.pdf说明中的部署Crystal Report 9的步骤：<br />打开 Windows 应用程序。 <br />在解决方案资源管理器中，右击 Windows 应用程序解决方案，指向“添加”，然后单击“新建项目”。 <br />在“添加新项目”对话框中，选择“项目类型”窗格中的“安装和部署项目”，然后选择“模板”窗格中的“安装项目”。单击“确定”按钮。 <br />在解决方案资源管理中，右击安装项目，指向“添加”，然后单击“项目输出”。 <br />在“添加项目输出组”中，选择“主输出”，然后单击“确定”。 <br />将自动添加所有依赖项，如 dotnetfxredist_x86_enu.msm和dotnetcrystalreports.msm。<br />需要将dotnetcrystalreports.msm排除在项目之外，在解决方案资源管理器中右击这个模块的右键，选择“排除”。 <br />在解决方案资源管理器中，右击安装项目，指向“添加”，然后单击“合并模块”。 <br />在“添加模块”对话框中，选择下列要添加到安装项目的合并模块，然后单击“打开”： <br />reportengine.msm, crnetruntime.msm, license.msm<br />mapping.msm （可选，当在报表中使用了geographic maps时） <br />VC_CRT.msm、VC_STL.msm（ 如果您部署的 Windows 应用程序使用 ADO.NET 数据集，则还需要包括 VC_CRT 和 VC_STL 合并模块）<br />在解决方案资源管理器中，右击 license.msm 文件，然后选择“属性”。 <br />在“属性”窗口中，展开 MergeModuleProperties，然后在“许可证密钥”属性框中输入一个有效的许可证密钥。 <br />注意   每当部署 Crystal Reports 应用程序时，必须提供许可证密钥。 <br />从“生成”菜单中，选择“生成解决方案”以生成应用程序。<br />-------------------------<br />6、在 ASP.NET 程序中加载报表时，出错："Load Report Failed" <br />确保 ASPNET 本地用户对报表所在的文件夹有“完全控制”的权限。<br />-------------------------<br />7、部署 .NET 9.1 程序到 Windows 98 时，出错："Load Report Failed" <br />是因为查询引擎 DLL(CRQE.dll)在客户计算机上没有正确注册。<br />要解决这个问题，从开发计算机复制 Dbghelp.dll 到客户计算机的"C:Windows\system32" 文件夹。</p><img src ="http://www.blogjava.net/yeiwei/aggbug/102762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-03-09 11:02 <a href="http://www.blogjava.net/yeiwei/archive/2007/03/09/102762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NET环境下水晶报表使用总结</title><link>http://www.blogjava.net/yeiwei/archive/2007/01/04/91785.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Thu, 04 Jan 2007 08:30:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/01/04/91785.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/91785.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/01/04/91785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/91785.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/91785.html</trackback:ping><description><![CDATA[一、在使用自带的水晶报表时，请注册，否则只能使用30次
<p><br />二、使用CrystalReportViewer进行预览</p><p>crystalreportviewer控件允许在应用程序中查看 Crystal Report。ReportSource 属性用于设置要查看哪个报表。该属性设置之后，报表显示在查看器中。报表源可以是ReportDocument、报表文件的路径，也可以是强类型报表。<br />1.打开“工具箱”，并将一个 CrystalReportViewer 拖到窗体上，我们命名为rptVew。 <br />2.通过拖放操作将 Windows 窗体查看器调整到希望的大小并将其移动到所需位置。 <br />3.当运行应用程序时，报表将显示在查看器中。<br />三、创建新报表<br />1.指向“添加”，单击“添加新项”。 <br />2.在“添加新项”对话框中，从“模板”区域选择 Crystal Report，将报表命名为rptClient，单击“打开”。 <br />3.在 Crystal Report 库中，选择下列选项之一： <br />?使用报表专家 — 指导您完成报表的创建过程，并将您的选择添加到 Crystal Report Designer。 <br />?作为空白报表 — 打开 Crystal Report Designer。 <br />?来自于现有的报表 — 创建新报表，它与指定的另一报表设计相同。 <br />注意 Crystal Report 库包含许多专家，可以指导您完成数个特定类型报表的创建工作。您可能希望使用专家来创建最初的报表，以确定哪种报表构造方法适合您的需要。<br />4.单击“确定”按钮。 <br />如果选择使用“报表专家”，便会出现“报表专家”对话框，并带有数据资源管理器。为每个文件夹选择所需数据，完成“报表专家”选项卡界面上的操作，然后单击“完成”来访问 Crystal Report Designer 和您的报表<br />四、是否需要动态设置数据源？<br />Crystal Reports 通过数据库驱动程序与数据库连接。每个驱动程序都被编写为可处理特定数据库类型或数据库访问技术。 <br />拉和推模型<br />为了向开发人员提供最灵活的数据访问方法，Crystal Reports 数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。 <br />拉模型<br /> <br /> <br /><img alt="" hspace="0" src="http://www.microsoft.com/china/community/Columns/Lihonggen/image/6-1.jpg" align="absMiddle" border="0" /></p><p>在拉模型中，驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时，与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理，不需要开发人员编写代码。如果在运行时无须编写任何特殊代码，则使用拉模型。<br />推模型</p><p><img height="155" alt="" hspace="0" src="http://www.microsoft.com/china/community/Columns/Lihonggen/image/6-2.jpg" width="529" align="absMiddle" border="0" /></p><p>相反，推模型需要开发人员编写代码以连接到数据库，执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集，并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中，并在 Crystal Reports 收到数据之前先将数据筛选出来。 </p><p><br />四、从 ADO.NET 数据集制作报表<br />从数据库创建数据集对象<br />1.在项目中新建一个架构文件： <br />a.在解决方案资源管理器中，右击项目名，指向“添加”，然后单击“添加新项”。 <br />b.在“添加新项”对话框的“类别”区域，展开文件夹，然后选择“数据”。 <br />c.在“模板”区域选择“数据集”。 <br />d.接受默认名称 Dataset1.xsd。 <br />这就创建了一个新的架构文件 (Dataset1.xsd)，以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中。 <br />2.指定数据库位置： <br />a.在服务器资源管理器中，右击“数据连接”并选择“添加连接”。 <br />b.在“数据链接属性”对话框中，单击“提供程序”选项卡，然后选择一个提供程序（例如 Microsoft OLE DB Provider for SQL Server）。 <br />c.单击“连接”选项卡，然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。 <br />d.单击“确定”按钮。 <br />此时，您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。 <br />3.在解决方案资源管理器中，双击 Dataset1.xsd （如果它尚不是活动视图）。 <br />Dataset1.xsd 现在应显示在“数据集”选项卡中。 <br />4.若要为数据集建立架构，请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上。 <br />5.单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。 <br />6.在“生成”菜单上，单击“生成”为项目生成数据集对象。 <br />ADO.NET 数据集对象提供数据的描述，从它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表。 <br />请在使用“报表专家”创建新报表时调用“数据库专家”。或者，要从一个已经使用 ADO.NET 建立好的报表中访问“数据库专家”，请在 Report Designer 中右击，指向“数据库”，然后单击“添加/删除数据库”。<br />将报表连接到 ADO.NET 数据集对象 <br />1.在“数据库专家”中，展开“项目数据”文件夹。 <br />2.展开“ADO.NET 数据集”文件夹。 <br />3.选择所需数据集对象。 <br />例如，如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象，则应该选择“WindowsApplication1.Dataset1”。 <br />4.选择要向报表中添加的表，和使用其他数据源一样。 </p><p><br />五、动态改变数据源的代码<br />Dim dsdataSet As New DataSet()<br />Dim oRpt As New rptClient() '已建立的报表rptClient<br />请读者自行填充数据集dsdataSet <br />'使用“报表引擎”对象模型将填充的数据集,传递给报表<br />oRpt.SetDataSource(dsdataSet.Tables(0))<br />' 将带有数据的报表对象绑定到 Windows 窗体查看器，rptVew（CrystalReportViewer控件）<br />rptVew.ReportSource = oRpt<br />注意 FillDataSet 方法可连接到指定的数据库，提取数据，然后断开数据库连接。如果您希望将数据库中的多个表添加到报表中，请使用 SQL JOIN 语句将这些表联接在一起；然后在 FillDataSet 方法中指定一个结果表<br />六、创建主从报表<br />在报表中，有许多报表是主从表结构，比如订单与订单商品明细，订单是一个表中的一条记录，而分录是另一个表中的多条记录，两个表通过一个字段关联起来，这种报表可利用其分组功能实现，<br />1.新建一个工程<br />2.往FORM1中添加一个CrystalReportViewer控件<br />3.在服务噐资源管理器中连接到SQL SERVER 2000上的Northwind数据库<br />4.添加一个数据集Dataset1,将服务器资源管理器中的Orders和 Order Details加入到数据集中。<br />5.添加一个水晶报表，使用报表专家，在项目数据中选择“ADO.NET数据集”，插入表Orders和 Order Details，“链接”中是关联字段的链接，在“字段”中选择要显示的主表和明细表的字段，组中选择分组依据为Orders表OrdersID字段，总计，图表，选择（可进行筛选），样式（可设置报表标题），可自行设置。设置完后，点击完成。<br />6.在报表设计器中调整需要显示的字段的位置、宽度等。<br />7.在窗口中添加代码。</p><p>private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br />Dim oRpt As New CrystalReport1()<br />Dim dsdataSet As New Dataset1()</p><p>dim CN As New Data.SqlClient.SqlConnection("data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa")<br />CN.Open()<br />Dim daOrders As New Data.SqlClient.SqlDataAdapter("select * from orders", CN)<br />daOrders.Fill(dsdataSet, "orders")</p><p>dim daDetails As New Data.SqlClient.SqlDataAdapter("select * from [Order Details]", CN)<br />daDetails.Fill(dsdataSet, "Order Details")</p><p>'使用“报表引擎”对象模型将填充的数据集,传递给报表<br />oRpt.SetDataSource(dsdataSet)<br />CrystalReportViewer1.ReportSource = oRpt<br />End Sub<br />8、运行程序<br /><img style="WIDTH: 538px; HEIGHT: 236px" height="423" alt="" hspace="0" src="http://www.microsoft.com/china/community/Columns/Lihonggen/image/6-3.jpg" width="560" align="absMiddle" border="0" /></p><p>七、用程序改变报表中text的文本<br />Dim GetTextObject As TextObject<br />' 按名称获取 ReportObject，将其转换为 TextObject，并返回此对象。<br />GetTextObject = orpt.ReportDefinition.ReportObjects.Item("text13")<br />GetTextObject.Text = "XXXX系统"</p><p>代码如下：<br />总结：水晶报表具有非常强大的功能，还可进行导出WORD、EXCEL、RTF等文件，还可生成复杂、漂亮图表，是进行WEB和WINDOWS报表开发的利器。</p><img src ="http://www.blogjava.net/yeiwei/aggbug/91785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-01-04 16:30 <a href="http://www.blogjava.net/yeiwei/archive/2007/01/04/91785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> .NET环境下水晶报表使用总结(VB.NET)</title><link>http://www.blogjava.net/yeiwei/archive/2007/01/04/91783.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Thu, 04 Jan 2007 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2007/01/04/91783.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/91783.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2007/01/04/91783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/91783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/91783.html</trackback:ping><description><![CDATA[水晶报表是一个优秀的报表开发工具，本人在开发通用管理系统的时候，所有报表都使用水晶报表，其简单、易用和强大的功能令笔者倍加喜爱，现将水晶报表使用手记呈现给大家。  <br /><br />　　一、在使用自带的水晶报表时，请注册，否则只能使用30次 <br /><br />　　水晶报表注册码 <br />　　注册号:6707437608 <br />　　密码:AAP5GKS0000GDE100DS  <br /><br />　　二、使用CrystalReportViewer进行预览 <br />　　CrystalReportViewer控件允许在应用程序中查看 Crystal Report。ReportSource 属性用于设置要查看哪个报表。该属性设置之后，报表显示在查看器中。报表源可以是ReportDocument、报表文件的路径，也可以是强类型报表。 <br /><br />　　1. 打开“工具箱”，并将一个 CrystalReportViewer 拖到窗体上，我们命名为rptVew。  <br /><br />　　2. 通过拖放操作将 Windows 窗体查看器调整到希望的大小并将其移动到所需位置。  <br /><br />　　3. 当运行应用程序时，报表将显示在查看器中。 <br /><br />　　三、创建新报表 <br /><br />　　1. 指向“添加”，单击“添加新项”。  <br /><br />　　2. 在“添加新项”对话框中，从“模板”区域选择 Crystal Report，将报表命名为rptClient，单击“打开”。  <br /><br />　　3. 在 Crystal Report 库中，选择下列选项之一：  <br /><br />　　　· 使用报表专家 — 指导您完成报表的创建过程，并将您的选择添加到 Crystal Report Designer。  <br /><br />　　　· 作为空白报表 — 打开 Crystal Report Designer。  <br /><br />　　　· 来自于现有的报表 — 创建新报表，它与指定的另一报表设计相同。  <br /><br />　　注意 Crystal Report 库包含许多专家，可以指导您完成数个特定类型报表的创建工作。您可能希望使用专家来创建最初的报表，以确定哪种报表构造方法适合您的需要。 <br /><br />　　4. 单击“确定”按钮。  <br /><br />　　如果选择使用“报表专家”，便会出现“报表专家”对话框，并带有数据资源管理器。为每个文件夹选择所需数据，完成“报表专家”选项卡界面上的操作，然后单击“完成”来访问 Crystal Report Designer 和您的报表 <br /><br />　　四、是否需要动态设置数据源？ <br /><br />　　Crystal Reports 通过数据库驱动程序与数据库连接。每个驱动程序都被编写为可处理特定数据库类型或数据库访问技术。  <br /><br />　　拉和推模型 <br /><br />　　为了向开发人员提供最灵活的数据访问方法，Crystal Reports 数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。  <br /><br />　　拉模型 <br /><br />　　在拉模型中，驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时，与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理，不需要开发人员编写代码。如果在运行时无须编写任何特殊代码，则使用拉模型。 <br /><br />　　推模型 <br /><br />　　相反，推模型需要开发人员编写代码以连接到数据库，执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集，并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中，并在 Crystal Reports 收到数据之前先将数据筛选出来。  <br />　　四、从 ADO.NET 数据集制作报表 <br /><br />　　从数据库创建数据集对象  <br /><br />　　1. 在项目中新建一个架构文件：  <br /><br />　　　a. 在解决方案资源管理器中，右击项目名，指向“添加”，然后单击“添加新项”。  <br /><br />　　　b. 在“添加新项”对话框的“类别”区域，展开文件夹，然后选择“数据”。  <br /><br />　　　c. 在“模板”区域选择“数据集”。  <br /><br />　　　d. 接受默认名称 Dataset1.xsd。  <br /><br />　　这就创建了一个新的架构文件 (Dataset1.xsd)，以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中。  <br /><br />　　2. 指定数据库位置：  <br /><br />　　　a. 在服务器资源管理器中，右击“数据连接”并选择“添加连接”。  <br /><br />　　　b. 在“数据链接属性”对话框中，单击“提供程序”选项卡，然后选择一个提供程序（例如 Microsoft OLE DB Provider for SQL Server）。  <br /><br />　　　c. 单击“连接”选项卡，然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。  <br /><br />　　　d. 单击“确定”按钮。  <br /><br />　　　此时，您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。  <br /><br />　　3. 在解决方案资源管理器中，双击 Dataset1.xsd （如果它尚不是活动视图）。  <br /><br />　　　Dataset1.xsd 现在应显示在“数据集”选项卡中。  <br /><br />　　4. 若要为数据集建立架构，请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上。  <br /><br />　　5. 单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。  <br /><br />　　6. 在“生成”菜单上，单击“生成”为项目生成数据集对象。  <br /><br />　　ADO.NET 数据集对象提供数据的描述，从它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表。  <br /><br />　　请在使用“报表专家”创建新报表时调用“数据库专家”。或者，要从一个已经使用 ADO.NET 建立好的报表中访问“数据库专家”，请在 Report Designer 中右击，指向“数据库”，然后单击“添加/删除数据库”。 <br /><br />　　将报表连接到 ADO.NET 数据集对象  <br /><br />　　1. 在“数据库专家”中，展开“项目数据”文件夹。  <br /><br />　　2. 展开“ADO.NET 数据集”文件夹。  <br /><br />　　3. 选择所需数据集对象。  <br /><br />　　例如，如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象，则应该选择“WindowsApplication1.Dataset1”。  <br /><br />　　4. 选择要向报表中添加的表，和使用其他数据源一样。  <br /><br />　　五、动态改变数据源的代码  <br /><br />Dim dsdataSet As New DataSet() <br /><br />Dim oRpt As New rptClient() '已建立的报表rptClient <br /><br />　　请读者自行填充数据集dsdataSet  <br /><br /><br />'使用“报表引擎”对象模型将填充的数据集,传递给报表 <br /><br />oRpt.SetDataSource(dsdataSet.Tables(0)) <br /><br />' 将带有数据的报表对象绑定到 Windows 窗体查看器，rptVew（CrystalReportViewer控件） <br /><br />rptVew.ReportSource = oRpt <br /><br />　　注意 FillDataSet 方法可连接到指定的数据库，提取数据，然后断开数据库连接。如果您希望将数据库中的多个表添加到报表中，请使用 SQL JOIN 语句将这些表联接在一起；然后在 FillDataSet 方法中指定一个结果表 <br /><br />　　六、创建主从报表 <br /><br />　　在报表中，有许多报表是主从表结构，比如订单与订单商品明细，订单是一个表中的一条记录，而分录是另一个表中的多条记录，两个表通过一个字段关联起来，这种报表可利用其分组功能实现， <br /><br />　　1. 新建一个工程 <br /><br />　　2. 往FORM1中添加一个CrystalReportViewer控件 <br /><br />　　3. 在服务噐资源管理器中连接到SQL SERVER 2000上的Northwind数据库 <br /><br />　　4. 添加一个数据集Dataset1,将服务器资源管理器中的Orders和 Order Details加入到数据集中。 <br /><br />　　5. 添加一个水晶报表，使用报表专家，在项目数据中选择“ADO.NET数据集”，插入表Orders和 Order Details，“链接”中是关联字段的链接，在“字段”中选择要显示的主表和明细表的字段，组中选择分组依据为Orders表OrdersID字段，总计，图表，选择（可进行筛选），样式（可设置报表标题），可自行设置。设置完后，点击完成。 <br /><br />　　6. 在报表设计器中调整需要显示的字段的位置、宽度等。 <br /><br />　　7. 在窗口中添加代码。 <br /><br />Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load <br /><br />Dim oRpt As New CrystalReport1() <br /><br />Dim dsdataSet As New Dataset1()  <br /><br />Dim CN As New Data.SqlClient.SqlConnection("data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa") <br /><br />CN.Open() <br /><br />Dim daOrders As New Data.SqlClient.SqlDataAdapter("select * from orders", CN) <br /><br />daOrders.Fill(dsdataSet, "orders")  <br /><br />Dim daDetails As New Data.SqlClient.SqlDataAdapter("select * from [Order Details]", CN) <br /><br />daDetails.Fill(dsdataSet, "Order Details")  <br /><br />'使用“报表引擎”对象模型将填充的数据集,传递给报表 <br /><br />oRpt.SetDataSource(dsdataSet) <br /><br />CrystalReportViewer1.ReportSource = oRpt <br /><br />End Sub <br /><br />　　8、运行程序 <br /><br />　　七、用程序改变报表中text的文本 <br /><br />　　代码如下： <br /><br />Dim GetTextObject As TextObject <br /><br />' 按名称获取 ReportObject，将其转换为 TextObject，并返回此对象。 <br /><br />GetTextObject = orpt.ReportDefinition.ReportObjects.Item("text13") <br /><br />GetTextObject.Text = "XXXX系统" <br /><br />　　总结：水晶报表具有非常强大的功能，还可进行导出WORD、EXCEL、RTF等文件，还可生成复杂、漂亮图表，是进行WEB和WINDOWS报表开发的利器。  <br /><img src ="http://www.blogjava.net/yeiwei/aggbug/91783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2007-01-04 16:29 <a href="http://www.blogjava.net/yeiwei/archive/2007/01/04/91783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual C#.Net 网络程序开发Socket篇 </title><link>http://www.blogjava.net/yeiwei/archive/2006/11/09/80209.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Thu, 09 Nov 2006 09:20:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2006/11/09/80209.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/80209.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2006/11/09/80209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/80209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/80209.html</trackback:ping><description><![CDATA[Microsoft.Net Framework为应用程序访问Internet提供分层的、可扩展的以及受管辖的网络服务，其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。
<p>　　.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络，开发人员可以根据需要选择针对不同的级别编制程序，这些级别几乎囊括了Internet的所有需要，从socket套接字到普通的请求/响应，更重要的是，这种分层是可以扩展的，能够适应Internet不断扩展的需要。 <br />　　抛开ISO/OSI模型的7层构架，单从TCP/IP模型上的逻辑层面上看，.Net类可以视为包含3个层次：请求/响应层、应用协议层、传输层。WebReqeust和WebResponse 代表了请求/响应层，支持Http、Tcp和Udp的类组成了应用协议层，而Socket类处于传输层。</p><p>　　可见，传输层位于这个结构的最底层，当其上面的应用协议层和请求/响应层不能满足应用程序的特殊需要时，就需要使用这一层进行Socket套接字编程。 </p><p>　　而在.Net中，System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现。System.Net 命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上，如TCPClient、TCPListener 和 UDPClient 类封装有关创建到 Internet 的 TCP 和 UDP 连接的详细信息；NetworkStream类则提供用于网络访问的基础数据流等，常见的许多Internet服务都可以见到Socket的踪影，如Telnet、Http、Email、Echo等，这些服务尽管通讯协议Protocol的定义不同，但是其基础的传输都是采用的Socket。 </p><p>　　其实，Socket可以象流Stream一样被视为一个数据通道，这个通道架设在应用程序端（客户端）和远程服务器端之间。而后，数据的读取（接收）和写入（发送）均针对这个通道来进行。 </p><p>　　可见，在应用程序端或者服务器端创建了Socket对象之后，就可以使用Send/SentTo方法将数据发送到连接的Socket,或者使用Receive/ReceiveFrom方法接收来自连接Socket的数据。</p><p>　　针对Socket编程，.NET 框架的 Socket 类是 Winsock32 API 提供的套接字服务的托管代码版本。其中为实现网络编程提供了大量的方法，大多数情况下，Socket 类方法只是将数据封送到它们的本机Win32 副本中并处理任何必要的安全检查。如果你熟悉Winsock API函数，那么用Socket类编写网络程序会非常容易，当然，如果你不曾接触过，也不会太困难，跟随下面的解说，你会发觉使用Socket类开发windows 网络应用程序原来有规可寻，它们在大多数情况下遵循大致相同的步骤。 </p><p>　　在使用之前，你需要首先创建Socket对象的实例，这可以通过Socket类的构造方法来实现： </p><p>public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType); </p><p>　　其中，addressFamily 参数指定 Socket 使用的寻址方案，socketType 参数指定 Socket 的类型，protocolType 参数指定 Socket 使用的协议。 </p><p>　　下面的示例语句创建一个Socket，它可用于在基于 TCP/IP 的网络（如 Internet）上通讯。 </p><p>Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); </p><p>　　若要使用 UDP 而不是 TCP，需要更改协议类型，如下面的示例所示： </p><p>Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); </p><p>　　一旦创建 Socket，在客户端，你将可以通过Connect方法连接到指定的服务器，并通过Send/SendTo方法向远程服务器发送数据，而后可以通过Receive/ReceiveFrom从服务端接收数据；而在服务器端，你需要使用Bind方法绑定所指定的接口使Socket与一个本地终结点相联，并通过Listen方法侦听该接口上的请求，当侦听到用户端的连接时，调用Accept完成连接的操作，创建新的Socket以处理传入的连接请求。使用完Socket后，记住使用 Shutdown 方法禁用Socket，并使用 Close 方法关闭 Socket。其间用到的方法/函数有： </p><p>Socket.Connect方法:建立到远程设备的连接 <br />public void Connect(EndPoint remoteEP)（有重载方法） <br />Socket.Send 方法:从数据中的指示位置开始将数据发送到连接的 Socket。 <br />public int Send(byte[], int, SocketFlags);(有重载方法) <br />Socket.SendTo 方法 将数据发送到特定终结点。 <br />public int SendTo(byte[], EndPoint);（有重载方法） <br />Socket.Receive方法:将数据从连接的 Socket 接收到接收缓冲区的特定位置。 <br />public int Receive(byte[],int,SocketFlags); <br />Socket.ReceiveFrom方法：接收数据缓冲区中特定位置的数据并存储终结点。 <br />public int ReceiveFrom(byte[], int, SocketFlags, ref EndPoint); <br />Socket.Bind 方法：使 Socket 与一个本地终结点相关联： <br />public void Bind( EndPoint localEP ); <br />Socket.Listen方法：将 Socket 置于侦听状态。 <br />public void Listen( int backlog ); <br />Socket.Accept方法:创建新的 Socket 以处理传入的连接请求。 <br />public Socket Accept(); <br />Socket.Shutdown方法:禁用某 Socket 上的发送和接收 <br />public void Shutdown( SocketShutdown how ); <br />Socket.Close方法:强制 Socket 连接关闭 <br />public void Close(); </p><p>　　可以看出，以上许多方法包含EndPoint类型的参。在Internet中，TCP/IP 使用一个网络地址和一个服务端口号来唯一标识设备。网络地址标识网络上的特定设备；端口号标识要连接到的该设备上的特定服务。网络地址和服务端口的组合称为终结点。</p><p>　　在 .NET 框架中正是由 EndPoint 类表示这个终结点，它提供表示网络资源或服务的抽象，用以标志网络地址等信息。.Net同时也为每个受支持的地址族定义了 EndPoint 的子代；对于 IP 地址族，该类为 IPEndPoint。IPEndPoint 类包含应用程序连接到主机上的服务所需的主机和端口信息，通过组合服务的主机IP地址和端口号，IPEndPoint 类形成到服务的连接点。 </p><p>　　用到IPEndPoint类的时候就不可避免地涉及到计算机IP地址，.Net中有两种类可以得到IP地址实例： <br />　　　IPAddress类：IPAddress 类包含计算机在 IP 网络上的地址。其Parse方法可将 IP 地址字符串转换为 IPAddress 实例。下面的语句创建一个 IPAddress 实例： </p><p>IPAddress myIP = IPAddress.Parse("192.168.1.2"); </p><p><br />Dns 类：向使用 TCP/IP Internet 服务的应用程序提供域名服务。其Resolve 方法查询 DNS 服务器以将用户友好的域名（如"host.contoso.com"）映射到数字形式的 Internet 地址（如 192.168.1.1）。Resolve方法返回一个 IPHostEnty 实例，该实例包含所请求名称的地址和别名的列表。大多数情况下，可以使用 AddressList 数组中返回的第一个地址。下面的代码获取一个 IPAddress 实例，该实例包含服务器 host.contoso.com 的 IP 地址。 </p><p>IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com"); <br />IPAddress ipAddress = ipHostInfo.AddressList[0]; </p><p><br />　　你也可以使用GetHostName方法得到IPHostEntry实例： </p><p>IPHosntEntry hostInfo=Dns.GetHostByName("host.contoso.com") </p><p><br />　　在使用以上方法时，你将可能需要处理以下几种异常： </p><p>　　SocketException异常：访问Socket时操作系统发生错误引发 </p><p>　　ArgumentNullException异常：参数为空引用引发 </p><p>　　ObjectDisposedException异常：Socket已经关闭引发 </p><p>　　在掌握上面得知识后，下面的代码将该服务器主机（ host.contoso.com的 IP 地址与端口号组合，以便为连接创建远程终结点： </p><p>IPEndPoint ipe = new IPEndPoint(ipAddress,11000); </p><p><br />　　确定了远程设备的地址并选择了用于连接的端口后，应用程序可以尝试建立与远程设备的连接。下面的示例使用现有的 IPEndPoint 实例与远程设备连接，并捕获可能引发的异常： </p><p>try { <br />s.Connect(ipe);//尝试连接 <br />} <br />//处理参数为空引用异常 <br />catch(ArgumentNullException ae) { <br />Console.WriteLine("ArgumentNullException : {0}", ae.ToString()); <br />} <br />//处理操作系统异常 <br />catch(SocketException se) { <br />Console.WriteLine("SocketException : {0}", se.ToString()); <br />} <br />catch(Exception e) { <br />Console.WriteLine("Unexpected exception : {0}", e.ToString()); <br />} </p><p><br />　　需要知道的是：Socket 类支持两种基本模式：同步和异步。其区别在于：在同步模式中，对执行网络操作的函数（如 Send 和 Receive）的调用一直等到操作完成后才将控制返回给调用程序。在异步模式中，这些调用立即返回。 </p><p>　　另外，很多时候，Socket编程视情况不同需要在客户端和服务器端分别予以实现，在客户端编制应用程序向服务端指定端口发送请求，同时编制服务端应用程序处理该请求，这个过程在上面的阐述中已经提及；当然，并非所有的Socket编程都需要你严格编写这两端程序；视应用情况不同，你可以在客户端构造出请求字符串，服务器相应端口捕获这个请求，交由其公用服务程序进行处理。以下事例语句中的字符串就向远程主机提出页面请求： </p><p>string Get = "GET / HTTP/1.1\r\nHost: " + server + "\r\nConnection: Close\r\n\r\n"; </p><p><br />　　远程主机指定端口接受到这一请求后，就可利用其公用服务程序进行处理而不需要另行编制服务器端应用程序。 </p><p>　　综合运用以上阐述的使用Visual C#进行Socket网络程序开发的知识，下面的程序段完整地实现了Web页面下载功能。用户只需在窗体上输入远程主机名（Dns 主机名或以点分隔的四部分表示法格式的 IP 地址）和预保存的本地文件名，并利用专门提供Http服务的80端口，就可以获取远程主机页面并保存在本地机指定文件中。如果保存格式是.htm格式，你就可以在Internet浏览器中打开该页面。适当添加代码，你甚至可以实现一个简单的浏览器程序。 </p><p><br />实现此功能的主要源代码如下： </p><p>//"开始"按钮事件 <br />private void button1_Click(object sender, System.EventArgs e) { <br />//取得预保存的文件名 <br />string fileName=textBox3.Text.Trim(); <br />//远程主机 <br />string hostName=textBox1.Text.Trim(); <br />//端口 <br />int port=Int32.Parse(textBox2.Text.Trim()); <br />//得到主机信息 <br />IPHostEntry ipInfo=Dns.GetHostByName(hostName); <br />//取得IPAddress[] <br />IPAddress[] ipAddr=ipInfo.AddressList; <br />//得到ip <br />IPAddress ip=ipAddr[0]; <br />//组合出远程终结点 <br />IPEndPoint hostEP=new IPEndPoint(ip,port); <br />//创建Socket 实例 <br />Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); <br />try <br />{ <br />//尝试连接 <br />socket.Connect(hostEP); <br />} <br />catch(Exception se) <br />{ <br />MessageBox.Show("连接错误"+se.Message,"提示信息 <br />,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); <br />} <br />//发送给远程主机的请求内容串 <br />string sendStr="GET / HTTP/1.1\r\nHost: " + hostName + <br />"\r\nConnection: Close\r\n\r\n"; <br />//创建bytes字节数组以转换发送串 <br />byte[] bytesSendStr=new byte[1024]; <br />//将发送内容字符串转换成字节byte数组 <br />bytesSendStr=Encoding.ASCII.GetBytes(sendStr); <br />try <br />{ <br />//向主机发送请求 <br />socket.Send(bytesSendStr,bytesSendStr.Length,0); <br />} <br />catch(Exception ce) <br />{ <br />MessageBox.Show("发送错误:"+ce.Message,"提示信息 <br />,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); <br />} <br />//声明接收返回内容的字符串 <br />string recvStr=""; <br />//声明字节数组，一次接收数据的长度为1024字节 <br />byte[] recvBytes=new byte[1024]; <br />//返回实际接收内容的字节数 <br />int bytes=0; <br />//循环读取，直到接收完所有数据 <br />while(true) <br />{ <br />bytes=socket.Receive(recvBytes,recvBytes.Length,0); <br />//读取完成后退出循环 <br />if(bytes&lt;=0) <br />break; <br />//将读取的字节数转换为字符串 <br />recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes); <br />} <br />//将所读取的字符串转换为字节数组 <br />byte[] content=Encoding.ASCII.GetBytes(recvStr); <br />try <br />{ <br />//创建文件流对象实例 <br />FileStream fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite); <br />//写入文件 <br />fs.Write(content,0,content.Length); <br />} <br />catch(Exception fe) <br />{ <br />MessageBox.Show("文件创建/写入错误:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); <br />} <br />//禁用Socket <br />socket.Shutdown(SocketShutdown.Both); <br />//关闭Socket <br />socket.Close(); <br />} <br />} </p><p><u><font color="#0000ff"></font></u> </p><img src ="http://www.blogjava.net/yeiwei/aggbug/80209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-11-09 17:20 <a href="http://www.blogjava.net/yeiwei/archive/2006/11/09/80209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面 向 IMT-2000 的 D-AMPS</title><link>http://www.blogjava.net/yeiwei/archive/2006/10/09/74002.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Mon, 09 Oct 2006 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2006/10/09/74002.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/74002.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2006/10/09/74002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/74002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/74002.html</trackback:ping><description><![CDATA[<p>在 无 线 通 信 世 界， GSM 标 准 已 在 世 界 各 地 取 得 广 泛 的 支 持， 开 始 由 欧 洲 首 创 的 东 西 已 成 为 事 实 上 的 世 界 标 准。 但 是 GSM 没 有 独 占 市 场： 全 世 界 移 动 电 话 用 户 的 总 安 装 基 数 中 一 半 以 上 连 接 的 网 络 都 以 美 国 而 不 是 欧 洲 提 出 的 无 线 标 准 为 基 础。 高 级 移 动 电 话 业 务 (AMPS) 标 准 及 其 数 字 版 D－AMPS 一 共 占 了 约 8 千 万 用 户。 目 前 他 们 中 的 大 多 数 (约 7 千 万) 连 接 到 模 拟 AMPS 网。 即 使 如 此， 在 现 有 网 络 设 施 上 能 将 AMPS 网 过 渡 到 数 字 D－AMPS 业 务 的 能 力 仍 可 证 明 D－AMPS 用 户 总 基 数 将 迅 速 增 长。 <br /></p>
		<p>D－AMPS IS－136 无 线 标 准 像 GSM 一 样 以 时 分 多 址 (TDMA) 数 字 无 线 电 技 术 为 基 础。 AMPS 和 D－AMPS 标 准 在 亚 太 地 区 已 广 泛 使 用 到 现 在 运 行 的 和 近 期 计 划 运 行 的 网 络 中。 涉 及 的 国 家 和 地 区 包 括： 澳 大 利 亚、 孟 加 拉 国、 文 莱、 柬 埔 寨、 中 国、 香 港 特 别 行 政 区、 印 度、 印 度 尼 西 亚、 老 挝、 马 来 西 亚、 缅 甸、 新 西 兰、 巴 基 斯 坦、 巴 布 亚 新 几 内 亚、 菲 律 宾、 新 加 坡、 斯 里 兰 卡、 台 湾、 泰 国 和 越 南。 这 些 市 场 中 的 六 个 已 提 供 或 计 划 提 供 数 字 业 务 (D－AMPS)。 <br /></p>
		<p>
				<br />
		</p>
		<h3>室 内／室 外 接 入</h3>
		<br />
		<p>AMPS 和 D－AMPS 标 准 成 功 的 部 分 原 因 在 于 其 技 术 功 能。 从 一 开 始， 最 新 的 D－AMPS IS－136 标 准 的 设 计 目 的 就 是 既 支 持 室 内 又 支 持 室 外 接 入。 使 无 线 通 信 在 室 内 得 以 可 靠 提 供， 尤 其 是 满 足 高 层 建 筑 内 工 作 人 员 的 需 要， 目 前 被 认 为 是 生 成 新 市 场 的 重 要 因 素。 <br /></p>
		<p>迄 今 为 止， 无 线 接 入 在 室 内 环 境 中 仍 很 困 难， 例 如 在 摩 天 大 楼、 隧 道 和 地 下 车 库 中， 但 是 现 在 情 况 开 始 有 了 变 化。 以 D－AMPS 标 准 使 用“分 层 蜂 窝 结 构” (HCS) 就 可 用 同 一 无 线 标 准 提 供 室 内 接 入， 不 需 要 双 模 式 电 话。 典 型 的 情 况 是 宏 区 覆 盖 一 小 城 镇 或 郊 区， 微 区 覆 盖 一 条 街， 微 微 区 覆 盖 一 个 小 的 室 外 区 或 室 内 区， 诸 如 饭 店 大 厅、 摩 天 大 楼 的 一 层 或 一 个 地 下 停 车 场。 <br /></p>
		<p>HCS 的 另 一 性 能 是 能 提 供 不 同 业 务 并 按 用 户 所 处 位 置 不 同 计 费。 这 是 个 人 通 信 业 务 (PCS) 的 一 个 核 心 性 能。 用 户 使 用 D－AMPS 网 可 得 到 不 同 业 务 并 根 据 他 们 在 家、 在 办 公 室 或 在 两 者 之 间 任 一 地 点 的 不 同 情 况 计 费。 <br /></p>
		<p>
				<br />
		</p>
		<h3>网 络 容 量</h3>
		<br />
		<p>HCS 也 能 使 网 络 的 容 量 增 加 以 支 持 业 务 量“热 点” 以 及 允 许 更 多 的 上 网 用 户， 而 不 需 额 外 的 频 谱。 网 络 容 量 因 移 动 电 话 用 户 数 持 续 增 长 成 为 越 来 越 突 出 的 主 题。 经 营 商 在 不 要 求 增 加 更 多 频 谱 的 条 件 下， 千 方 百 计 尽 力 增 加 他 们 能 为 之 服 务 的 用 户 数。 <br /></p>
		<p>
				<br />
		</p>
		<h3>无 线 数 据</h3>
		<br />
		<p>D－AMPS 标 准 也 处 在 有 利 地 位 可 抓 住 下 一 轮 通 信 业 务 的 大 发 展。 例 如 在 无 线 链 路 上 发 送 数 据， 包 括 在 Internet 上 遨 游。 早 已 有 了 分 组 数 据 标 准， 名 为 蜂 窝 数 字 分 组 数 据 (CDPD)， 使 D－AMPS 无 线 网 可 在 现 有 频 率 内 用 作 分 组 数 据 业 务 的 基 础。 <br /></p>
		<p>但 是 单 单 技 术 并 非 是 D－AMPS 标 准 在 世 界 上 取 得 成 功 的 原 因。 技 术 发 展 进 程 的 另 一 因 素 是 商 业 逻 辑。 <br /></p>
		<p>
				<br />
		</p>
		<h3>商 业 法 则</h3>
		<br />
		<p>拥 有 模 拟 AMPS 网 的 无 线 网 络 经 营 商 可 将 IS－136 D－AMPS 移 入 网 内。 从 而 继 续 利 用 先 前 的 投 资。 数 字 D－AMPS 信 道 可 在 同 一 网 络 设 施 上 用 同 一 频 率 分 配 逐 步 列 入 网 中。 事 实 上， D－AMPS 标 准 原 先 就 作 为 双 模 式、 双 频 段 标 准 制 定 的。 实 践 中 就 意 味 着 用 户 用 双 模 式 模 拟／数 字 电 话 在 800MHz 或 1900MHz 频 段 上 既 可 从 模 拟 信 道 又 可 从 数 字 信 道 接 用 移 动 通 信 业 务。 因 此 网 络 经 营 商 可 为 用 户 提 供 进 入 任 何 其 它 AMPS 或 D－AMPS 网 的 漫 游。 譬 如 在 亚 洲 和 美 国 之 间 有 漫 游 协 议， 这 就 是 说 去 美 国 旅 行 的 人 一 下 飞 机 就 可 打 开 他 们 的 电 话， 开 始 收 发 呼 叫。 <br /></p>
		<p>在 AMPS 和 D－AMPS 范 围 内 能 漫 游 对 新 的 无 线 电 网 络 经 营 者 具 有 很 大 吸 引 力。 如 果 一 个 新 的 经 营 商 取 得 1900 MHz 的 许 可 证， 他 就 能 向 用 户 提 供 国 际 漫 游， 不 仅 可 进 入 其 它 1900 MHz 网， 在 用 户 进 入 800 MHz 网 服 务 的 地 区 或 国 家 时 也 可 用 模 拟 或 数 字 方 式 向 他 们 提 供 业 务 的 充 分 连 续 性。 <br /></p>
		<p>漫 游 是 网 络 经 营 商 极 好 的 盈 利 项 目， 无 论 通 过 他 们 自 已 的 用 户 到 其 它 经 营 商 网 络 或 者 其 它 经 营 商 的 用 户 到 他 们 这 里 漫 游， 情 况 都 一 样。 当 然， 在 更 为 全 球 化 的 商 业 环 境 中， 能 在 许 多 国 家 使 用 移 动 电 话 的 需 求 越 来 越 大。 <br /></p>
		<p>国 际 漫 游 对 GSM 一 直 是 一 个 很 大 的 销 售 点， 双 频 段 900 MHz/1800 MHz 移 动 电 话 已 开 始 出 现 在 这 些 网 络。 不 过 北 美 广 泛 利 用 AMPS/D- AMPS 使 它 特 别 对 到 美 国 旅 行 的 漫 游 用 户 具 有 吸 引 力， 在 那 里 GSM 技 术 仅 仅 在 一 些 孤 立 小 区 存 在。 <br /></p>
		<p>
				<br />
		</p>
		<h3>新 业 务 的 可 能 性</h3>
		<br />
		<p>商 业 关 注 的 另 一 部 分 是 向 用 户 提 供 多 种 多 样 业 务 的 能 力 在 制 定 D－AMPS IS－136 标 准 中 原 本 就 有 这 一 点。 经 营 商 认 识 到 一 项 成 功 的 无 线 电 信 经 营 不 能 建 立 在 只 出 售 空 中 时 间 的 基 础 上。 恰 恰 是 增 值 业 务 吸 引 了 端 点 用 户 并 增 加 了 经 营 商 的 收 益。 <br /></p>
		<p>无 线 办 公 室 业 务 就 是 这 方 面 的 很 好 实 例， D－AMPS 无 线 网 能 完 全 创 造 新 的 业 务 机 会。 这 使 公 司 能 建 立 一 种 业 务： 职 员 在 办 公 室 时 D－AMPS IS－136 移 动 电 话 自 动 变 成 公 司 专 用 小 交 换 机 的 无 人 分 机。 这 种 无 线 专 用 小 交 换 机 业 务 在 北 美 和 新 西 兰 得 到 广 泛 考 验， 目 前 正 开 始 商 业 运 行。 <br /></p>
		<p>D－AMPS 标 准 是 至 今 在 同 一 无 线 标 准、 同 一 网 络 和 同 一 电 话 中 能 提 供 此 类 业 务 的 唯 一 标 准。 随 着 经 营 商 计 划 引 入 用 户 在 家 中、 办 公 室 和 行 动 中 使 用 一 个 号 码 和 一 个 电 话 的 PCS， D－AMPS IS－136 标 准 将 以 完 整 的 基 础 出 现。 首 批 基 于 此 标 准 的 PCS 业 务 早 已 用 于 商 业 运 行。 对 D－AMPS 经 营 模 型， 基 本 的 一 条 是 PCS 应 视 作 无 线 业 务 概 念 而 不 是 一 个 频 段。 <br /></p>
		<p>
				<br />
		</p>
		<h3>固 定 无 线 业 务</h3>
		<br />
		<p>在 以 往 的 十 五 年 前 后， 无 线 网 通 常 被 视 为 支 持 移 动 通 信 的 资 源。 人 们 越 来 越 认 识 到 无 线 技 术 也 是 有 线 用 户 连 接 的 一 种 替 代 方 式， 因 为 它 不 必 为 居 家 和 办 公 室 用 户 提 供 业 务 而 开 挖 路 面， 其 次 用 户 能 快 速 接 用 数 据 和 话 音 业 务。 <br /></p>
		<p>爱 立 信 公 司 的 D-AMPS/ AMPS 固 定 无 线 网， 已 在 马 来 西 亚、 巴 西、 捷 克 共 和 国、 俄 罗 斯 和 鸟 克 兰 得 到 订 货 或 已 投 入 商 业 服 务， 同 时 另 有 21 个 国 家 正 在 试 运 行。 在 中 国、 印 度 和 巴 西 等 国 目 前 正 进 行 主 要 的 现 场 试 验。 <br /></p>
		<p>
				<br />
		</p>
		<h3>走 向 第 三 代</h3>
		<br />
		<p>在 无 线 领 域， 诸 如 AMPS 等 模 拟 网 被 当 作 第 一 代，像 GSM 和 D－AMPS IS－136 那 样 的 数 字 标 准 是 第 二 代。 现 在 我 们 正 身 临 第 三 代 的 边 缘。 在 世 纪 交 替 之 后， 新 一 代 无 线 业 务 将 很 快 进 入 商 用， 并 将 提 供 某 些 令 人 兴 奋 的 新 通 信 可 能 性。 <br /></p>
		<p>主 要 目 标 是 明 显 增 加 空 中 接 口 可 利 用 的 带 宽， 从 而 能 更 经 济 地 提 供 诸 如 电 视 会 议 和 Internet 接 入 之 类“渴 望 带 宽” 的 业 务。 无 线 接 入 数 据 业 务 是 下 一 发 展 阶 段 的 主 要 动 力。 普 遍 认 为， 随 着 更 多 的 人 在 他 们 工 作 中 具 有 先 进 多 媒 体 业 务 的 接 入， 他 们 将 越 加 要 求 在 业 余 时 间 能 接 入 相 同 的 业 务。 人 们 企 望 以 目 前 的 技 术 增 加 无 线 连 接 可 资 使 用 的 带 宽 20 倍 或 30 倍。 <br /></p>
		<p>增 加 带 宽 是 第 三 代 设 想 中 的 一 个 重 要 组 成 要 素， 但 不 是 唯 一 目 标。 第 三 代 业 务 将 支 持 同 一 无 线 终 端 产 生 的 几 个 同 时 呼 叫， 分 配 给 这 些 呼 叫 中 每 一 个 的 带 宽 是 灵 活 进 行 的， 以 便 最 佳 利 用 无 线 电 频 谱。 与 此 同 时， 话 音 业 务 在 第 三 代 网 络 中 仍 将 是 重 要 的， 因 此 另 一 个 目 标 就 是 能 以 节 省 频 谱 的 方 式 处 理 话 音 呼 叫。 <br /></p>
		<p>目 前 的 思 路 是 这 些 更 高 带 宽 业 务 将 沿 两 个 途 径 发 展。 一 种 办 法 将 是 通 过 强 化 D－AMPS 标 准， 这 样 网 络 运 营 者 可 在 现 有 频 率 分 配 — 800 和 1900 MHz 频 带 内 开 展 第 三 代 业 务。 另 一 办 法 是 通 过 ITU 已 为 此 目 的 分 配 的 2 GHz 频 带 上 运 行 的 新 无 线 技 术。 <br /></p>
		<p>D－AMPS 标 准 已 支 持 许 多 将 在 第 三 代 无 线 系 统 中 可 供 使 用 的 业 务， 正 发 展 提 高 以 支 持 越 来 越 高 的 比 特 率， 目 标 是 384 Kbit/s。 人 人 设 想 现 有 的 D－ AMPS 网 将 在 其 覆 盖 区 内 为 第 三 代 提 供 其 核 心 网 络 设 施， 而 额 外 的 无 线 信 道 将 在 新 的 2 GHz 频 带 上 加 在 此 核 心 设 施 上。 这 种 相 互 配 合 将 提 供 一 条 过 渡 到 第 三 代 业 务 的 切 合 实 际 又 节 省 成 本 的 途 径， 并 将 保 护 现 有 AMPS 和 D－AMPS 设 施 的 投 资。 <br /></p>
		<p>
				<br />
		</p>
		<h3>增 强 D－AMPS</h3>
		<br />
		<p>D－AMPS 早 已 达 到 80% 的 IMT－2000 要 求。 准 备 为 D－AMPS IS－136 标 准 提 出 另 外 两 个 提 高 阶 段。 第 一 阶 段 称 为 136＋， 此 时 30 KHz 载 波 的 毕 特 率 将 通 过 高 级 调 制 达 到 64 Kbit/s 的 毕 特 率， 话 音 质 量 也 将 作 进 一 步 改 善。 <br /></p>
		<p>第 二 阶 段 称 作 136 HS， 将 涉 及 一 新 的 接 口 规 范， 将 达 到 IMT－2000 的 需 求 并 将 使 宽 广 地 区 和 室 内 部 分 相 应 提 供 384 Kbit/s 和 2 Mbit/s。 除 了 增 加 数 据 率， D－AMPS 将 得 到 强 化 以 支 持 更 大 的 容 量 和 覆 盖 以 及 更 好 的 话 音 质 量。 容 量 和 质 量 将 通 过 许 多 技 术 得 到 提 高， 例 如 自 适 应 信 道 分 配、 改 进 的 功 率 控 制 算 法 和 更 有 效 的 信 道 分 配。 在 较 长 的 时 期 内， 期 望 容 量 将 增 加 100%。 覆 盖 也 因 使 用 有 源 天 线 和 智 能 天 线 得 到 改 善。</p><img src ="http://www.blogjava.net/yeiwei/aggbug/74002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-10-09 10:44 <a href="http://www.blogjava.net/yeiwei/archive/2006/10/09/74002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java电子课件</title><link>http://www.blogjava.net/yeiwei/archive/2006/10/09/73950.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Mon, 09 Oct 2006 01:07:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2006/10/09/73950.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/73950.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2006/10/09/73950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/73950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/73950.html</trackback:ping><description><![CDATA[<a href="/Files/yeiwei/java电子课件.rar">
				<font color="#002c99">java电子课件.rar</font>
		</a><img src ="http://www.blogjava.net/yeiwei/aggbug/73950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-10-09 09:07 <a href="http://www.blogjava.net/yeiwei/archive/2006/10/09/73950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE开发过程中的异常处理</title><link>http://www.blogjava.net/yeiwei/archive/2006/10/09/73949.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Mon, 09 Oct 2006 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/archive/2006/10/09/73949.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/73949.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/archive/2006/10/09/73949.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/73949.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/73949.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里有</span>
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">种异常类型</span>
				<span lang="EN-US">:</span>
		</p>
		<br />
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">检查型异常</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样的异常继承于</span>
				<span lang="EN-US">Excetpion,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是在编译期间需要检查</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果该异常被</span>
				<span lang="EN-US">throw,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么在该异常所在的</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后必须显示的</span>
				<span lang="EN-US">throws,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用该</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的地方也必须捕获该异常</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">否则编译器会抛出异常</span>
				<span lang="EN-US">.ejb</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里的</span>
				<span lang="EN-US">RemoteException</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个这样的异常</span>
				<span lang="EN-US">.</span>
		</p>
		<br />
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运行时异常</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是在运行期间系统出现的异常</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该类异常继承于</span>
				<span lang="EN-US">RuntimeException,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该类异常在编译时系统不进行检查</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如</span>
				<span lang="EN-US">NullPointerExcetpion,NumberFormatException.</span>
		</p>
		<br />
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统错误</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一般是</span>
				<span lang="EN-US">JVM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">出现异常时抛出的异常</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如</span>
				<span lang="EN-US">OutofMemoryError,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样的异常在</span>
				<span lang="EN-US">J2EE</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发中是不用关心的</span>
				<span lang="EN-US">.</span>
		</p>
		<br />
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">J2EE</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发中</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">检查型异常被滥用以至于过一段时间程序员自己都看不懂抛出这样的异常</span>
				<span lang="EN-US">,.</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面封装的这些错误信息是干什么用的</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">更可怕的是有好多有用的信息找不到了</span>
				<span lang="EN-US">.</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比如</span>
				<span lang="EN-US">SQLException</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">RemoteException</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样的异常我们没必要再进行封装</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样的异常只对我们调试程序有用</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而对客户来说它就是一个</span>
				<span lang="EN-US">”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统错误</span>
				<span lang="EN-US">”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而已</span>
				<span lang="EN-US">.</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">异常处理有一个简单的原则</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你什么时候需要封装自己的检查型异常</span>
				<span lang="EN-US">?</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是你很清楚自己抛出这个异常的用途时</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比如用户输入用户名和密码要登录</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但用户名和密码不匹配</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你就要定义一个检查型异常</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">客户端通过捕获该异常</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后把相应的错误信息反馈给客户</span>
				<span lang="EN-US">.</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而其它的自己未预期的错误或者异常比如</span>
				<span lang="EN-US">SQLException,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只需封装到</span>
				<span lang="EN-US">EJBException</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中</span>
				<span lang="EN-US">,ejb container</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会把它的信息追加到</span>
				<span lang="EN-US">RemoteException</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样客户端捕获</span>
				<span lang="EN-US">RemoteException</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后把它写到系统日志里</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就很容易进行调试</span>
				<span lang="EN-US">.</span>
		</p>
		<br />
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于错误代码</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一般反馈给客户的错误代码有两种类型</span>
				<span lang="EN-US">:</span>
		</p>
		<br />
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用程序级错误</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这些错误是由客户自身的原因引起的</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比如输入信息有误</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有操作该功能的权限</span>
				<span lang="EN-US">.</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于这样情况</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统应给用户一个明确的提示</span>
				<span lang="EN-US">.</span>
		</p>
		<br />
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统级异常</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比如</span>
				<span lang="EN-US">”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">未连接到服务器</span>
				<span lang="EN-US">”,”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器忙</span>
				<span lang="EN-US">”,”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">未连接到数据库</span>
				<span lang="EN-US">”,”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统错误</span>
				<span lang="EN-US">”,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样的错误给客户带来的后果是不能进行操作</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么下面的戏该由系统管理员和系统开发者去演了</span>
				<span lang="EN-US">.</span>
		</p>
		<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">个人觉得检查型异常对应于应用程序级错误</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">,</span>
		<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">运行时异常对应于系统级异常</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">.</span>
		<br /><img src ="http://www.blogjava.net/yeiwei/aggbug/73949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-10-09 09:06 <a href="http://www.blogjava.net/yeiwei/archive/2006/10/09/73949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>