今天帶了NB,理由是上完一天課,回家還要連夜整理筆記實在需要過人的意志力,而本人小時候並沒有養成到溪邊看小魚逆游的習慣... 只好偷懶直接在現場用NB寫筆記。

【Silverlight 3】

8:50開始對很多人來說好像很有挑戰性,一開場時人數少得可憐,害我懷疑走錯場子到了中國通史或高等微積分教室...

企業系統的可能解決方案: Thick Clients, Smart Clients, Thin Clients,各有優劣。而Thin Client仍存在一些問題,例如: 無法離線作業、互動性不夠強、涉及技術廣泛導致開發不易等。

理想RIA應具備的條件: 部署容易、SOA、容易開發、跨平台、操作互動順暢、可離線使用...

以上引出了本堂的主題: Business Application Template,試圖提供一套以Silverlight為基準的網站樣版,其中內建如 頁籤功能、登入機制...等,讓Developer能更容易入門。

<DEMO> 主要Scenario是建立一個連絡人清單的CRUD範例: AddressBook.mdf –> Linq to SQL Model –> .NET RIA Service(DomainDataSource,記得要勾自動產生SL端的Proxy Class),以下是幾個重點提示:

  • Activity Control: LoadingData事件時設IsActive = true,LoadedData時設false,就可以在載入過程顯示"載入中的捲動進度條"
  • DataPager Control: 跟DataGrid設定同一個DDS(DomainDataSource)就自動產生分頁效果。(有沒有這麼省事呀?)
  • 將Client端的編輯結果更新回去: DataGrid裡就可以直接編輯數值,送出鈕裡只要寫DataGrid.CommitEdit(), DataContext.SubmitChanges()就能完成資料更新。(保安! 保安! Programmer可以爽成這樣嗎?)
  • DataForm Control: 由Linq to SQL物件資料自動長出簡單的編輯UI。
  • DataAnnotations: Display / Required / StrngLength / RegularExpression / Editable 等修飾字,讓自動生成的UI可以幫忙做驗證。
  • DataGrid.RowDetailsTemplate: 示範在DataGrid中直接顯示圖片。(小插曲是因為WebDev Server Port為亂數產生,得修改DB裡的URL。有點好奇,好像蠻多人都不愛將專案直接掛在IIS上開發。)
  • Chart Control: 跟DataGrid Bind到同一個DDS即可,切換時有淡入淡出特效、改數值Bar也會以動畫方式長高,很炫!
  • Element to Element Binding: 點Chart的某條Bar,會觸發DataGrid某一列變成被選取狀態,連帶DataForm也換成顯示該筆資料,完成三者間的連動。

OOB (Out of Browser) – 有API可以檢測連線/離線模式、網路卡連線狀況等。基本運用方式是在Project Property Page啟用OOB,從Browser在SL上按右鍵可以選擇將程式安裝到該台電腦上。OOB修改存檔時,依網路狀況決定要寫到本機( IsolatedStorageFile ) 或是存回Server端。

另外,SL3也開始支援Multi-Touch,Keywords: Touch.FrameReported, e.GetTouchPoints()…
[董老師的開發心得: Multi-Touch LCD普及後,五十肩可能也會變成電腦使用者的職業病之一。我建議美國大聯盟現在就明文禁止投手使用支援Multi-Touch的LCD及程式!]

PS: 終於聽到Silverlight研討會有敲中我心中的甜蜜點,畢竟播播影片、轉轉圖片無法讓我糊口呀~~~

【Windows Azure Platform】

Public Cloud目前仍在快速變化中,大家對Cloud尚未有明確一致的定義。Azure雖然今年10月會開始營運,但應該還會大幅改變。

Windows Azure Platform包含: Windows Azure, .NET Serices, SQL Azure, Live Services(可能被除名,因為比較偏一般使用者)

Windows Azure: Windows Server online(註: 多少有點Web Hosting的味道吧?), 支援.NET, unmanaged, PHP,將來可能會支援Java(咦? 何必?) 。Application被拆成Web Role與Worker Role(指較龐大,批次型作業),每個Instance是一個VM,由Windows Azure Fabaric Controller監控及動態調配,其中核心的技術便是Hyper-V。每個Instance會對到一個VM,綁在一個CPU Core上。

