[.NET][Database] 資料庫中的 NULL 值

在資料表結構 (table schema) 中,每個欄位除了基本的欄位名稱、型態、大小等資料外,有一個有趣的欄位很特別,就是是否允許 NULL,NULL 這個東西對程式設計師來說是又愛又恨,有時會被它搞得嫑嫑的,但是它有時卻又是一個有必要的存在。

...繼續閱讀 »

[.NET] 關於晚期繫結 (Late Binding)

晚期繫結是一種程式語言與作業系統的手法,用意在於避免因為編譯時期的型別檢查機制,導致程式員在編寫程式時,需要處理過多的型別資訊 (Type Information),晚期繫結可以有效的處理在平台之間型別資訊的隔離,讓編譯出來的程式可以在特定的平台之間執行,而不需要被型別資訊綁住,不過也不能過度濫用,除非原生平台就是要用晚期繫結 (例如 JavaScript)。

...繼續閱讀 »

[ASP.NET] ASP.NET 5 的 Dependency Injection

ASP.NET 5 正式將 Dependency Injection 的功能植入核心內,以提供開發人員與元件開發商更具彈性的 ASP.NET 5 基礎建設,MVC 6 內也利用了 Dependency Injection 的功能重新設計了 Controller 以及 View 的 Service Injection 能力,而未來 Dependency Injection 還有可能會更深入許多的 API,所以還不知道什麼是 Dependency Injection 的人,可要好好學它一下了。

...繼續閱讀 »

[.NET] Connect(); 的多項宣布:Visual Studio 2015, Visual Studio Community Edition, .NET Open Source, .NET Core Framework, ASP.NET 5

Connect() 研討會在昨晚於 Channel 9 線上開幕,發表了數個 .NET 的未來走向,以及新工具的發表,其中最令人期待的當然就是 Visual Studio 2015,這個代號 VS 14 的新版開發工具,它除了持續性的功能演化外,另一個我們一直在關注的新平台:ASP.NET vNext,正式定名為 ASP.NET 5,這可不是 MVC 5,而是整個平台的版本,而 .NET Framework 本身也分為兩支,一支是原本的 .NET Framework,持續演化並維持與舊版本的相容性,版本號碼為 4.6;另一支則是全新的 .NET Framework,稱為 .NET "Core",這個版本是輕量化的 .NET Framework,所有組件都重新設計,擺脫與 .NET Framework 大多數核心組件的相依性,以作為 Cloud 平台的核心執行引擎,同時它也搭配了 .NET Native 等新一代的執行環境一起釋出,它也是首個正式進軍 Linux 與 Mac 的官方 .NET 平台。

...繼續閱讀 »

[.NET][vNext] .NET vNext @ 2014

