2010年10月9日 星期六

ASP.NET前後端溝通方法的簡單比較

 

溝通方法 前端 後端 備註
PostBack POST & PostBackOptions
Page.ClientScript.GetPostBackEventReference
Page.RegisterRequiresPostBack
繼承自IPostBackEventHandler需實做RaisePostBackEvent
繼承自IPostBackDataHandler需實做LoadPostData和RaisePostDataChangedEvent
註冊事件OnTextChanged
○:支援控制項開發,傳統做法,簡單有效
●:每次處理都會造成整頁回傳,畫面會閃動,造成視覺疲勞,眼睛不舒服。
CallBack Page.ClientScript.RegisterClientScriptBlock
Page.ClientScript.GetCallbackEventReference
Page.ClientScript.RegisterOnSubmitStatement
Page.ClientScript.RegisterHiddenField
JavaScript物件封裝
繼承自ICallbackEventHandler需實做GetCallbackResult與RaiseCallbackEvent
註冊事件OnClientCallBackResult
○:支援控制項開發,最能夠客製化的方法
●:要處理所有的細節,因此也最複雜,介面稍有變動,程式需要改很大
AJAX之PageMethod PageMethods物件操作
JavaScript物件封裝
[System.Web.Services.WebMethod()]
靜態方法
○:容易使用
●:在同一個頁面上使用,限用靜態方法,
Web Service(.asmx) (無) [System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptService]
○:可跨平台,利用現有技術,程式較易撰寫
●:交易處理、安全性與效率不如WCF
泛型處理常式(.ashx) GET/POST 繼承自IHttpHandler
需實作ProcessRequest與IsReusable
○:可輸出各種MIME文件
●:只能輸出MIME文件
WebClient WebClient 類別操作與事件處理 (無) ○:可取得後端的各種資源(包含二進位資源)
●:非強型別,常透過反射或轉換成需要的物件
WCF – http polling WCFService.ServiceClient() [ServiceContract]
[OperationContract]
[DataContract]
○:目前最方便有效率提供前端資料的方法
●:只能傳輸文字
WCF – net.tcp     ○:可傳輸文字或二進位資料,大量分散式商業模式
●:?

Microsoft Expression Blend3 的視窗種類與快捷鍵

選擇功能表的[視窗(W)]來切換開啟或關閉指定的視窗。

常用視窗(預設勾選)分類如下:

工具:即常用工具箱,其中雙箭頭符號(>>)會連結到[資產]視窗。

物件與時間軸:物件繼承結構與顯示物件內容何時變更的時間軸線。

觸發程序:WPF限定。可以指定事件與屬性,在新增動作時,需要在[物件與時間軸]上增加腳本(系統會自動詢問)。

狀態:對指定的事件改變物件的狀態。需配合[物件與時間軸]使用,若事件不是內建的,則必須增加處理事件的程式碼。

專案:顯示專案內容與檔案,與Vistual Studio內所顯示的一樣。

資料:可定義資料來源。

資產:顯示所有的控制項、樣式、行為(會改變[狀態])與效果。

資源:專案中建立的各種資源,例如筆刷、樣式...會顯示在此。

屬性:可以調整所指定物件的內容,也可以指定物件的事件。

視窗常用快捷鍵如下:

F4或Tab:只留下工具視窗,其他視窗隱藏。

F6:切換[設計]與[動畫]工作區。在[動畫]工作區時,會放大時間軸,以方便動畫的操作。

Ctrl + Tab:切換工作區的頁籤。

學習Silverlight的第一步

先來看一下微軟的Silverlight架構圖。

其中最重要和最的地方是WPF和WCF。WPF藉由CLR執行引擎來解析XAML文件,使得下面展示核心中的東西能夠表現出來。WCF則大量簡化了伺服器端與客戶端的異步通訊過程,使程式設計人員能夠專心發展重要的商業邏輯,而不會陷落到與通訊細節糾纏的地步。

微軟在編寫XAML上提供一套軟體,能夠方便修改XAML文件內容,方便美術設計人員與程式設計人員在討論與介接上做一個完美的整合,這一套軟體便是Microsft Expression Blend。

