發表文章

目前顯示的是 11月, 2007的文章

[研討會] 首屆SD2.0大會(北京九華山)

圖片
recap: 『phphot』【SD2.0大会】董大伟:用Silverlight记下我和老婆的精彩瞬间 分类: 2007年SD2C 大会课程 2010-11-15 09:48 1052人阅读 评论 (0) 收藏 举报 原文链接: http://blog.csdn.net/phphot/archive/2007/11/30/1909073.aspx 作者:phphot(phphot) http://blog.csdn.net/phphot 中国最大的IT技术社区CSDN联合美国权威IT技术媒体CMP集团,共同为中国百万开发者带来国内最权威的顶级软件技术大会——“2007 软件开发2.0技术大会”(SD2C)正在九华山庄火热进行当中。在106分会场,微软最有价值专家、台湾知名信息作者与讲师董大伟正在为与会者做《ASP.NET AJAX与Silverlight 的完美结合》的精彩演讲。 董大伟首先以自己亲手用Silverlight制作的与老婆亲密瞬间影音动画做开场,立即引起全场人气沸腾。他表示,用微软的Silverlight可以非常简便的制作出炫目的多媒体动画。 接下来他示范了如何轻松整合AJAX和Silverlight,抓取后端数据库内容,利用JavaScript程序代码当中透过AJAX技术来完成。 需要特别强调的是,Silverlight并不一定绝对需要和ASP.NET技术加以整合,即使单纯的.html页面也可以将Silverlight应用程序执行的非常好。由于Silverlight是透过纯前端(浏览器端)的JavaScript程序代码来运作,因此在技术上当然也可以和ASP、PHP、JSP、或其它服务器开发技术加以整合。                                       (图为董大伟在现场做精彩演讲) 讲师介绍:董大伟 微软最有价值专家(MVP)、台湾知名ASP.NET的信息书籍作者与技术讲师、台湾微软TechED 2007讲师、微软AJAX与Silverlight开发者大会讲师,致力于Web Application开发与研究多年,

ASP.NET 2.0當中的Call back技術與ASP.NET AJAX

前面介紹過了幾個ASP.NET當中的AJAX機制之後,不知道讀者是否偶而也有一些confuse,原因是有太多種方法可以在.aspx網頁上進行AJAX動作了,目前最常見的幾種方式是: 1) 傳統的HTTP request(要自己寫一些JavaScript code) 2) asp.net 2.0當中的Call Back技術(ASP.NET 2.0當中原生支援,不需要安裝任何套件) 3)安裝ASP.NET AJAX套件之後的 異步 Web Services Call 4)安裝ASP.NET AJAX套件之後的 異步 Page Method Call 5)安裝ASP.NET AJAX套件之後的 UpdatePanel 由於有很多讀者問到,同時也不少人有這方面的爭論或是疑惑,因此筆者分別針對這幾種方式稍做說明。 目前,只要您是ASP.NET的開發人員,我相信你會在2,3,4,5這幾種方法當中選一個,而最常用的可能是方法5。因為方法1這種傳統的Http Request不僅要撰寫相當多的JavaScript,並且很可能您要自己處理瀏覽器兼容與支援的相關問題,因此一般來說我們不太做這樣的用法。 而其中最簡單的則是方法5, 採用UpdatePanel,但是, 讀者要知道,上述各種AJAX技術當中,最耗費頻寬且效能最差的就是UpdatePanel,筆者在研討會常常碰到讀者詢問ASP.NET AJAX的效能不好(但是其實只有UpdatePanel的效能不是非常好,而且這還跟使用的方式有關...),因此在這邊筆者要再三強調,僅管你看到UpdatePanel 所謂的『partial postback 』 "似乎只是" 將一小塊區域回傳給伺服器端,但是實際測試後你會發現,在進行partial postback時,其實是 "整個頁面" 回傳給伺服器端(只是沒有換頁),而雖然reload回來的時候確實是局部的頁面,但是如果你加上了Timer一起用,肯定會造成可怕的網路流量... 而方法3的異步Web Services呼叫其實是筆者比較喜歡的方式,不管在執行效能或是原理架構上,都是蠻漂亮的AJAX用法,而方法4的PageMethod則是類似於方法3的一種簡易用法,不需要額外建立一個Web Services(.asmx),就可以在頁面當直接使用,是比較輕量級的

轉貼:VS2008下載點

