2009年3月30日 星期一

.NET 核心程式設計 第一章:使用集合管理物件

◎ HybridDictionary會自行根據資料量,選擇成為要變成Hashtable(>10)或ListDictionary(<10),這些都是採用key/value的方式儲存,而且皆為object。而這些的每一個子項叫做dictionaryentry

◎要實作IEnumerator的class,才可以使用foreach或xxx.ForEach
List a = new List();
a.ForEach( delegate(DateTime day ){/*要做的事情*/} )
◎ 堆疊(後進先出) Stack:Push()是放進去,Pub()是拿出來
佇列(先進先出) Queue:Enqueue()是放進去,Dequeue()是拿出來


SortedDictionarySortedList
一個一個填入時會比較快占用較少空間,維護兩組(Key/Value)陣列,一次填入很多時會比較快

(一次填入的方式為使用建構子)

2009年3月26日 星期四

ASP.NET 3.5 網站開發進階-9

第九章:效能調校與網站監控
1.網頁快取(OutputCache)
OutputCache的VaraByParam屬性當沒有要設定快取條件時,設定為"none",如果要透過QueryString的參數當條件,就設定為參數名稱,如果要依控制項的value當條件,就設定控制項的ID。
多個網頁都要用OutputCache時,可在WebConfig中設定CacheProfiles,並將name指定到page的CacheProfile屬性。
除了指示詞的設定外,OutputCache也可以用HttpCachePolicy類別(Response.Cache)寫Hard Code實作出來,這樣能更精確控制快取。
透過UserControl的加入,可以控制網頁區塊快取。
2.資料快取(Cache)
很類似Application物件,但Cache彈性更大可設定到期時間。

ASP.NET 3.5 網站開發進階-8

第八章:自訂控制項進階設計
CustomControl沒有設計畫面,功能彈性比UserControl好,並且可以繼承既有的控制項,當開發好時,將專案編譯為dll組件,就可以佈署至網站中。
新增CustomControl時,範本選擇ASP.NET Server Control。
狀態維護:
要複寫SaveControlState, LoadControlStage事件,並在OnInit事件時透過Page.RegisterRequiresControlState在頁面中註冊事件程序。實作請參考練習8.3
Custom Composite Control:
自訂控項裡面也可以放既有的控項,首先類別要先繼承CompositeControl,並將子控制項的初始化寫在override CreateChildControls方法中,並給定初始值,將控制項加到this中。
支援樣板的Custom Control:
1.繼承CompositeControl
2.設計一個實作ITemplate介面的屬性並新增該屬性的TemplateContainer, PersistenceMode兩個Attribute
3.override CreateChildControls方法用ItemTemplate介面的InstantiateIn方法建立樣板。
4.自訂的Template樣板smartTag設計模式不支援。

2009年3月25日 星期三

ASP.NET 3.5 網站開發進階-7

第七章:使用者控制項設計
UserControl的缺點是無法跨網站共用,如果想共用就要設計成CustomControl。
UserControl可以透過自行定義屬性與方法來增強他的彈性。
UserControl可以在設計頁面時直接嵌入在網頁中,也可以在執行時用動態載入。
動態載入的指令-Page.LoadControl(string Path)
通常我們會將UserControl放在一個PlaceHolder的容器中-PlaceHolder1.Controls.add(obj)
PlaceHolder很像Panel差別在於一個render出來沒有div tag一個有。
當動態載入UserControl時,保存狀態就很重要,最簡單的方式就是在PageLoad的時候都載入,
也可以用override LoadViewState方法來手動實作狀態的存取。參考練習7.4
補充觀念:當Browser送出一個Page在submit時postback的Request時,會將頁面上的viewstate一同submit,WebServer收到Request就會在LoadViewState事件將控項儲存在ViewState的值載入。

ASP.NET 3.5 網站開發進階-6

第六章:網站會員機制規劃
這一章你要會...
1.用MemberShip API來管理使用者及角色資料,例如,建立使用者時,可以依CreateUser回傳的MembershipCreateStatus來判斷建立狀態是否成功。
2.執行aspnet_reqsql.exe將MemberShip的資料表建立在自訂的資料庫中。
3.MemberShip允許將不同資料表建立在不同資料庫中。
4.在WebConfig設定profile的新屬性,MemberShip會將你設定的屬性儲存在一個欄位中,提供profile的強型別。
最後...
請參考課本練習6.2:Ajax Membership API的整合應用,了解如何用javascript驗證登入。

ASP.NET 3.5 網站開發進階-5