學習Silverlight的第一步,不是開始寫一個最簡單的”Hello World!"程式,而是開始玩Blend軟體。很多以前需要程式支援才能執行的動作,專家都已經幫你建置好了,你所需要的只是把他們組合起來而起,而不是"自己重新發明一個輪子"。

建議的學習流程:

1. 想要快點學會Silverlight的人可以採用:Blend → Silverlight → WPF → WCF

2. 想要按部就班,了解整個運作方式的人則建議:Blend → WPF → WCF → Silverlight

Blend中文建議資源:

1. 書籍:新世代創意設計工具 – Microsoft Expression Blend (上奇科技) (ps: Silverlight 2.0)

2. 網站:微軟MSDN Expression Blend 3

註:Silverlight 和 WPF 間的 XAML 處理差異

將 ASP.NET 追蹤與 System.Diagnostics 追蹤整合(簡要版)

1. 透過組態檔為應用程式加入 WebPageTraceListener 和 TextWriterTraceListener
將下列程式碼放在 Web.config 檔中的 <system.web> 區段後面。
<system.diagnostics>   
  <trace autoflush="true">
    <listeners>
      <add name="WebPageTraceListener"
        type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
      <add name="TextWriterTraceListener"
        type="System.Diagnostics.TextWriterTraceListener, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        initializeData="AspTrace.log" />
    </listeners>
  </trace>
</system.diagnostics>

2.自動編譯應用程式並啟用追蹤
將下列程式碼放在 Web.config 檔中的 <system.diagnostics> 區段後面。
<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp"
              extension=".cs"
              compilerOptions="/d:TRACE"
              type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="1" />
    <compiler language="VB"
              extension=".vb"
              compilerOptions="/d:Trace=true"
              type="Microsoft.VisualBasic.VBCodeProvider, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </compilers>
</system.codedom>

3. 測試
using System.Diagnostics;

Debug.AutoFlush = True
Debug.WriteLine("TEST")

System.Diagnostics.Trace.AutoFlush = True
System.Diagnostics.Trace.Write("GetAuthors called.", "AUTHORCLASS TRACE")

4. 注意事項
依照預設,必須等到填滿追蹤緩衝區後,才會將追蹤資料寫入目標 (Target) 系統。
若要在要求 ASP.NET Web 網頁後立即查看追蹤記錄檔中的追蹤資料,請先將 autoflush 屬性設定為 true,以在每次寫入追蹤資料後清除緩衝區。

5. 參考資料
逐步解說:將 ASP.NET 追蹤與 System.Diagnostics 追蹤整合

使用宣告式安全性保護"組件"

使用宣告式安全性保護組件