.NET Framework 才剛宣佈 4.5.2 沒多久,隨即在 TechEd 2014 North America 上宣布 .NET Framework 的 vNext 版本,它也是 ASP.NET vNext 的核心,這次的 .NET vNext 倒不會看到在 BCL (Base Class Library) 上有多少改變,倒是為了配合微軟的新策略,大量引進 Open Source 的概念,將原本專屬於微軟的相關技術都開放,並且針對 Device 和 Cloud 的應用情境做專屬的最佳化,讓 .NET 在 Device 和 Cloud 都能獲得最佳表現,同時也讓 .NET 可以跨出 Windows 平台 (之前只有 Mono,微軟希望有更多的平台加入...

...繼續閱讀 »

[ASP.NET][vNext] ASP.NET vNext @ 2014

今年的 TechEd 2014 North America 可真是豐富又紮實啊,除了 Microsoft Azure 多了一堆新東西外,連 .NET Framework 以及 ASP.NET 也宣布了下一個新的未來版本 vNext,.NET Framework 的部份著重在新一代的編譯平台 (Compiler Platform) Roslyn,新一代的機器語言編譯器 .NET Native 以及新一代的即地編譯系統 RyuJIT。而針對 ASP.NET 的部份則是很恐怖的大幅改版,不是針對功能面,而是針對核心面...

...繼續閱讀 »

[ASP.NET][Security] Covert Redirect Vulnerability

Covert Redirect 是由新加坡南洋科技大學的博士生王靜 (Jing Wang) 所發現的,它是一個在 OAuth 2.0 與 Open ID 驗證之間的一個弱點 (vulnerability),有使用過 OAuth 協定的開發人員應該會有印象,就是 Web 應用要使用 OAuth 2.0 做驗證與授權時,都要給它一個 redirect_uri 的參數,作為接取 code 以作為二次驗證的網址,Covert Redirect 弱點就是利用這個機會來進行攻擊...

...繼續閱讀 »

[Windows Azure] 於 Visual Studio 2013 上使用 Windows Azure Access Control Service 2.0 服務

Visual Studio 2013 甫於 10/18 正式發行正式版本,且所屬的 Windows Azure SDK for .NET 及 Visual Studio Tools for Windows Azure Platform 2.2 也在隔約四五天後正式發行了,Visual Studio 2013 在 Web 端的重大改變之一就是 ASP.NET 的開發由過去的各自為政整合為單一入口,稱為 “One ASP.NET”,並且導入了一個新的身份識別框架:ASP.NET Identity...

...繼續閱讀 »

[ASP.NET][Web API] 使用 ASP.NET Web API CORS 功能 (Beta Preview) 的前置作業

點部落在前兩天出現了一個使用 ASP.NET Web API CORS 功能的分享文,文中提到了由 myget.org 下載 ASP.NET Webstack Prerelease 的套件,不過我在試的時候卻無法下載,原因和語系有關係,只是我試著將語系檔解除安裝,仍然無法解決問題,因此我換了一個角度思考,是不是因為整個 ASP.NET MVC 套件的關係,導致相依性無法完全切開...

...繼續閱讀 »

[.NET][LINQ] Any() vs. Count() 何時可用? 何時不可用?

LINQ 語法中有兩個很令人玩味的方法,一個是 Any(),另一個則是 Count(),Any() 的功能是判斷集合中是否有物件,Count() 則是用來計算集合中的物件數量,功能其實很像,以一般的使用習慣來說,我們多半會使用 Count() 來判斷集合中是否有物件,而且在大多數的情況下是沒問題的。

...繼續閱讀 »

[Data Access] ORM 原理 (11): 效能議題

這絕對是 ORM 的使用者,開發人員與 DBAs 共同想要問的議題,到底我使用了 ORM 和使用傳統的 ADO.NET 下 SQL 指令的方式會差多少? 這個問題不但會發生在 Entity Framework 上,也會發生在 NHibernate 等 ORM Framework 內,連同我自己在這個系列文中開發的 ORM 機制也會受到影響...

...繼續閱讀 »

[Data Access] ORM 原理 (10) : 全程式碼對映–當 ORM 遇到 Lambda 與 Fluent Interface

ORM 原理前面8集中己經講述了基本的ORM核心內的運作方式,大多數的ORM其實都是這麼做,當然還會做一些更進一步的最佳化工作,例如產生SQL的方式等。不過既然都是寫程式的,當然會希望這些對應欄位的設定工作可以完全的程式化 (Coded Map),而不用再假手那麼多的設定檔。

...繼續閱讀 »

[.NET][SignalR] 由 Server 呼叫 JavaScript–使用 SignalR 實作 Push 訊息模式

在前一個範例中,我們己經實作出來一個簡單的應用程式,而這次我們要來展示 SignalR 的另一個功能:由伺服端呼叫用戶端的 JavaScript 指令碼的功能,而這個功能的要求必須是要實作成 Hub 的模式,因此我們可以順便看到如何實作 Hub 類型的 SignalR 應用程式。

...繼續閱讀 »

[ASP.NET][MVC] ASP.NET MVC (12) : 設計自己的 View 輸出-以 CSV 為例

我們在 ASP.NET MVC (7) 中曾介紹了 ASP.NET MVC 的 View 內建了 9 種不同的 View,基本上這些 View 均足以應付大部份的資料呈現需求,但是它也不是不能擴充的,像是一些特殊的 View (例如圖表或特殊檔案或特別的資料格式),就需要由開發人員自己設計,不過 MVC 的 View 設計上也不難,只要將自己的 View 加入 HTTP 處理流程中即可。

...繼續閱讀 »

[ASP.NET][MVC] ASP.NET MVC (10) : 部份檢視與 AJAX 的整合

我們在前一篇文章中看到部份檢視的功能,它除了可以作為網頁上的排版外,其實它還有一個更重要的用途:與 AJAX 結合。ASP.NET MVC 本身的 AJAX 目前可支援最早的,以 MicrosoftAjax.js 與 MicrosoftMvcAjax.js 組成的 AJAX,以及由 MVC 3.0 開始支援的 jquery.min.js 與 jquery.unobtrusive-ajax.js 兩種,要選擇哪一種是由開發人員自己決定,但個人推薦使用 jQuery 的 ajax,一來方便,二來可相容於許多的 jQuery Plug-ins,甚至想用 jQuery Mobile 來開發行動網頁,也可以享受到 MVC AJAX 的能力。

...繼續閱讀 »

[ASP.NET][MVC] ASP.NET MVC (9) : 部份檢視 (Partial View)

寫過 ASP.NET Web Form 的人應該都知道使用者控制項 (user control) 這個東西吧,它允許開發人員對 Web 的畫面設計可重覆使用的網頁區域,在多數的情況下,我們都是用靜態的使用者控制項,也就是在 Web Forms 上放一個自己的 user control (*.ascx),它會幫我們將對應的 HTML 繪製出來...

...繼續閱讀 »

[ASP.NET][MVC] ASP.NET MVC (6) : 資料驗證 (2) Model Validation

在前一篇文章中,我們撰寫了一個 server-side 的 validation 方法,雖然解決了驗證的問題,但是和時下流行的 client-side validation 不符,而且 server-side 不應該只是檢查資料型別這件事而已,它應該要解決更複雜的問題,而 client-side validation 專司處理簡單的驗證問題...

...繼續閱讀 »

[ASP.NET][MVC] ASP.NET MVC (3) : 加入資料檢視功能-Models

我們在前一篇文章中,實作了最簡單的 Controllers 與 Views,也看到了這兩個物件之間的關聯性,但是 MVC 中還少一個東西,就是 Models,但還是老樣子,雖然很多書都用 LINQ to SQL 或 Entity Framework 來當 Models,但是我仍然堅持要由最簡單最原始的方式來實作,所以我們一樣由類別來實作 Models。

...繼續閱讀 »

[ASP.NET][MVC] ASP.NET MVC (1) : 如何學 ASP.NET MVC ?

ASP.NET MVC 最近似乎慢慢的有變紅的趨勢,也開始有不少人在詢問如何學習 ASP.NET MVC,之前我也寫過一篇簡單的介紹文,說 ASP.NET MVC 比較適合寫過 ASP, JSP, PHP 等的開發人員,因為它的處理方式和傳統的 ASP.NET Web Form 截然不同,首先就是 MVC 的概念,因為這會涉及資料在 MVC Framework 內的流動方式,另外一個就是習慣導向的設計,微軟認為習慣導向可以加快開發人員的開發速度,所以在一個 ASP.NET MVC 專案的配置,和平常寫 ASP.NET Web Form 有一定的差異。

...繼續閱讀 »

[Visual Studio "11" Series][ASP.NET] ASP.NET 4.5 系列 (1):Web Form 的新功能

隨著 Visual Studio "11" Developer Preview 的問世,連帶它的核心部份 .NET Framework 4.5 也向大家見面了,.NET Framework 4.5 幾個重要的改變像是 async/await pattern 以及更強的 parallel task 演算法等,未來都會慢慢的有更多細節出來,不過本系列文主要是針對 ASP.NET 的下一代 (ASP.NET v4.5) 的功能,有些是因應市場技術所做的變更,也有針對架構面以及開發人員支援的面向做變更。

...繼續閱讀 »

[Software Development] 關於序列化 (Serialization) 這件事

要是寫程式,一定多多少少會需要讀寫資料,畢竟 Program = Data Structure + Algorithm,只是大多數的情況下,資料的讀寫多半是對資料庫,而資料庫內的檔案實際讀寫由 DBMS 自己控制,開發人員基本上是碰不到的,但是資料不是只會存在資料庫內,像是檔案系統 (File System),網路資料或是其他可能的資料儲存地,而像這些不同的資料保存,都需要由開發人員自己處理 I/O 的工作...

...繼續閱讀 »

[Security] HTTP 動詞竄改弱點 (HTTP Verb Tampering)

這是今天有位朋友在 MSN 上問的一個問題,因為我也是第一次看到這個名詞,所以我也上網查了一下,在 Arshan Dabirsiaghi 於 2008 年所發表的 "Bypassing Web Authentication and Authorization with HTTP Verb Tampering" 論文中提到這樣的弱點,但早在 2004 年 Kernelpanik Lab 就已經有研究報告提出這個弱點,主要的原因是在 Web Server 或 Web Application 或 HTTP Endpoint 中,沒有針對 HTTP 動詞 (verb) 去做存取控制所致。

...繼續閱讀 »

[.NET] PropertyGrid 控制項的進階使用:自訂資料檢視與編輯器

最近這一個月事情還真不少,不斷的在嘴砲和務實的角色之間切換,也寫了不少的程式碼,而且為了因應今年 9/13-15 的微軟大拜拜 (Tech.days) 的課程,我還特別寫了支範例程式準備要在課堂上 demo 用,這支範例程式是 Windows Azure Platform 上的服務管理應用程式,核心均來自 Service Management APIs,很快的,就在 Tech.days 2011 Taiwan 研討會中將正式釋出...

...繼續閱讀 »

[Security] 判別式存取控制表 (Discretionary Access Control List) 實作:階段 2,誰能存取,我決定。

我們在階段 1 中已經完成了最基本的 DACL 資料結構,能針對簡單的 CRUD 權限做控制,但一般來說權限設定沒那麼簡單 (尤其是複雜度高又講求安全的系統),很多程式或系統有時無法只單純用 CRUD 就可以解決...

...繼續閱讀 »

[Security] 判別式存取控制表 (Discretionary Access Control List) 實作:旗標的概念

在前一篇文章中,我簡單的說明了 DACL 的資料結構組成,以及簡單的存取方法,如果資料長度愈長的話,可以設定的權限就愈多,也可以有更多的組合,但資料量仍然可以控制在很小的長度,這是因為在 DACL 中,每個權限都是一個旗標值 (flag),而一個 bit 就代表一個旗標,所以 bit 多的話旗標就愈多,一個 byte 可以容納 8 個 bits,也就是可以有 8 種旗標,之所以會選擇位元來作為旗標,是因為 bit 的值不是 0 就是 1,單純有力。

...繼續閱讀 »

[Security] 判別式存取控制表 (Discretionary Access Control List) 實作:原型概念

判別式存取控制表 Discretionary Access Control List (DACL),這個自由度頗高的存取控制方法,在 Windows 以及其他作業系統中已行之有年,它最大的特色就是使用者和群組可以擁有自己的存取控制設定,而系統物件也可以擁有自己的存取控制項目,也就是說系統物件不會只有 CRUD 四種權限,還可以因為物件的特性而定義額外的權限,例如存取詮釋資料 (metadata), 列印 (printing) 或是下載檔案 (download) 等權限,discretionary 這個字有 "任意的","無條件的" 的意思,而 DACL 也是讓消費者和生產者可以擁有自己的權限設定,只需要在存取時進行檢查即可。

...繼續閱讀 »

[.NET] 有關強式名稱 (Strong Name) 的兩三事

Strong Name 是 .NET Framework 中很特殊的一個特性,大多數的 .NET 開發人員不會使用到這樣東西,不過如果是從事 Framework 或是可轉散布型的軟體的開發人員,就需要知道這東西,因為它是一種組件識別 (asembly Identify) 機制,透過 Storng Name,它可以讓使用該組件的開發人員能確定這個組件是來自於建置的廠商或開發人員,而不是從中被竄改過。

...繼續閱讀 »