第五章:AJAX進階設計
Microsoft Ajax Library是由JavaScript寫成,封裝在System.Web.Extension.dll中,預設.NET Framework安裝時會將它裝到GAC之中。它提供了JavaScript擴充功能,包含增強型別系統以及物件導向能力。透過此程式庫,document.getElementById("TextBox1").value可改寫為$get("TextBox1").value,這些稱為捷徑語法。
ASP.NET AJAX在瀏覽器執行會觸發生命週期事件,觸發順序請參考課本5-9。Application物件的load、unload事件處理常式不需要透過程式註冊,可以直接撰寫function pageLoad(){}。
熟悉PageRequestManager類別可以控管頁面的部分更新,例如與ScriptManager控項的RegisterDataItem方法,就可以在非同步的postback時,傳送額外的資料,以更新UpdatePanel之外的控項。也可以利用beginRequest、endRequest事件的搭配控制按鈕的狀態,避免使用者重複按按鈕。
如果要除錯AJAX,需要設定三個地方:WebConfig的debug、瀏覽器設定的ScriptDebugging、Display notification.
Sys.Debug.trace可將錯誤訊息輸出至output視窗,Sys.Debug.traceDump方法可以將物件資訊輸出在頁面中名為TraceConsole的textarea控項中。
為了方便管理js檔案,可以用專案部署內嵌在組件中,實作請參考課本練習5.4
在AJAX網頁中,可以再將ScriptManager的EnableGlobalization屬性設為True,啟用指令碼全球化,這時,將Page的Culture設為auto,就可以取得控制台或是瀏覽器設定的文化特性,顯示特定文化的時間、貨幣等相關資料。EnableLocalization屬性可啟用指令碼當地語系化,配合page的宣告UICulture=auto,可讀取各語系專用的resource資源。
當你的網站程式用到多個js檔,可以封裝成一個檔案,將程式碼組合在一起,降低瀏覽器與伺服器溝通的次數,用法是使用ScriptManager的CompositeScript,將ScriptReference寫在一起。

2009年3月18日 星期三

第十天上課(台北恆逸)

 

第三章:網頁多國語言程式設計

建立Local資源檔
選擇aspx的設計畫面,點選工具裡面的產生當地方資源檔,VS開發工具就會產生相關的.resx檔,若多國語系例如default.aspx就會產生default.aspx.resx,若需要加入台灣語系,就必須覆製default.aspx.resx一份將檔名改成default.aspx.zh-TW.resx,而且Local資源檔一定要放在App_LocalResources目錄內。

建立Global資源檔
在App_GlobalResources目錄內加入一個資源檔,這個自訂名稱的資源檔和Local資源檔一樣,例如建立一個MessageText.resx,要支援台灣語系就是覆製一份成MessageText.zh-TW.resx,加入後建置一下,就可以在其他的地方透過強式名稱Resources.MessageText.YourProperty。

第四章:狀態管理機制

狀態分為伺服器端和用戶端,至於使用方法和時機,全憑需求而定沒有一定的方式。
在伺服器端有
Application物件
Session物件
Database資料庫
在用戶端有
Cookie物件
ViewState物件
QueryString

2009年3月13日 星期五

第九天上課(台北恆逸)

 

第一章:運用ADO.NET建置網頁

ADO.NET概觀

ADO.NET下各Data Provider 共同的物件

Connection、Command、DataReader、DataAdapter

各DataSet 共同的物件

DataTable、DataRelation

Web.config大部份的Section都有對應的類別,例如你想要查詢或動態修改Web.config的連線字串,你可以這麼做:

ConnectionStringsSection cnSection=(ConnectionStringsSection)WebConfigurationManager.GetWebApplicationSection(“connectionStrings”);

string cnStr=cnSection.ConnectionStrings[“YourCn”].ConnectionString;

補充一下連線字串大部的人都不會注意的地方,如果你透過IDE幫你建立連線字串時,有沒有注意過Persist Security Info這個屬性,雖然不管你設True或False,對連線資料庫都沒有影響,那到底有什麼作用?這個屬性其實就是問你是否保存安全資訊,簡單的說就是當ADO在連線資料庫成功後是否保留密碼資訊,True表示保留False則不保留,這裡要特別注意的一點是ADO預設是True而ADO.NET預設是False。

那裡會痛?
雖然別人可能拿不到Web.Config檔,或許他有機會丟一個aspx檔到你的主機(例如你提供檔案上傳又沒考慮到安全性時),他寫一個SqlConnection物件,又好死不死知道你的連線字串名稱,嘿嘿這樣一來不就可能看到你的密碼了。

 

使用SqlDataSource存取關聯式資料庫

可以指定資料傳回模式,有二種分別是DataSet及DataReader,當然就是DataSet的功能較多,如GridView及ListView的排序、分頁等功能,而DataReader則是較著重於效能及減少佔用伺服器的記憶體。

自訂資料來源控制項參數

透過DataSource控制項提供許多參數來源,但是如果參數來源不在預設選項中,如何產生新的自訂參數呢