· 如果你是MSDN訂閱者,你可以在MSDN訂閱網站下載。 · 如果你沒有訂閱MSDN,你可以在 這裡 下載Visual Studio 2008 Team Suite的90天免費試用版本。Visual Studio 2008 專業版的90天試用版本(下載大小稍微小點)將於下個星期推出。Team Foundation Server的90天免費試用版本可以在 這裡 下載。 · 如果你想使用免費的 Visual Studio 2008 Express 版本(下載大小更小一些,而且是完全免費的),你可以在 這裡 下載。

產品試用報告:CG-NSC1000(NAS), XPAL VICTOR(外接蓄電池)

敗家,很可能是人類的天性... CG-NSC1000 試用報告 (NAS) 連結 1.新增或移除帳號的時候硬碟猛跑且系統停止回應, 我實在不知道他在跑什麼, 且需要大約15分鐘才可work, 不過值得慶幸的是,沒有就此當掉...資料還在 2.檔案的存取速度稍慢(估計瓶頸是在網路速度而非硬碟速度,硬碟是SATA II) 3.在NAS上的某些檔案的日期會消失, 導致我下xcopy指令加上 /d 參數時無效...無法依照日期備份,這點讓我很困擾 4.其餘跟DM上的廣告一樣... XPAL VICTOR電力救星萬用移動電源 試用報告 連結 簡單一句話, 就是產品蓄電量與期待嚴重不符合(遭本人退貨處理) 但客服很不錯, ok, 非常阿莎力的退貨並且很客氣的詢問原因, 我坦白告知期蓄電量跟我預期的差很多... 客服提到他們沒有測過我那台NB, 說以後會列入測試... ps.產品外型挺OK,其餘均與產品DM相同... that's all. 希望我敗家過的產品經驗,可以提供大家參考... 特別注明:以上意見僅是我使用一次(因為我只買了一台)的經驗,請不要排除一種可能,就是我剛好拿到最好或是最爛的那一台,因此不能夠直接視為此產品的平均表現。僅供讀者參考,若有其他不同的看法或是使用經驗,請踴躍跟大家一起分享。

關於NB執行速度的瓶頸

今天,不談軟體。 這一篇,提供初學者一些產品選購上的建議。 最近有一篇Scott Guthrie的Hard Drive Speed and Visual Studio Performance談到了開發工具和硬碟之間的關係。這部分我也感觸深刻,所以稍微提一下自己的看法。 很久以前我在買NB的時候就深刻的體驗到,RAM的大小與HD的速度其實是效能的一大關鍵,至於CPU速度實在沒有太大影響,主要的原因很簡單:『你的瓶頸不在CPU!!!』 感謝『目標』一書的作者『高德拉特』很久以前幫我建立的一個觀念,至今在各種場合屢試不爽:『問題的解決從瓶頸下手。』不管問題多複雜,所有的問題都可以歸納到一兩個焦點,這就是你的瓶頸(在專案上也多半是如此),當事情一片混沌的時候,找出瓶頸可以說比什麼都還重要。 而NB和一般PC的速度瓶頸根本不在CPU速度,甚至很多時候CPU是閒置的,如果你發現你的硬碟燈猛閃,大概就可以知道其實你的硬碟最好換成7200轉的(或是選購Buffer大一點的),我的NB在購買的時候,就搭配7200轉的轉速。另外就是RAM的大小,由於作業系統的運作邏輯,當記憶體不足的時候會以HD作為虛擬記憶體,你就會開始看到硬碟又猛閃,這時候,將會嚴重拖慢整個系統運算速度。 最後一個小小的關鍵在顯卡速度(包含顯卡RAM的大小),以前我以為這個不重要,但是換成獨立顯卡的NB之後,發現現在的Windows實在有太多地方用到了顯卡的效能(Vista就更不用說了),不消說,如果你的顯卡不是獨立的,會搶到主CPU的時間或是主記憶體,則整體的速度自然就差了。 最後最後,才是CPU的運算能力,一般的伺服器其實也是,絕大部分的問題都不是卡在CPU的運算能力上,這點很弔詭,原因是電腦最重要的能力就是運算,但是顯然現在我們一般人用到的運算需求並不高,資料的存取和搜尋反而是更大的需求,所以速度的瓶頸開始轉變成HD甚至網際網路的存取能力... 總之,有時候你看到電腦當在那邊,十之八九不是CPU在運算,而是CPU在等週邊...無奈週邊的速度太慢而已...

台灣微軟網站上的Silverlight教學影片