讀書筆記《探索需求-設計前的質量》第六章 自由問題

 

  • 下面是一些我們發現用的非常廣泛的過程的自由問題:
    誰是客戶?
    對該客戶而言,什麼樣才稱為是非常成功的解決方案?
    (鞋子上的一點糞便可能會讓城裡人感到厭惡,但是在需求工作中,必須學習不錯過任何閃失的價值。)
    解決該問題的真實原因是什麼呢?
    我們是否建立單獨的設計團隊,或者是多於一個的團隊?
    團隊成員應包括哪些人?
    我們會有多少時間來做這個項目?
    項目開發時間和價值的平衡是什麼?
    關於這一設計問題的解決方案我們還能在什麼地方獲得?
    我們可以複製一些早已有的資料嗎?

 

  • 下面是一些有用的產品的自由問題:
    這個系統解決什麼問題?
    這個系統會帶來什麼問題?
    這個系統最有可能遇到的環境是什麼?
    我們需要或期望這個產品有什麼樣的精確程度?

 

  • 下面的連環問題曾經被多次有效地使用:
    我的問題是不是太多了?
    我的問題與項目相關嗎?
    (如果答案是否定的,緊接著就問下一個連環問題:哪一個?為什麼?這些問題總能夠揭示主要的誤解。)
    您是不是回答這些問題最適合的人?
    (在這裡千萬小心>確切的說,很多人會不情願回答這個問題>換作是你,你也不會喜歡常常承認自己不是權威或者不是主管吧。)
    您的回答是正式的嗎?
    為了確信我們相互之間的理解,我覺得如果把這些問題寫下來會有所幫助,這樣我就能夠在空閑的時間研究它們了。我可以記下您對問題的回答並給您一個拷貝以用於研究和確認嗎?
    (這對某些人來說可能是一個敏感的問題。由誰來記錄這些東西並不重要,重要的是必須有人來做,並且對方應該核對以確保明確的交流。)

 

  • 如果至今你們的交流僅限於書寫,那麼請使用這個問題:
    這些書面材料非常有用,但是我想如果我們能夠面對面地討論這些問題,可能會讓我更好地理解這些問題。我們可以蒐集某些內容,這樣我們就能夠相互更好地了解,並且能夠澄清在這些地方的一些問題,您覺得呢?
    會不會還有其他人能給我ㄧ些有幫助的回答呢?
    有沒有什麼產品將會使用的環境可以讓我參觀一下呢?

 

  • 下面的連環問題應該在每次交流技術的時候提出:
    還有什麼內容我應該問您的嗎?
    那您有沒有什麼問題須要問我?
    萬一要是這次有什麼漏掉的內容,以後我可以再來或給您打電話問一些問題嗎?

 

  • 自由提問能夠抓住那些微妙假設中的本質的信息。我們很容易錯過那些來自無法用語言表達的重要信息,比如說猶豫、迷惑或喜悅的眼光、欣喜、生氣以及身體姿勢的變化。只要可能,無論什麼時候都應該有兩個人來進行自由提問,一個來問問題,另一個來觀察並紀錄這些非語言反應。觀察者可能會問下面的連環問題:
    我注意到您在回答這個問題的時候猶豫了很久,是不是還有一些其他內容我們還沒問到呢?

 

  • 自由問題常常能夠揭露一些在不同當事人之間的互相矛盾假設。因為你已經預先準備了這些問題,因此你可以更容易地比較這些回答,而且你一定要保持這種作法。然後你就可以問:
    上次我問X小姐這個問題的時候,他卻是那樣說的。您知道她為什麼會說成那樣子呢?

 

  • 比較回答的一種簡單的方法是同時拜訪2個或更多的相關人員。如果他們之間有什麼不同的假設,你就可能看到一個明確的反應。然後你可以這麼問:
    我注意到您好像並不贊同那個回答,那您覺得它是怎樣的呢?

 

  • 在同時拜訪超過兩個相關人員的時候,無論如何應該注意不要讓其中一個回答限制另一個的。這種約束將會在你的項目進展中折磨你,所以你應該在早先的時候把握機會問:
    您對剛才的過程滿意嗎?
    是不是有什麼原因讓您感到不能直率地回答問題?
    當然,如果他們覺得不滿意,那麼對於說出他們不滿意這個過程而言也會使他們不舒服。如果你感覺到存在這種情況,可以在私下裡單獨和每個人問上面的問題。

 

  • 所有這些都會引發另一組苛刻的連環問題,但是他們常常不應該直接提出來:
    您能告訴我一些關於這個項目中的其他成員的情況嗎?
    對於那些和我們一起在這個項目尚工作的同事您感覺怎麼樣?
    對這個項目來說,是不是還需要一些我們沒有找到的人物?
    對這個項目來說,是不是有一些成員是多餘的?

 

  • 如果直接的方法行不通,那就不要用問問題的方式來獲得回答,你可以在他們對其他問題的回答中找到隱含的回答。

當有人提起另一個人的時候,做一個小小的紀錄,並且有可能的話可以問問:

您能告訴我關於那個人的一些更多的情況嗎?

 

  • 自由提問讓你在設計過程中找到那些有關全局的問題。
    它們還能夠幫助我們克服在剛開始一個新項目或新關係時的尷尬。
    自由提問將幫助你避免聽到諸如『啊,我們還以為你是知道的。通常我們都是那樣做的。』之類的話。

 

  • 遵循步驟:
  1. 信任與合諧的氣氛一旦建立起來之後,就應該向他們解釋你需要問一些非常籠統而透切的問題。解釋清楚這類問題的重要性,並且確信在此時你們已經在這個過程的價值上達成了共識。
  2. 有些人會難以理解這些籠統的問題有什麼用處。必要的時候需要緩步推進。先問一個問題,然後徹底地研究這個回答,再向他解釋這裡所包含的信息對你的重要性。

程式碼存取安全性

CAS

驗證及授權使用者

驗證及授權使用者