1.建立一個類別繼承Parameter,例如MyParamer,然後指定一個屬性MyString,注意必須引用System.Web.UI及System.Web.UI.WebControls。
public string MyString
{
get{
object obj=base.ViewState[“MyString”];
if(object ==null)
return string.Empty;
return object.ToString();
}
set
{
base.ViewState[“MyString”]=value;
base.OnParameterChanged();
}
}
2.override object Evaluate(HttpContext context,Control control)這個方法,回傳值就是自訂的參數型別。
Protected override object Evaluate(HttpContext context,Control control)
{
string returnStr=”%” + MyString + “%”;
}
3.在使用DataSource的頁面註冊Assembly和Namespace(當然如果你是放在App_Code資料夾的話,只需要指定Namespace),如<%@ Register Assembly=”yourAssembly” TagPrefix=”customMy” namespace=”yourNamespace”%>

如此一來你就可以透過精靈或是自己寫出像是下列的程式
<asp:SqlDataSource Id=”sqlDS” runat=”Server”>
<SelectParameters>
<customMy:MyParamer


第二章:資料存取進階設計

設計資料元件

同一專案建立不同的程式語言必須

1.新增對應的資料夾,也就是在App_Code下建利不同資料夾放不同語言,例如App_Code\VB及APP_CODE\CS。

2.設定web.config
<compilation>
<codeSubDirectories>
<add directoryName=”VB”/>
<add directoryName=”CS”/>
</codeSubDirectories>
</compilation>

建立可供objectDataSource選擇的物件如下:
[System.ComponentModel.DataObject()]
public class CustomerInfo
{
}

DataObjectMethod Attribute
有Fill、Select、Update、Insert、Delete,分別用來對應在設定ObjectDataSource時精靈中的對應頁籤。

LINQ
這裡介紹的是LINQ to SQL Classes,在加入新的項目中,選擇LINQ to Sql Classes,建立一個.dbml的檔案,就可以使用相關的LINQ查詢語法。

老師上課的補充

Web.config Pages下的Namespace是提供給SingleFile的Namespace、Separate是不支援的,而Namespace無論是在page的 @Import 或是CodeFile中的Using,其實就如同像在DOS我們為了方便預設一些路徑,而不用打每一個指令都打長長的路徑,至於效能上是沒有什麼影響,只是如果Using的越多,那麼類別名稱一樣的機率越大,會不會不小心就用錯了類別呢?

ExecuteReader是ReadOnly、ForeOnly,也就是你只能讀取而且只能一筆一筆往下讀,不像ASP的RecordSet可以Update、Move.First等功能,而在記憶體及效率上都有明顯的差別的改善,

DataBase的Loading最大在Select、Where、Sort,其他新增修改刪除都是其次(不絕對啦,如果你修改刪除前要跑一大堆Select就….);對於減輕DataBase的Loading,你可以用DataView來進行RowFilter、Sort,如此一來Loading就降在Client的身上(這裡是指對Databaes而言,像IIS就是他的Client)。

那裡會痛?
Database的效能來自於一台硬體的極限,當需求大於極限,你需知道減低或分擔Loading的方法。
Web.config加解密

在machine.config裡面提供了二種對web.config加解密的方式如下

<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
    <providers>
        <add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="NetFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false"/>
        <add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt" useMachineProtection="true" keyEntropy=""/>
    </providers>
</configProtectedData>

2009年3月6日 星期五

第四個禮拜

第七章 佈景主題與樣式表

1. Theme 和 StylesheetTheme的分別,在於如果屬性有重複,前者會以布景主題為主,後這則以網頁設定為主
2. 若要動態設定Page.Theme的屬性,要在Page_PreInit裡面設定(這個事件會在PageLoad前觸發)


第八章 網頁資料存取開發

1. 伺服器總管那邊,如果要設本機,除了localhost外,還可以用(local)和.的方式設定
2. ListView是3.5以後出來新的控制項,可搭配DataPager使用,而DataPager也只支援ListView


第九章 AJAX介紹與運用

UpdatePanel屬性:
UpdateMode - Always:網頁只要postback就會更新,包含非同步postback; Conditional:根據不同的條件(如Trigger)來決定是否更新
ChilderAsTrigger:是否設子控制項為觸發器,也就是說只要UpdatePanel內的控制項postback就觸發部分更新
Trigger:觸發器,分成AsyncPostBackTrigger(非同步)和PostBackTrigger(同步),非同步可設定控制項ID和事件名稱,當某控制項(不再up內)的某事件被設定成Trigger時,他只會觸發非同步的更新;而同步的trigger只需設定控制項ID,當某控制項(不論是否在UP內)被設定為同步的trigger時,所有的postback都會是完整的postback

注意:
1. 而FileUpLoad和TreeView放到UpdatePanel內會失效!!!
2. Response.Write會造成UpdatePanel錯誤