第一波公佈於台灣微軟的Silverlight教學影片 http://www.microsoft.com/taiwan/msdn/elearning/Teaching.htm 主題: 如何利用 Blend 2 來設計 Silverlight 動畫,並透過 JavaScript 加以控制 利用 Glyphs 與 ODTTF 在 Silverlight 當中顯示各種中文字型 如何建立 Silveright 圖示選單 (Silverlight 的滑鼠事件功能介紹) 如何利用 AJAX 的非同步 Web Services 技術,配合 Silverlight 建立資料庫動態圖表

ASP.NET 2.0當中的Call Back機制

圖片
連續幾篇介紹ASP.NET當中的AJAX實作方式,主要的目的也是讓讀者可以有所比較,理解這幾種作法之間的差異。 最後一個要介紹的,當然就是ASP.NET當中的Call Back機制。Call Back是ASP.NET 2.0當中內建的功能,不需要安裝ASP.NET AJAX依舊可以相當有效率的呈現出AJAX效果。 我們看下面的頁面,我們在頁面上放置另一個TextBox2和HtmlButton(ID為CallBackButton,並設為在伺服器端執行: 接著我們鍵入底下的程式碼: 我們先看執行的結果,您會發現,按下下方的HtmlButton,則網頁不需要postback,TextBox2裡面的Server端時間已經更新了: 怎麼完成的呢? 這段程式碼必須好好解釋一下,首先程式碼第三行有一個很不一樣的地方: 0001:Partial Class _Default 0002: Inherits System.Web.UI.Page 0003: Implements System.Web.UI.ICallbackEventHandler 這表示這張.aspx網頁支援Call Back機制(我們待會再來解釋Call Back機制)。而因為網頁支援Call Back機制,因此必須實作底下兩個項目: 我們看先前的Form_Load程式碼: 請特別注意21-25行程式碼,23行的『GetCallbackEventReference』指令,建立了CallBack機制(ASP.NET 2.0會自動產生一段JavaScipt的CallBack程式碼),在第25行我們將此機制(JavaScript)掛到HtmlButon上。 Call Back的整個原理是: 1.在ASP.NET程式碼中,利用『GetCallbackEventReference』產生一段JavaScript的Call Back指令。 2.將這段Call Back指令掛到某個Html控制項上,利用這段JavaScript指令在不postback的情況下,將資料(參數)回傳到Server(參數包含下表中定義的argument, clientCallbackProc…) 。 3.Server端(.aspx.vb程式)接收到資料(參數)後進行處理,處理完後回呼(Call Back)Client端的JavaScript。 4.Cli

all beta 2 version of VS2008 Express

Are You Ready??? http://msdn2.microsoft.com/en-us/express/future/bb421473.aspx 真是光陰似箭,日月如梭,一切盡在不言中啦 ~

ASP.NET AJAX中的非同步PageMethod呼叫

圖片
上回我們介紹過了ASP.NET AJAX當中的非同步Web Services呼叫,但是用過ASP.NET 2.0當中的新功能Call Back的朋友們可能會覺得麻煩,還要多建立一個Web Sevices(.asmx)頁面,如果您嫌額外建立一個.asmx的Web Services頁面太過麻煩,還有一種更簡易的方式可以進行非同步的呼叫,我們稱之為Page Method。 您可以建立一個.aspx頁面,並一樣佈置ScriptManager、TextBox與Html Button: 接著我們鍵入底下的程式碼: 接著,請測試執行的結果,您會發現一樣可以透過非同步的方式呼叫(按下Button之後不換頁就可以利用伺服器端的資訊更新TextBox內容),但是不需要額外建立了一個.asmx檔案,在程式的結構上稍為清爽一點了。這就是PageMethod的使用方式,請注意其中務必將.aspx中的PageMethod宣告為靜態方法(加上shared關鍵字),並且加上底下的Attribute(第1-2行): 同時間在.aspx頁面上的ScriptManager控制項,一定要將其EnablePageMethods屬性設為true,才可正確使用PageMethod。 資料來源:節錄自筆者『ASP.NET AJAX應用剖析立即上手』一書

ASP.NET AJAX中的非同步Web Services呼叫

圖片
在ASP.NET AJAX當中,除了透過UpdatePanel機制來建立具有AJAX功能的Web應用程式外,其實傳統(較為典型)的做法是利用Web Services的概念,來達成網頁上非同步呼叫的工作。 這也是整個ASP.NET AJAX架構的基礎,以及UpdatePanel控制項的根本原理。 當然,因為透過這樣的方式,您必須自行建立一些JavaScript程式碼,所以這種模式比較適合過去曾經自行建置過AJAX機制,或是利用ASP.NET 2.0中的Call Back技術來實作過AJAX功能的Web程式開發人員。雖然透過這樣的方式您要手動建立一些額外的JavaScript,看起來也比較難,但是對於整個AJAX的技術掌握度相對的也會更加深入。 請看AJAX技術架構,整個原理其實如下圖: 以一個最常見的功能(抓取Server端的時間放入TextBox)為例,我們想在按下網頁上的按鈕之後,在不postback的狀況底下,取得伺服器端的時間,並填入TextBox中。 上圖中的網頁有一個TextBox與一個HTML Button,當我們按下頁面上這個HTML Button時,開始觸發一連串的非同步Web Services呼叫動作: 1. 首先,使用者按下按鈕,瀏覽器上的Html Button發生了一個JavaScript的onclick事件(注意,由於是Cient端的onclick事件,因此不會觸發Postback動作)。 2. 我們在這個JavaScript的onclick事件當中,要呼叫遠端伺服器上的Web Services(假設這個伺服器端的Web Services會以字串格式回傳伺服器端的時間。 3. 接著在瀏覽器上(的網頁)利用一段已經撰寫好的JavaScript副程式接收此字串。 4. 再透過JavaScript副程式將接收到的字串填入TextBox。 完成。 透過上面這個步驟,我們就可以在不Postback的狀況底下,將TextBox的內容更新為目前伺服器端的時間。 我們接著看底下的範例,您會發現即使不使用UpdatePanel,依舊可以在ASP.NET網頁中完成AJAX功能。 要完成這樣的工作,我們需要先建立一個Web Services,稱為WS.asmx,負責回傳伺服器端的時間,在這個.asmx檔案中,鍵入底下的Web Services程式碼: 這和過去我們

將Silverlight佈署到正式機(Windows 2003 Server)上之後無法瀏覽?

圖片
讀者反應將撰寫好的Silverlight應用程式佈署到Windows 2003正式機上之後無法瀏覽(看到的是一片空白),但是在開發階段(VS2005)卻都可以。 關於這個問題,筆者在將Silverlight佈署到租用的Hosting時也發生過,其中一個主要的原因是在預設的狀況底下,Win2003 Server並不支援 .xaml 檔案MIME格式。 因此,其實伺服器端無法提供用戶端IE瀏覽器當中所需要的.xaml檔案,使用者看到的自然就是一片空白了。您可嘗試直接載網址列輸入 xxxxxxx.xaml的檔名,就可測試出這種現象 ,若無法讀取(檢視到.xaml檔案內容),就表示您的IIS伺服器需要設定。 若是Win2003 Server,您可以進入 IIS 管理員,開啟網站內容,增加一組 .xaml 的 MIME識別即可: 資料如下: 副檔名  類型 .xaml   application/xaml+xml 此問題與解決方案由 Johnny 提供。 參考網址為: http://www.cjcraft.com/blog/2007/05/08/HowToConfigureIIS50AndIIS60ToDeploySilverlightApplications.aspx

如何在非同步Postback過程中修改位於UpdatePanel外的控件內容?

圖片
ASP.NET AJAX當中有一個非常神奇好用的控制項 UpdatePanel,這個控制項可以幫助我們輕易的達成非同步Postback的功能,讓我們的.aspx頁面上可以直接加入AJAX技術。 時常有讀者詢問筆者一個問題,在UpdatePabel內所觸發的事件當中,是否可以動態的更新佈置在UpdatePanel "外的" 控制項? 一般來說,我們使用UpdatePanel時可會這樣佈置: 平常時候我們會把 "需要以非同步方式動態更新" 的控制項放在UpdatePanel裡,這時後要更新畫面中的TextBox1很簡單,只需要撰寫程式碼: Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)  me.TextBox1.Text= " ... " End Sub 在UpdatePanel當中的Button1所觸發的Click事件,會以非同步Postback的方式被執行,因此當後端事件Click被執行到,即可更新TextBox1中的值,且頁面不需要換頁(Submit)。 但是,您用UpdatePanel久了就會發現,我們不可能把所有的控制項都放在UpdatePanel當中,如果需要在非同步Postback當中,動態更新UpdatePanel外的控制項內容,該如何作呢? 例如: 當我們想按下UpdatePanel當中的Button之後,更新位於UpdatePanel外的控制項的內容,則需要透過動態Render JavaScript的小技巧: Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)  Dim js As String  js = "$get('TextBox1').value='...';"  ScriptManager.RegisterStartupScript(Me, GetType(String), "", js, True) End Sub 這樣就可以透過動態產生的JavaScript,來更新前端頁面上佈置於Upd