VS2008開發時,Azure專案裡會建出WebRole(就是ASP.NET Application)及WorkerRole,而目前己可直接在Local Machine上模擬,這點算是領先Google。(Developement Fabric可以觀察Instance執行狀況)

目前每個Live帳號可以申請在Azure上放一個專案,WebRole, WorkerRole Instance數不能超過兩個,使用windows.azure.com的介面就可以上傳部署(粉久,要五分鐘以上...)。

機房維運成本的例子: Google的機房的客製規格Server損壞時是用機器人抽換,可是成本仍太高,後來再換成壤了先不管,每個月再固定派人推車去回收,企業自行經營機房的成本自然不能與這種經濟規模相比。

關聯式資料庫的設計初衷並不是針對要Scale Out成極大規模的情境,當企業想要做Facebook這種應用時,肯定無法滿足。

Windows Azure儲存: Blobs-簡易階層二進位資料、Tables: 有Entitiy觀念的階層資料、Queue-多用於WebRole, WorkerRole間溝通。

Tables並不是傳統RDBS的Table, Container包含多個Table,Table包含多個Entity(XML),而有兩個參數: Partition Key哪一個Storage, Row Key哪一筆。

GuestBook範例: 用到三種資料儲存,圖片-Blob, 留言-Tables (Open Source工具: Azure Storage Explorer,可以看到Blob, Table, Queue)

Azure Storage只能以REST存取,沒有ADO.NET、沒有LINQ,不能JOIN,但這就是追求Scale Out要付出的代價,Developer必須學習不同的設計模式。

例子: 資料Sorting,將排序工作拆解成多部分,分給多個WorkerRole Instance多工執行。換句話說,程式要特別設計過,才能善用Azure的優勢。而許多單機可以做的事在Azure中是不允許的,例如: 存取本機檔案,這會破壞Scale Out(就像避用Session一樣道理)。

Azure Service可否移到客戶機房? 有可能,但目前沒有計劃。

適用Azure的情境: 網路新創公司、ISV(SaaS、.NET可直接移植)、企業用戶(無資料隱私Issue時)。不是所有情境都適合,有相當比例仍應維持Software的模式。(黑註: 我想Google則應該會義無反顧大推Cloud,公司專精領域使然)

其他Pubic Cloud Platform: Amazon Web Services(台灣沒有分公司), Google AppEngine(Java/Python,500萬次PageView以下免費,但SLA中沒有Downtime保證), SalesForce.com(Apex定義語言開發,但較限制於CRM應用)

SQL Services改名為SQL Azure Database,就是SQL 2008虛擬化放在MS機房。今年5月才推出,考量某些作業性質不適合雲端特性,所以有一狗票的Procedure/功能無法使用,不能直接使用SSMS管理(將來可能會有SQL Azure專屬的GUI管理程式"Huron?”,SSMS現階段雖不能管理,但能用來做Query),目前只能先用SQL Azure Migration Tool頂著先。(可產生SQL Azure可支援的SQL Script)

.NET Services – 9/18 MS宣告10月CTP要做重大改版(由WS改為REST)... 所以今天講的是舊的
2007 BizTalk Service -> 2008 .NET Services –> 2009 Workflow被移除了,命運多舛~~~
功能: Service Registration(A, B, C都註冊,A送訊息, B/C會收到)、跨公司做資料交換、穿防火牆交換資料


Comments

# by Ark

XD(保安! 保安! Programmer可以爽成這樣嗎?) ~這是政治迫害,司法迫害 SL會有類似FMS的規畫嗎?

# by Ian

hi Jeffrey; Azure Storage只能以REST存取,沒有ADO.NET、沒有LINQ,不能JOIN 我有點疑問,以我所知道的Azure Storage其中Windows Azure Table是有支援linq的說 這其中是否有誤解? 還是我認知有誤呢?

# by Jeffrey

to lan, 我再找了些佐證資料,發現確實Azure Table Storage是可以用LINQ的(雖然不是所有功能都支援),我猜講師的原意是不像SQL有LINQ to SQL這種方便的資料表自動對應的機制。如果有錯再請各位先進指正。

Post a comment