Timer控制項(AJAX):
Interval設定每多少毫秒要做的方法
Tick設定要做的事情

(補充)這裡有介紹client時鐘的方法
http://www.shsh.ylc.edu.tw/~t1056/program/javascript/jscript/time/jsclock.htm

UpdateProgress:當部分更新尚未完成時,此控制項內包含的所有內容將會呈現


第十章 實用控制項運用

MultiView
Button的Command可以搭配View的切換
1. CommandName設NextView、PrevView => 下一個View、上一個View
2. CommandName設SwitchViewByID,CommandArgument設要看的IDView
3. CommandName設SwitchViewByIndex,CommandArgument設索引值

FileUpload:
1. Server.MapPath(string pathName)會將路徑轉換為實體路徑
2. FileUpload.HasFile可檢查是否有該檔案
3. 預設限制上傳是4MB,若要更改要去Web.config
system.web
_ httpRuntime maxRequestLength="4096"/
/system.web>

ImageMap、Wizard練習一下
(Mobile Web Form要看一下,會考)


第十一章 網站錯誤客製化

1. debug = true 可以在Page設也可以在Web.config設
2. 如果有Page_Error(object sender, EventArgs e)事件,在網頁發生錯誤時就會執行
3. 網站錯誤處理要新增一個Global.asax,寫在Application_Error(object sender, EventArgs e)內
4. 可用Server.GetLastError()取得錯誤訊息
5. 網頁發生錯誤後,會先執行網頁錯誤處理,再執行應用程式錯誤處理。因此,若要在網頁錯誤處理完後,就不執行網站錯誤處理,要在網頁錯誤處理加上Server.ClearError()
--以上都是廢話--
6. 可以直接在web.config中設定,system.web下的customErrors。mode有On, Off, RemoteOnly三種,On是本機和遠端都看到自訂錯誤頁面;Off是都看到預設錯誤頁面;而RemoteOnly是只有遠端看到自訂,而本機看到預設。defaultRedirect屬性則是自訂錯誤頁面路徑。另外可在Page設定錯誤重導路徑,在aspx的Page設定ErrorPage屬性。另外,可藉由error的tag來自訂http錯誤


第十二章 網站發行與部署

● 除了設定虛擬目錄這個方法以外,也可以用一個等同於這樣的方法:在你要的目錄上按右鍵 -> 內容 ->Web Sharing這邊做設定

● 如果停止該網站的應用程式集區,會得到http503的錯誤
● 組態檔會找離自己最近的那一個
● Compilation 的 batch 預設為true,意思為批次編譯網頁,究是說如果第一次進A網頁才會編譯A網頁,以此類推;而若設成false,則會在網站第一次執行就把全部網頁編好
● 請練習建立應用程式安裝檔


第十三章 網站安全性規畫

ASP.net會使用下列的機制來達到安全性:
● 驗證(Authentication):使用Credential證明你是誰
● 授權(Authorization):用戶端是否有權限存取要求的資源
● 模擬(Impersonation):使用已通過驗證並已授權的用戶端身分來執行程式 => identity impersonate="true"
● 委派(Delegation):更進階的模擬機制,允許以模擬的用戶端來存取遠端資源

驗證(Authentication):
None:不驗證
Windows
● 由作業系統帳密驗證
● 若要啟用模擬,可在web.config加入 identity impersonate="true"
Forms:由程式設計師自行處理密碼驗證邏輯(紀錄在cookie中)
● 在form的屬性中,可加入loginUrl(登入頁面,預設Login.aspx)、name(Cookie名稱)、timeout(預期時間,以分鐘為單位)、path(Cookie,預設/)
● URL授權:在authorization中設定allow和deny,可針對users和roles
● 學會使用Login控制項
Passport:由Passport Service進行帳密驗證(沒人用)






2009年3月4日 星期三

2009三月底前優惠報名

其實之前就看到這個消息了,只是都是英文的看不懂,今天看到有人介紹,還好時間還來的急,立刻馬上申請,老天保佑我考上,謝謝。

轉載自
限時 MCP 考試優惠~比 Second-shot 更優惠的考試代碼~
試合再開~~~一樣使用 TWF3A803 即可申請,主辦單位說用此代碼申請沒有人數限制,所以請大家告訴大家~最重要的是,申請後記得要考啊~~~
於 2009/3/31 前,在 http://www.learnandcertify.com/Request.aspx 提交 TWF3A803 這組代碼,就可以獲得一份考試報名代碼(有效期限到 2009/5/31 截止),用這組代碼報名考試 (只限 MCTS, MCPD 和 MCITP 考試,不含 MCSE, MCSD, MCDBA 等的考試),就可以享有 10% 的折扣,同時也享有重考免費的權利哦。
.......詳情請到該作者Blog查看