所謂的好音樂

所謂的好音樂就是,即使你隔了很多年,很久很久,久到實在忘記了第一次聽到那首歌的時候究竟是哪一年(或是當時和誰在一起、或是當時究竟是先看到電影還是先聽到音樂...),但是,每次重新聽到時,總是會帶給你感動,這種音樂,必須珍藏... 當然,很多時候可能不只是音樂本身的魅力,而是當下的那個情境,在某一年、在某一個時刻,因為特定的情境,有一首歌打動你的心,所以在你生命當中,留下了一個印記,過了許多年之後,或許時空變遷、或許真的滄海桑田,但是當你聽到那首歌,看到那個片段,赫然發現原來的記憶還在,塵封許久,但似乎不曾遺忘,然後你明白,很多事情會一直跟著你...還真的是給他:『凡走過的,必留下痕跡』... 一首好聽的歌很神奇,會讓你有感動... 這件事情常讓我嫉妒,因為寫程式似乎很難讓人有感動,有時候你想想寫程式跟作一首歌曲其實行為模式很接近,我都覺得那需要一點創意、需要思考、需要安靜、或是一點靈感... 有時候,寫一本書也是,我猜想我寫一本書的時間和周杰倫作一張專輯大概差不了多少,我大概在書籍銷售的單價上比周董的唱片銷售單價稍為略勝一籌,但是其它可就輸的一敗塗地了,例如,周董的唱片可能隨隨便便都可以在台灣發行首月銷售15萬張,我的書呢,如果在台灣能夠一個月內賣1萬五千本則出版社肯定會為我辦一個大型的慶功宴(因為這絕對破了近年來台灣的程式書籍銷售記錄,雖不敢說前無古人,但是肯定可以說後無來者了...),如果出版社心情好一點可能還會大手筆請David Tao來現場演唱一下,搞一個尾牙型的晚會... 另外一個我最遺憾的是,常碰到有人說聽了周董或David Tao的某首歌之後很感動(我自己也是),但是從來沒有讀者跟我說看到我這本書第三章寫了AJAX的主題之後感動到不行(有人感謝啦,但是感動的倒是從來沒聽過),我認為這可能是程序員的宿命吧,我想,要寫出一個 "令人感動" 的程式可能很難吧... 不過最近由於Silverlight的出現,我倒是有了一點點讓別人感動的機會,如果你是曾經參加過10/24(高雄) 10/25(台北) 研討會的同志們大概就知道了,我當天有demo了一個我說我這半年來寫過最有意義的、最有價值、最令人(包括我自己)感動的程式、寫了這麼多年程式,終於有一點點讓人感動的可能...我看我以後改行作Silverlight Show好了...(相信我,最近我

如何在ASP.NET中上傳檔案到資料庫

上回談到了如何下載檔案,包含資料庫中的檔案,動態產生的檔案...等。 這次我們來看看怎麼把檔案上傳到資料庫中,這邊需要注意一個小地方,在上傳檔案到資料庫的部分,資料欄位的性態若是Access請選擇Ole物件,若是SQL Server請選擇Image格式。 接著您可以透過底下的程式碼進行檔案的上傳: If Me.FileUpload1.PostedFile.ContentLength > 0 Then   Dim cn As New Data.OleDb.OleDbConnection   Dim dc As Data.OleDb.OleDbCommand   Dim para As Data.OleDb.OleDbParameter   Dim SQL, FileName As String    '連線字串   cn.ConnectionString = Me.AccessDataSource1.ConnectionString   cn.Open()    '執行 TextBox 中的 SQL 指令   FileName = Me.FileUpload1.PostedFile.FileName   SQL = "insert into FileStorage (FileName,FileBody) values ('" & FileName & "',?)"    '建立 SqlCommand 物件    dc = New Data.OleDb.OleDbCommand(sql, cn)   para = New Data.OleDb.OleDbParameter("file", Data.OleDb.OleDbType.Binary)   para.Value = Me.FileUpload1.FileBytes   dc.Parameters.Add(para)    '執行(透過 Parameters 將檔案儲存到資料庫)   dc.ExecuteNonQuery()   ShowAlertMsg("上傳檔案儲存完畢!") Else   ShowAlertMsg("上傳檔案不存在!") E