網頁

中文版Visual Studio安裝各種Preview或RC的NuGet套件

越來越快的軟體發行速度

不知道各位讀者有沒有發現,現在各種技術更新的速度越來越快。例如,這個Release Candidates for ASP.NET MVC 5.1, Web API 2.1 and Web Page 3.1消息,明明ASP.NET MVC 5、ASP.NET Web API 2才剛推出沒多久,就馬上有新版本跟著推出。就取得新功能或功能改善而言,這是件好事。當開發者想要嘗試這些Preview或RC功能時,可能會馬上碰壁,而停下了學習的腳步實在可惜。

範例:MVC 5無法升級MVC 5.1 RC

新增一個ASP.NET MVC 5專案,進行MVC 5.1 RC的安裝:

Install-Package Microsoft.AspNet.Mvc -pre

Install-Package : 更新 'Microsoft.AspNet.Mvc 5.0.0' 至 'Microsoft.AspNet.Mvc 5.1.0-rc1' 失敗。找不到與 'Microsoft.AspNet.Mvc 5.1.0-rc1' 相容的 'Microsoft.AspNet.Mvc.zh-Hant' 版本。
位於 線路:1 字元:1
+ Install-Package Microsoft.AspNet.Mvc -pre
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

MVC 5.1 RC安裝錯誤

這裡馬上就碰到無法找到對應語系的套件,進而無法安裝的訊息。

範例:Web API 2無法升級Web API 2.1 RC

新增一個ASP.NET Web API 2專案,進行Web API 2.1 RC的安裝:

Install-Package Microsoft.AspNet.WebApi -Pre

Install-Package : 更新 'Microsoft.AspNet.WebApi.WebHost 5.0.0' 至 'Microsoft.AspNet.WebApi.WebHost 5.1.0-rc1' 失敗。找不到與 'Microsoft.AspNet.WebApi.WebHost 5.1.0-rc1' 相容的 'Microsoft.AspNet.WebApi.WebHost.zh-Hant' 版本。
位於 線路:1 字元:1
+ Install-Package Microsoft.AspNet.WebApi -Pre
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

Web API 2.1 RC安裝錯誤

一樣是無法找到對應語系的套件的問題。

這問題很久了,我一定要解決它(握拳)

MVA - 微軟官方免費中文線上教學網站

MVA是什麼,能吃嗎?

MVA總分類

MVA是微軟虛擬學院(Microsoft Virtual Academy, MVA)縮寫,它是一個微軟官方所主持的免費線上教學網站。光看上面的分類就嚇死人了,應有盡有。

謝謝台灣微軟

這句話,是替各位觀眾說的。因為台灣微軟從2013年年中開始,陸續上線很不錯的「中文影音課程」,重點有二:一是完全免費。二是持續更新課程內容。當各位在享受與學習這些免費影音課程內容時,真的要心存感激。

有分數,有憑證

MVA學習的過程中,你可以使用你的Microsoft Accout(MSN、Outlook...)來登入,登入之後的學習過程會累積分數(點數),而且每一門課程完成之後都可以下載一份完課憑證。

中文課程總整理

SpecFlow Feature Language使用中文關鍵字

twMVC#12 - 如何在實務上使用TDD來開發

在 91 哥twMVC#12 - 如何在實務上使用 TDD 來開發,展現了TDD在實務上的作法。其中從無到有部分,使用SpecFlow這套Visual Studio擴充套件來支援BDD實作,SpecFlow支援Visual Studio 2010/2012/2013。

場景(Scenario)可中文描述

在 91 哥的場次中,他就可以展示在SpecFlow的Feature File裡的描述部分是可以完全使用中文。這部分請到 twMVC#12 下載 91 哥的投影片,裡面有完整截圖。

可以用中文描述對於清楚的溝通有重大的意思 XD。

場景(Scenario)關鍵字也可使用中文

這是在看使用Asp.Net MVC打造Web Api (6) - 對DA進行整合測試時,發現場景(Scenario)關鍵字也可以使用中文,也就是說,整個Feature File是可以全中文撰寫的。

.ashx泛型處理常式與ASP.NET Web API有什麼差別?

不要再比較啦!

AH-64E Apache
來源:http://www.flightglobal.com/

自己推廣ASP.NET Web API時(或ASP.NET MVC)時,經常會被問到比較性的問題,例如,WebForms(ASP.NET) vs ASP.NET MVC,或是Web Service vs WCF vs Web API。

但只要有機會,我都會說比較是不對的,因為不同時代背景,不同的企業需求,所需的技術就不同。

觀察OData透過Entity Framework所產生的T-SQL

OData with Entity Framework

WebServices開發實戰 - 使用ASP.NET Web API 2

在M-V-C架構之下,Model可以採用傳統ADO.NET或ORM,而ORM我們當然是採用Entity Framework,在週四的MSDN講座有學員問到,採用OData之後的T-SQL是如何?例如分頁,是在資料庫分好,還是把資料取回再分。以下使用SQL Profiler側錄並整理。

OData - $orderby - 排序

ASC

   SELECT 
      [Extent1].[ProductID] AS [ProductID], 
      [Extent1].[ProductName] AS [ProductName], 
      [Extent1].[SupplierID] AS [SupplierID], 
      [Extent1].[CategoryID] AS [CategoryID], 
      [Extent1].[QuantityPerUnit] AS [QuantityPerUnit], 
      [Extent1].[UnitPrice] AS [UnitPrice], 
      [Extent1].[UnitsInStock] AS [UnitsInStock], 
      [Extent1].[UnitsOnOrder] AS [UnitsOnOrder], 
      [Extent1].[ReorderLevel] AS [ReorderLevel], 
      [Extent1].[Discontinued] AS [Discontinued]
      FROM [dbo].[Products] AS [Extent1]
      ORDER BY [Extent1].[ProductName] ASC
  

DESC

   SELECT 
      [Extent1].[ProductID] AS [ProductID], 
      [Extent1].[ProductName] AS [ProductName], 
      [Extent1].[SupplierID] AS [SupplierID], 
      [Extent1].[CategoryID] AS [CategoryID], 
      [Extent1].[QuantityPerUnit] AS [QuantityPerUnit], 
      [Extent1].[UnitPrice] AS [UnitPrice], 
      [Extent1].[UnitsInStock] AS [UnitsInStock], 
      [Extent1].[UnitsOnOrder] AS [UnitsOnOrder], 
      [Extent1].[ReorderLevel] AS [ReorderLevel], 
      [Extent1].[Discontinued] AS [Discontinued]
      FROM [dbo].[Products] AS [Extent1]
      ORDER BY [Extent1].[ProductName] DESC
  

Visual Studio開啟多檔案時,如何快速切換編輯中的檔案?

開啟多檔案

上週參加 twMVC#12 時,看著 91哥 有如神人的Live Coding,看著入迷時,看到 91哥 不斷快速的在Visual Studio裡切換已開啟的檔案。因為 91哥 是使用MAC,原以為是 MAC 提供的功能,但越想越不對,心想,應該是那套擴充套件提供的功能,只是我不知道罷了。最後實在認不住,還沒下課就問我一下坐在我旁邊的套件魔人 Demo

如何快速切換編輯中的檔案

從問不倒的 Demo 得到滿意的答案,請看片子圖解。

實作ASP.NET MVC CAPTCHA驗證碼機制

CAPTCHA

依wiki的說明:「全自動區分電腦和人類的圖靈測試(英語:Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱CAPTCHA),俗稱驗證碼。

產生驗證碼

首先我們必須先撰寫一支產生驗證碼圖片的程式,程式碼主要是是透過Bitmap物件來幫我們產生圖檔(想成一張空白畫布),然後在畫布上畫上我們要的內容(可以是任意內容)。

如何升級MVC 4和Web API至MVC 5和Web API 2

MVC 5與Web API 2

ASP.NET MVC 5與Web API 2帶來需多新功能,這份教學將教各位如何升級你的MVC 4與Web API應用程式到最新版本。

升級步驟

  1. 備份你的專案。依此教學會異動的專案檔案、套件組態與web.config。
  2. 更新Web API至Web API 2。請將 Global.axax 裡的:
    WebApiConfig.Register(GlobalConfiguration.Configuration);
         

    更新為:
    GlobalConfiguration.Configure(WebApiConfig.Register);
         

使用Autofac和Unity學習MVC 4,5和Web API 1,2的IoC,DI技巧

IoC與DI

IoC
Inversion of control,中文稱控制反轉。由Martin Fowler提出。這裡引用MVP 91哥的說明:系統架構設計應該以抽象的邏輯概念為主,才能更貼近現實世界,才能更符合domain model,當Business logic不變時,需求變更、技術變更、DB變更,都應該要把風險和成本壓到最低。
DI
Dependency injection,中文稱相依注入。在IoC的思考模式與實作下,最終的結果就是相依於介面(Interface),但類別中最後只存有介面的話,程式是不會動的,這時我們就會利用DI技巧,在應用程式啟動時去注入介面所對應的實體(也就是一般我們在程式碼裡寫的new ClassName())。

MVC與Web API的Controller的IoC與DI處理

不管是在ASP.NET MVC或ASP.NET Web API,在Controller的概念上或本質上可以說是一模一樣。這裡主要差異點會是在DI套件的實作差異上。

Controller使用Respository Pattern處理資料實體相依

一般我們會透過基架(MVC 5將scaffold翻譯為基架)來產生MVC的Controller與View Page,或是Web API的API Controller。例如,使用Northwind資料庫的Product資料表來產生API Controller會是這樣:

  public class ProductsController : ApiController
  {
      private NorthwindEntities db = new NorthwindEntities();

      // GET api/Products
      public IEnumerable<Product> GetProducts()
      {
          return db.Products.AsEnumerable();
      }

      // 省略
  }
  

預設範本所產生的程式碼會產生與NorthwindEntities資料實體(new NorthwindEntities())產生依賴關係。每個API Controller都還要處理db.Products,這造成API Controller的職責不夠單一,這在裡我們就先採用Repository Pattern 1來分離資料庫處理程式碼與API Controller的相依關係。

1 Repository Pattern實作請參考《ASP.NET MVC 4網站開發美學》第七章 Page 7-40頁。

  public class ProductsController : ApiController
  {
      //private NorthwindEntities db = new NorthwindEntities();

      private IProductRepository _product;

      public ProductsController() {
          _product = new ProductRepository();
      }

      // 重要,但要等一下才會知道
      public ProductsController(IProductRepository r)
      {
          _product = r;
      }

      // GET api/Products
      public IEnumerable<Product> GetProducts()
      {
          return _product.GetAll();
      }

      // 省略
  } 
  

透過Repository Patter我們分離了資料庫相關程式碼,而且我們偷偷留下一個含介面參數的建構函式,等一下在討論這部分。就目前使用了Repository Pattern的Controller,就算刪除此含介面參數的建構函式,程式依然會正常運作。

但引入使用Repository Pattern後的API Controller產生了新的問題,這些API Controller又會與特定實體類別產生相依關係,我們必須在無參數建構函式去初始化一個實體類別,以呼叫分離後的資料庫處理程式(例如:_product = new ProductRepository();)。

DOM修改文字節點 - innerText或textContent傻傻分不清楚

textContent=innerText?

DOM節點樹

圖片來源:www.w3schools.com

在一段JS程式碼之中,看到一個未看過的textContent屬性,查詢了一下依照MDN對textContent的說明:Gets or sets the text content of a node and its descendents.基本上它的使用方式和innerText屬性一樣。

innerText與textContent的差異?

如果你對DOM不熟悉,可以先參考這篇DOM簡介

就功能上而言,兩者是一模一樣,主要都是針對文字節點(Text Node)來進行get與set的動作。先看一下以下程式碼:

   <!DOCTYPE html>
   <html>
   <head>
   <meta charset=utf-8 />
   <title>Text Node Test</title>
   </head>
   <body>
     <p id="help1"></p>
     <p id="help2"></p>
     <p id="help3"></p>
   </body>
   </html>
  

以上只是一個簡單包含三個空白<p>元素的HTML。然後,我們撰寫JavaScript來修改文字節點的內容:

表格的欄位為什麼不對齊

表格的欄位為什麼不對齊

表格的欄位不對齊

Table Display Bug

這是一個舊頁面內容,裡面的本來都很正常。但近來有使用者慢慢更新作業系統或瀏覽器後,發現表格原本被隱藏的欄位在點擊後不會正常排版。各位可以點擊標題測試,如果你是舊IE 6~IE 9,以上測試是正常的。但從IE 10開始,上述表格欄位就會不正常。(包含目前主流瀏覽器都不正常)

MVC練習 - 依使用者選擇時區顯示該時區時間

MVC練習

假日看到MVP Edward.K一篇[ASP.NET]利用TimeZoneInfo將現在時間切換到各個國時間一文,覺得介紹的很不錯。就改寫為MVC的版本,自我練習一下。

ZoneController

新增一個ZoneController,此Controller要取得時區清單並傳遞至View Page。MVC 5的加入控制器和之前有些不同:

MVC 5 - 添加基架

Scaffold在MVC 5正式反翻為「基架」之不是之前Preview與RC的「支架」。選擇使用「MVC 5控制器-空白」。

在ZoneController新增一個名稱Time的Action方法:

   public ActionResult Time()
   {
       IReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
       ViewBag.TimeZoneInfo = new SelectList(timeZones, "Id", "DisplayName");
       return View();
   }
  

IReadOnlyCollection本身繼承IEnumerable與IEnumerable(Of T),可以直接將取得的timeZones傳入SelectList類別使用。在SelectList類別選擇使用第三種建構函式:「SelectList(IEnumerable, String, String)」:

使用Entity Framework Code first建立多對多關係

Code First

Code First中文可以稱「程式碼先行」或「程式碼優先」,在Entity Framework 4.1時正式支援,它與一般開發習慣不同,先透過程式碼來定義資料結構(一般是POCO,Plain Old CLR Object),定義完成之後即可開始進行開發工作。在開發進行過程,開發人員不用管資料庫之類的問題,Entity Framework會進行處理,開發人員只要專注處理POCO與邏輯程式碼身上。

多對多關係?

多對多關係(Many-To-Many)是指資料兩者之間的關係是多對多,例如,醫生與病人,一個醫生會醫治多個病人,一個病人依病情不同也會有多個醫生來治療(會診即是一種),這種關係在資料庫領域稱多對多關係(Many-to-Many)。

有一點點資料庫經驗的人員都知道,實務上在資料庫中是沒有多對多資料表,多對多關係到了資料庫裡會化成三張資料表,分別建立成one-to-many與one-to-many的關係,以上例說明:「醫生(one)-to-醫生病人(many)」與「病人(one)-to-醫生病人(many)」,所以會有「醫生資料表」「醫生病人資料表」「病人資料表」三張資料表,中間透過「醫生病人資料表」來串接多對多關係。

ASP.NET MVC實作Code First Many-to-Many Relationship

以下我們透過ASP.NET MVC [4|5]專案來實作一次Code First的多對多關係。我們模擬的關係是「開發人員-to-專案」,一位開發人員可以同時接手多個專案,一個專案同時有多個開發人員進行開發。

為什麼IE 11的127.0.0.1無連線無反應

IE呀IE

IE11與FireFox對照圖

在TechDays Taiwan 2013的ASP.NET Web API 2演講中,有一個重覆演練數十次的Demo居然出錯而跑出不來,礙於時間的關係,並無法在第一次時找出問題點。在演講時的問題如上圖的IE 11,下課後其實還沒走出教室我就知道問題是出在IE 11身上,因為之前的演練我並無使用過IE 11。只能怪自己的環境測試不足

程式自古誰不錯,留取丹心照汗青。

Worker Role+OWIN+Web API

這是一支Worker Role+OWIN+ASP.NET Web API的專案,專案架構圖如下:

Worker Role+OWIN+ASP.NET Web API架構圖

原本猜想是不是IE 11的HTTP Header裡有太新的內容,所以OWIN Host看不懂而不知道怎麼處理IE 11的請求,結果是我想太多。

免費網站與REST服務壓力測試工具

ASP.NET Web API壓力測試

在《ASP.NET MVC 4網站開發美學》上市之後,曾經有讀者問筆者:「ASP.NET Web API是否真的可以使用在真實的專案上?」答案是肯定可以。ASP.NET Web API並不是一個全新技術,而是一項整合與改良的技術,ASP.NET Web API在HTTP Service就是要提供一個輕量且高效率運作框架。

但要如何證明呢?李錩鈺博士說:「有一分證據,說一分話。」現在為各位提供可視的數據給讀者。

SuperBenchmarker

這是一支Command-line應用程式,讓我們非常簡易即可對網站或HTTP API進行壓力測試。

PM> Install-Package SuperBenchmarker

安裝套件之後,開啟專案目錄下的「\packages\SuperBenchmarker.{version} \lib」即可找到sb.exe主程式。

SuperBenchmarker參數說明

  sb.exe -u url [-c concurrency] [-n numberOfRequests] [-m method] [-t template] [-p plugin] [-f file] [-d] [-v] [-k] [-x] [-q] [-h] [-?]
 

常用的有:

  1. -u url:你要測試的網站或REST服務URI。
  2. -n N:N代表要測試的次數。預設 100。
  3. -c N:N代表同時連線數。預設 1。

-c參數是壓力測試關鍵之一,以筆者的測試經驗,一台主機最大設定值約250以下,正常是設定為200最順。-n是進行多少回測試,數字越大測試越久數據越精確。

sb.exe 範例

以下是一些測試範例:

  1. sb.exe -u http://google.com
    以預設值(-c 1 -n 100)對http://google.com進行請求測試。
  2. sb.exe -u http://google.com -n 1000 -c 10
    以同時10連線進行1000次請求測試。

有了以上SuperBenchmarker工具,讀者就可以非常方便對ASP.NET Web API或網站進行簡易的壓力測試。注意,請不要去壓測別人的網站或服務。

最後,其實我比較擔心是硬體受不受的了,而不是軟體說。

參考資料

  1. http://byterot.blogspot.tw/2013/05/superbenchmarker-ab.exe-sb.exe-apache-benchmark-load-performance-benchmark-asp-net-web-api.html
  2. https://github.com/aliostad/SuperBenchmarker/tree/master/download
  3. http://chocolatey.org/packages/SuperBenchmarker

Entity Framework的Entities類別不出現在IntelliSense

Entity Framework的Entities類別出現與不出現在IntelliSense

Action方法中正常的IntelliSense
Action方法中不正常的IntelliSense

圖一是正常我們加入ADO.NET 實體資料模型(EDMX檔案,Entity Framework)之後,在MVC的Action方法中撰寫相關資料庫程式碼時應該出現的IntelliSense提示。

圖二,這是學生在操作時發生的問題,後來我回家模擬來出,在加入Entity Framework Data Model之後,於MVC的Action方法裡的IntelliSense不會出現NorthwindEntities型別的提示。

發生原因及解決辦法

設定Windows 8.1 RTM的指紋登入

Windows 8.1無法安裝Lonovo System Update

Lenovo System Update

在Microsoft的德政之下,終於可以透過MSDN下載到Windows 8.1正式版,雖然不是第一時間,但該來的總是要來,今天就把主機重灌上到Windows 8.1正式版。安裝速度令人非常滿意,而且我很高興買的是Lenovo的筆電,因為它有一支非常好用的System Update程式,只要執行System Update之後,軟體、驅動程式…都會自動幫你下載安裝,可說是“一鍵式”之大成。對於我們這種常常東裝裝、西搞搞的人實在太方便。

不過,如果你下載System Update之後在Windows 8.1無法安裝,那必須透過指令模式來安裝(感謝Demo Fan提供)。

                systemupdate502-06-26-2013.exe -s -a /s /v"/qn"
            

安裝不會有任何訊息,你可以過一會兒查詢「應用程式列表」,安裝好就下出現下例圖示:

System Update in Windows 8.1

ThinkVantage Fingerprint Software無法安裝

透過System Update已經差不多要安裝完成之後,最後一個如第一張圖的ThinkVantage Fingerprint Software會無法安裝,如下圖:

ThinkVantage Fingerprint Software can not install in Windows 8.1
ThinkVantage Fingerprint Software install error message in windows 8.1

提升ASP.NET MVC專案安全性與效能小技巧

ASP.NET MVC專案最佳化

在討論ASP.NET MVC時,大多是針對MVC模式與MVC應用程式在討論,較少看到有人討論ASP.NET MVC專案本身,其實ASP.NET MVC專案有幾個地方可以微調整,有些可以增加安全性,有些可以增加效能。

取消Header輸出MVC專案版本

預設的ASP.NET MVC專案在一次回應請求的標頭裡包含著些ASP.NET MVC專案的版本,以 http://kkbruce.tw 為例,預設情況下的回應標頭(Response Header)為:

HTTP/1.1 200 OK
Cache-Control: public, max-age=3600
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Sat, 27 Jul 2013 17:49:36 GMT
Last-Modified: Sat, 27 Jul 2013 16:49:36 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 4.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RTpcUHJvamVjdHNca2ticnVjZS50d1xra2JydWNlLnR3XEJvb3RzdHJhcFxHZXR0aW5nU3RhcnRlZA==?=
X-Powered-By: ASP.NET
Date: Sat, 27 Jul 2013 16:49:39 GMT
Content-Length: 7699
  

由回應標頭(Response Header)中可以看出目前此網站的ASP.NET MVC 4的專案,如果某個版本ASP.NET MVC專案某一天爆發漏洞,那麼要找下手的目標是很容易的。

所有一個簡單的需求,不管我們的ASP.NET MVC專案是什麼版本,MVC 2/3/4/5…都不要在回應標頭(Response Header)顯示ASP.NET MVC專案版本,其實也很容易,只需要在 Global.asax 的 Application_Start() 透過以下設置:

Web API Client Library+Portable Library打造跨平台的Web API服務類別

Web API Client Library與Portable Library

ASP.NET Web API Client Library(HttpClient)讓我們簡單地在.NET用戶端應用程式中與RESTful HTTP Service互動。之前版本的Web API Client Library對於跨平台的支援度不是那麼好,目前Web API Client Library的下一個預覽版已經在這方面進行改良。此預覽版新增了可攜式類別庫(Portable Library)的支援,目前支援.NET Framework 4.5、Windows Store、Windows Phone 8三種應用程式類別。這些支援建構在最近發佈的可攜式HTTPClient和可攜式類別庫支援Json.NET。這樣我們就能建立單一的可攜式類別庫去讓Windows Store App、Windows Phone去呼叫Web API。

建立不同平台的專案

接下來,我們要建立三個專案,一個可攜式類別庫,透過可攜式類別庫使用Web API Client Library來呼叫RESTful HTTP Service,一個.NET Framework 4.5的主控台應用程式,一個Windows Store App,主控台應用程式與Windows Store App會透過可攜式類別庫來進行服務呼叫。

  1. 新增專案 → 可攜式類別庫專案 → 名稱:ContosoClient
  2. 進行可攜式類別庫條件設定。請設定為.NET Framework 4.5、Windows Phone 8、.NET for Windows Store App
    這是因為ASP.NET Web API Client Library不支援 xbox 360、Silverlight和Windows Phone 7.5。以下範例不進行Windows Phone 8示範,不過我們的建立的可攜式類別庫是可以支援Windows Phone 8。
  3. 加入 → 新增專案 → 主控台應用程式 → 名稱:ContosoConsole
  4. 加入 → 新增專案 → Windows市集 → 空白的應用程式(XAML) → 名稱:ContosoStore
    這裡可能會出現要求取得市集開發者授權請求,請依畫面登入取得。
  5. 透過 NuGet 為三個專案加入Microsoft.AspNet.WebApi.Client的參考。NuGet請選擇包括發行前版本
  6. 為ContosoConsole與ContosoStore專案加入對ContosoClient的參考。

JavaScript - createElement vs createDocumentFragment

答客問

網友 Adam Lee 在 JavaScript - 程式碼壓縮與最佳化 留言指教,說我的測試程式有問題。因為文章撰寫時間有點久了,也忘了當時有沒有進行測試,那我們就來測試看看吧。

createElement與createDocumentFragment的測試程式碼。

網友 Adam Lee 已準備好一個測試程式 http://jsfiddle.net/z3caE/ 大家可以用不同瀏覽器玩玩看分數如何?

以下是我在本機端的測試程式:

MVC 4發行至IIS 7.5之後Bundle功能無法運作

MVC 4 - Bundling and Minification

Bundling and Minification 在書中 5.6 小節我翻譯為「合併與最小化」,這是一個對於網站而言非常非常非常實用的功能,它能快速合併你所有設置的所有檔案成為一個檔案(多合一)併進行最小化的工作,重點是完全自動化,不需要再去其他類似JavaScript最小化、CSS最小化的網站,或下載工具利用工具在上線前再自己手動進行類似工作。各位可以參考前端優化的幾篇文章。

IIS 7.5無法運作Bundle功能?

當 Visual Studio 2012 發行 ASP.NET MVC 4 專案至 Windows Server 2008 R2 x64 平台(IIS 7.5)後發現 Bundle 功能無法運作。利用程式碼 BundleTable.EnableOptimizations = True 進行設置依然無效。

在網路上搜尋了一陣子,找不到什麼有關的資料,絕大部分都是討論 Bundle 的設置或 BundleTable.EnableOptimizations 程式不然就是 web.cofnig 裡 debug="true" 這個參數。

然後又花費無數青春,在一陣發瘋似亂搞亂測之後,找到了問題的根源。

發行ASP.NET MVC 4之前遠端Windows Server 2008 R2的環境準備

可被佈署的伺服器環境

ASP.NET MVC 的書籍在教發行時,通常都是以本機為實作環境,本機通常會安裝 Visual Studio 開發工具,在安裝 Visual Studio 開發工具時會一併安裝 Deploy 的工具與環境,所以本機實作比較沒問題。但實作發行至遠端伺服器時,怎麼樣就是不給發行,這是因為除了帳號密碼外,伺服器還需要可被佈署的環境。有了可被佈署的環境,我們就能如書中所教的一樣,將MVC專案順利發行至遠端伺服器。

Windows Server 2008 R2佈署環境準備

以下 Windows Server 2008 R2 為實作平台。

要確認是否具備佈署環境依以下清單檢查:

Visual Studio 2013 Preview - ASP.NET, MVC 5, Web API 2新功能搶先看

來自TechEd North America 2013的第一手消息

以下資訊均來自 Channel9 目前於北美 TechEd 活動影片,主要記錄 DEV-B314 這一場 Microsoft ASP.NET, Web, and Cloud Tools Preview 的筆記。

Visual Studio 2013 Preview改良部分

以下將 Visual Studio 2013 Preview 相關內容整理如下:

單一對話視窗

Visual Studio 2013 Preview簡化一開始的新增專案的對話視窗,只區兩大類,進入後也只區分為Empty、Web Forms、MVC、Web API、SPA、Facebook、Mobile。

Web Application dialog

測試伺服器

測試伺服器不在局限於IIS Express,也可以設置為外部伺服器。

ASP.NET 測試伺服器設置

Browser Link

當我們修改頁面文字、Layout、CSS等,可快速重整所有已連接至Visual Studio測試頁面的瀏覽器。

快速重整已連接至Visual Studio測試頁面的瀏覽器

認證組態

在新增專案時即可設置認證組態,目前可結合其他外部Microsoft Live Id、Facebook、Google+、twitter等。

認證組態1

認證組態2

集合與泛型集合中Contains方法處理效能測試

Contains方法

Contains()方法在很多地方都可以使用,主要是用來比較指定物件內是否含有指定的項目。例如:String 型別的 Contains()方法就經常拿來搜尋或過濾字串使用。

    Dim YesNo As Boolean = "Bruce很帥XD".Contains("帥")
    Console.WriteLine(If(YesNo, "帥", "不帥"))
    Console.ReadLine()
   

但今天想瞭解在含有大量資料時,集合與泛型集合內的Contains方法的處理速度。

測試原因

想瞭解與測試的原因是因為亂馬客寫了一篇 .NET]產生不重覆的數值(List vs HashSet) 的文章,他測試結果是正確的,不過我認為測試範圍可以加大到集合與泛型集合,所以有了以下測試程式碼與測試結果。程式碼參考亂馬客文章進行修改,主要加入了 Counter 變數,記錄下 while 迴圈的執行次數,這樣比較能瞭解誤差值。

集合與泛型集合 - Contains方法

程式碼主要是要產生不重覆的數值,所以重點其實只在 while 那一行程式碼,這裡我加大數值的量,由 1 ~ 100000 裡取出不重覆的 90000 個數值。因為我們只單存取一個數值,所以 Key/Value 的集合與泛型集合就不在測試程式碼之內。

ASP.NET MVC快速產生SiteMap的擴充程式 - MvcSiteMapProvider

WebForm有,MVC有沒有

在 WebForm 拜控制項所賜,讓我們可以快速且容易去設置與產出網頁的 SiteMap(中文稱巡覽列、導覽列),不過在 ASP.NET MVC 之下一開始並無控制項觀念,也經常碰到有 WebForm 經驗正在學習 ASP.NET MVC 的新手常問說:WebForm 有什麼控制項的功能,ASP.NET MVC 有沒有。SiteMap 就是常被問到的一項。

說實話,剛接觸 ASP.NET MVC 2 時是比較辛苦,因為沒提供的功能都必須自己手工刻。隨著時間的經過,後來有了 NuGet 的加持直到現在 ASP.NET MVC 4,整個 ASP.NET MVC 上的擴充套件(擴充程式)已經非常完整,今天要介紹的 MvcSiteMapProvider 都一套快速提供 MVC 專案使用的 Sitemap 擴充套件。

安裝與設置MvcSiteMapProvider擴充套件

首先我們先開一個測試用的 MVC - 網際網路專案,然後開啟【套件管理器主控台】:

PM> Install-Package MvcSiteMapProvider

安裝之後,會開啟一個 Mvc.sitemap 的檔案,如果讀者看過 Webform 的 SiteMap 設置檔會有相似的感覺。

開課招生 - ASP.NET Web API四週實戰課程

什麼是ASP.NET Web API?

比較 WCF 與 Web API

圖片來源:http://thedatafarm.com/blog/asp-net/how-i-see-web-api/

在 ASP.NET Web API(以下簡稱 Web API)出現之前,我們要開發 Service 之類應用,大多只有兩種選擇:

  • Web Service
  • WCF

而 Web API 基本上是一個化繁為簡的 Framework,它輕量化而高效率,讓我們非常簡易的就能建置一個 HTTP Service,因為 Web API 是以 HTTP 為基礎,從上圖我們來看設備上面的 <-- 符號,Web API 是目前不需要多餘處理一種。Web API 用於 HTTP 也存活於 HTTP,因為這樣單純的特性,Web API 可以輕鬆提供 HTTP Service 給各種裝置、設備、應用程式等各種支援 HTTP 的軟硬體來使用。這方面而言,Web Service / WCF 要達成這樣的目標,難度就提高很多。

上課是最好的進修方式

ASP.NET Web API CORS預覽功能完整剖析

Cross-origin resource sharing(CORS)

Cross-origin resource sharing (跨來源資源分享,以下稱CORS)是W3C 提案的技術標準,定義伺服器與用瀏覽器在跨來源(即cross domain,跨網域)呼叫時的互動方式。CORS標準允許網頁發出跨網域的AJAX請求,讓實作了同源策略(same-origin)的瀏覽器在安全條件下去呼叫進行有限制的跨網域AJAX請求。

CORS透過設定HTTP Header(標頭)設置那些網域的網站可以跨網域存取,目前W3C定義九個Response Header(回應標頭)可以設置:

Response Header說明
Access-Control-Allow-Origin 指示是否基於共享資源透過回傳來源請求標頭、“*”或“null”在回應裡。
Access-Control-Allow-Credentials 指示當省略憑證標誌(Credentials flag)未設置時,是否公開請求的回應。當檢查請求(preflight request)的回應一部分,它表明實際的請求可以包含用戶端憑證。
Access-Control-Expose-Headers 指示那些標頭是安全公開在CORS API規範的API。
Access-Control-Max-Age 指示檢查請求可以快取多久時間在快取結果裡。
Access-Control-Allow-Methods 指示實際請求期間,可以使用那些方法做為請求回應的一部分。
Access-Control-Allow-Headers 指示實際請求期間,可以使用那些標頭名稱做為請求回應的一部分。
Origin 指示跨來源請求或檢查請求來自於。
Access-Control-Request-Method 指示那種方法在實際請求中做為檢查請求的一部分。
Access-Control-Request-Headers 指示那種標頭在實際請求中做為檢查請求的一部分。

例如,我們可以設置以下CORS標頭:

 Access-Control-Allow-Origin: http://kkbruce.net
 Access-Control-Allow-Methods: PUT, DELETE
 

這表示,除了網站本身以外,還允許kkbruce.net網域進行跨網域的AJAX請求且只允許PUT和DELETE方法的請求。允許的網域可以設定多組,也能設定為“*”代表不設限。

ASP.NET MVC裡Model使用ADO.NET來開發

MVC Model只能使用Entity Framework?

關於MVC裡的Model是否只能使用Entity Framework,答案是否定的。會這樣自問自答是因為有讀者問說,怎麼所有寫ASP.NET MVC的書都是用Entity Framework。MVC裡的Model根本不關心你用什麼技術,例如我們在書裡2.2節就例了一大堆的Model可用技術。在早期ASP.NET MVC 2的書,Model大概都是用LINQ to SQL,那個時候的讀者應該也是會問一樣的問題吧。時代會進步,技術也沒有停過,會選擇Entity Framework我是很單純,我是學習與推廣微軟技術的人,ORM技術對於範例程式碼有較好的可讀性,撰寫與偵錯速度也快,在非特別環境(或特別限制)下,就我而言,我是個懶人,我會選擇讓我可以最懶的技術。

建立組織與Windows Azure Virtual Network之間VPN連線

Windows Azure for Virtual Network

Windows Azure Virtual Network Dashboard - Connection

Virtual Network是Windows Azure的IaaS(基礎架構即服務)部分,為何會介紹這個呢?這是因為小朱前輩剛好在試這一段內容,但苦於沒有設備,剛好我們家就是Router製造商,一時心癢,就把Create a Virtual Network for Cross-Premises Connectivity的內容給做幾次,順便做個筆記,結論是:不用Cisco、Juniper這些高貴的設備,我們家的Router也可以和Windows Azure建VPN連線。

建立虛擬網路(Virtual Network)

這裡的目標是在Windows Azure與公司網路透過VPN建立連線。另外在撰寫這篇文章時,Windows Azure的VPN設置與流程已經與教學文章不同(其實也只是昨天睡前和今早起床…),由此可知,未來流程或設置如有與本文不同,不是我教錯,請以官方為主。@_@

即時監控、自動調整與擴充Windows Azure資源的好工具 - AzureWatch

雲端上的Scale-out與Scale-in

Scale-out與Scale-in中文不好翻譯,大意就即自動化擴充資源與降低資源。這是我自己在使用雲端或在雲端的研討會常聽到的問題。「自動化」是指不必人為操作,如果還要進管理介面(像HiCloud)去進行資源的分配,那就不是自動化。「使用雲端」是指有在使用雲端服務的人(或公司),使用雲端技術其中一個重要目標就是想要能動態調整資源,以網站而言,平常低流量時,使用最少資源即可,當有行銷活動或某個話題吸引大量流量進入時,希望服務器能自動提高使用資源。

自動化資源調配在雲端上是非常重要的,不可能說等伺服器爆了在來調整,那種雲就不合適拿來應付可能有突發狀況的服務

AzureWatch服務簡介

針對Windwos Azure的自動化資源調配,國外有一些廠商推出不錯的產品,有的要安裝代理程式,有的不需要,今天要介紹的AzureWatch是不需要安裝代理程式的。

AzureWatch服務截圖

AzureWatch(14天免費試用):https://www.paraleap.com/

上圖是AzureWatch網站首頁上一小個截圖,不過用來說明這個服務已經非常夠了。AzureWatch主要進行三件事:

  • Azure Monitoring - 雲端服務即時監控
  • Auto-Scaling - 自動資源調整
  • Real-time customizable alerts - 即時且客製化的通知

也就是圖片上半部,圖片下半部是細項,常用的Web Role / Worker Role、Websites、Storage…都支援。註冊送14天免費試用,GWAB活動有送一組Promo Code,可延長至30天。

Global Windows Azure BootCamp 2013課後實作心得

GWAB 2013 - 台灣台北場

很高興有機會參與到2013年台灣GWAB(Global Windows Azure BootCamp)這一個全球性活動,當天全球有91處同時進行(不計時差)這個GWAB,台灣由朱明中Sky董大偉三位Windows Auzre方面資深MVP帶領學員說明Windows Azure與實作。課中收獲許多,真是上一天課,比K一個月的書還有效。

GWAB投影片、教材與影片

第一堂是由小朱前輩進行Windows Azure Cloud Service的說明與實作,相關資料都可以到「[Windows Azure] Global Windows Azure Bootcamp取得。

第二堂是由Sky前輩進行Windows Azure WebStei Service說明與實作。

第三堂是由董大偉前輩進行Widnows Azure Mobile Service的說明與實作,相關資料與影片可以到「[研討會] GAWB 2013 Hands on lab slides and video取得。

超快速DVD轉檔軟體:WinX DVD Ripper Platinum繁體中文評測

DVD轉檔軟體

現在YouTube、PPS、PPTV、風行…等線上影片來源非常之多,不知道還有幾個人會去買DVD片子。常說,女人和小孩的錢最好賺,這是真的,前半輩子都是花在女人身上(還好,她成為了我老婆 ^_^),後半輩子有很大一部分是花在小孩身上。用小孩來說服父母花錢,是很有殺傷力的。像上面圖片的DVD - Bugs就是其中之一,說真的,現在有些針對孩子所出的DVD內容真的不錯,例如,金革卡通動畫裡的DVD都很不錯,比看電視卡通好太多,例如,海綿寶寶,海綿寶寶實在不合適小朋友看。

但買完DVD後,父母們應該都會想個做備份,DVD的備份有二種:

  1. DVD烤貝
  2. DVD轉檔

DVD烤貝就是一對一對燒,把母片保存好,用烤貝片來看。DVD轉檔就是把DVD影片內容轉換成為數位檔案,再使用電腦來播放,現在許多DVD播放器也支援數位檔案的播放,數位檔案使用起來是方便。DVD烤貝是需要花DVD碟片的成本,不過畫質不受影響。DVD轉檔是備份或攜帶的方便性高,不過縮壓過的內容畫質一定比不上DVD片子。

把Windows Phone當滑鼠與鍵盤來遠端遙控Windows的好用App - Microsoft Garage Mouse without Borders

實用又有趣的Windows Phone App - Microsoft Garage Mouse without Borders

Microsoft Garage Mouse without Borders - Windows Phone滑鼠操控畫面

不知道你是否有用過「簡報器」這類的產品,簡報器不外乎把滑鼠原有的功能改造成方便在簡報時使用,再加上個雷射筆的功能。雖然現在簡報器價格已經親民許多,但還是要一筆費用。如果你的需求簡單 例如,只需要簡報換頁,在現在App風行的潮流下,可以考慮透過App來替代簡報器,這也是今天要介紹主角『Microsoft Garage Mouse without Borders』。

twMVC#8 - ASP.NET Web API課後補充資料與專案範例檔

感謝twMVC的邀請

twMVC 第八場 ASP.NET Web API 課程,講師與工作人員合照

首先,感謝twMVC邀請,讓我有機會和大家分享ASP.NET Web API此一主題,課程中有提到一些注意事項,有些內容在《ASP.NET MVC 4網站開發美學》沒交代清楚,整理成以下文章,以補充書中內容。

ASP.NET Web API上傳大檔案至Windows Azure Blob儲存體

學好Windows Azure必看的一本書

Windows Azure Platform應用程式開發教戰手札(第二版)
圖片來源:http://books.gotop.com.tw/v_ACL036700

首先,如果各位對Windows Azure不是很熟悉的話,我推薦小朱的《Windows Azure Platform應用程式開發教戰手札(第二版)》。

ASP.NET Web API介接服務

「介接服務」的意思是,在Web API裡,我們可以拿別人的服務來成為我的服務,Client只是使用者,他不需要知道細節。以「上傳檔案」而言,當Client上傳一個檔案,你可以儲存在本機,也就是進行File I/O的動作,你可以儲存在Database裡,也就是進行Database I/O動作。

在以下範例中,我們要在Web API裡去儲存檔案至Windows Azure的Blob儲存體中,也就是說,我們拿Windows Azure Storage服務來當成我們服務內容之一。

快速存取Web API的好幫手 - HttpClient類別

HttpClient類別範例補充

我們之前就介紹過HttpClient類別,在準備twMVC#8 Web API課程我又把範例改寫了一下,主要是進行ASP.NET Web API的服務存取及存取其他網路上Web API服務。

匯出ASP.NET Web API公開API方法至PostMan Collections

關於PostMan

PostMan - REST Client

PostMan是我在《ASP.NET MVC 4網站開發美學》第七章ASP.NET Web API裡介紹的兩個工具之一,它可以快速進行Web API的測試,不管是HTTP GET/POST/PUT/DELETE/PATCH…等方法或檔案上傳等都難不到它。但我們在測試Web API方法的過程裡,經常會發生一種不必要的錯誤,那就是打錯字或選錯HTTP動詞明明就是”api/files“,老是打成”/files“,不然就是忘了改測試的HTTP動詞,這時就可以利用PostMan的Collections功能來預防與管理。

ASP.NET Web API的HTTP PATCH動詞與Patch方法實作

HTTP PATCH動詞與Patch方法

在ASP.NET Web API裡我們會利用HTTP PUT動詞與PUT方法來進行資料異動,不過PUT方法的異動是全部物件的異動,如果我們把部分資料傳入PUT方法進行異動,會產生一個非常驚訝的結果,就是其他沒有傳入的資料會全部被清除為空。正確的方法應該是使用HTTP PATCH動詞與Patch方法來進行部分資料的更新。

ASP.NET Web API HTTP PATCH方法實作

在《ASP.NET MVC 4網站開發美學》第7-52頁裡也有提到HTTP PATCH方法,書中未附上完整實作,以下提供實作內容:

ASP.NET Web API - Entity Framework(EDMX) Navigation Property引發的JSON物件循環參考錯誤

Entity Framework(EDMX) Navigation Property

上圖是一個ASP.NET Web API專案,從範例Northwind資料庫裡加入兩張有關連性的資料表到Entity Framework(EDMX)裡,很正常的,它會加入巡覽屬性(Navigation Property),當我們什麼都不修改,直接加入API Controller,例如,ProcutsController和OrderDetailsController然後建置、啟動、測試Web API服務會立即得到一個錯誤。

JSON的錯誤訊息與產生原因

完整訊息如下

小心,不要被Google Chrome偷偷吃掉你的記憶體

Google Chrome的快是要付出代價

Google Chrome 19記憶體使用情況

這是開啟Google Chrome 25,預設只連上blog.kkbruce.net所使用的記憶體情況,一開啟就吃了496.4 MB的記憶體(Firefox 19是161.3 MB,IE 10是138.5 MB。)。可以看得出來,Google Chrome的快是用你電腦的記憶體換來的,好或壞,這看個人。

為何說偷偷吃掉記憶體

先看第二張圖:

Google Chrome 19記憶體使用情況2

ASP.NET MVC 3-4無法新增Controller

問題的來龍去脈

Visual Studio 2012在安裝【Web Tools 2012.2】正式版更新之後,ASP.NET MVC 3與ASP.NET MVC 4(C#與VB.NET)專案,如果使用【Database first + Entity Framework】會無法新增MVC Controller與API Controller。

Database first示意圖

  1. 新增範例資料庫
    新增Northwind範例資料庫
  2. 新增Entity Framework實體資料模型(EDMX)
    新增Entity Framework實體資料模型(EDMX)

新增MVC / API Controller之英文版錯誤訊息:

新增MVC / API Controller之英文版錯誤訊息
'ProjectName.ClassName' is not part of the specified 'ProjectName.???Entities' class, and the 'ProjectName.???Entities' class could not be modifed to add a 'DbSet<ProjectName.ClassName>' property to it.(For example, the 'ProjectName.???Entities' class might be in a compiled assembly.)

新增MVC / API Controller之中文版錯誤訊息:

新增MVC / API Controller之中文版錯誤訊息
'ProjectName.ClassName'不是指定之'ProjectName.???Entities'類別的一部分,而且無法修改'ProjectName.???Entities'類別以新增'DbSet<ProjectName.ClassName>'屬性(例如,'ProjectName.???Entities'類別可能位於已編訪的組件中)

DIY-如何升級筆電SSD與轉移作業系統至SSD

新機Lenovo T530

在過年前購入新機Lenovo T530,使用Lenovo T530與前一台Lenovo T430的體驗是一致的,但有更大的螢幕、更好的CPU與更高的重量,但少了背光鍵盤。在Lenovo T430享受過SSD的速度感之後,已無法認受HDD那似慢非慢速度。SSD真的是非常值得投資,省下的時間真的非常可觀。一放完年假後,立即採購一顆SSD,之前我是採用120 GB SSD,後來發現,120 GB SSD在安裝Hyper-V之後,才安裝第一套虛擬機,空間就已經使用完畢,這一次就選擇256 GB SSD來進行升級。升級SSD算簡單,轉移OS至SSD就需要一點技巧。

Web Tools 2012.2 for Facebook範本

ASP.NET MVC 4的SPA與Facebook範本

Web Tools 2012.2正式版更新在ASP.NET MVC 4上新增了二個範本,一個是SPA範本,另一個是Facebook範本,SPA範本的故事和OData很像,從ASP.NET MVC 4 Beta出現,ASP.NET MVC 4 RC/RTM又不見了,更新Web Tools 2012.2之後,又出現了。Facebook範本是一全新範本,讓開發人員可以快速整合Facebook社交媒體。SPA範本使用簡單,但要說明並不容易,因為它整合了非常多樣技術。以下先說明使用Facebook範本建置一個【Facebook應用程式】的網站。

Web Tools 2012.2 Release for ASP.NET Web API

Web Tools 2012.2正式版

Web Tools 2012.2正式版進行了多項更新,這些更新不會影響原有專案內容,更新區分為兩部份,一是ASP.NET的更新,ASP.NET的更新包含WebForm與MVC,在MVC的更新中又以ASP.NET Web API提供更完整的功能。二是Visual Studio 2012開發工具功能的再提升。

ASP.NET Web API功能更新:

  1. OData
  2. Tracing
  3. API Help Page

Ch07 - ASP.NET Web API - Northwind範例T-SQL檔案

ASP.NET Web API - Northwind範例T-SQL檔案

首先跟大家拜個早年。今年過年前最高興的事,當然是年前有辦法將書送到各位讀者的手中。這幾天除了拜讀其他作者著作章節外,也自己進行了第五校,說真的,還是紙本好,看起來又快又順。雖然電子書是趨勢,但我願意背著800頁的大書到處跑。

本書有附有範例檔案,不過可能是出版社趕著在過年前把書印出來,目前在GOTOP網站上還沒有看到,ASP.NET Web API一章會同時有Visual Basic與C#的範例檔。在7-31頁裡,有一段需要匯入Northwind-Table.sql,以執行建立範例所需的Northwind資料庫,此T-SQL是我改寫過的,這樣在SqlLocalDB中執行才不會出錯。原本是要上傳完整ASP.NET Web API範例檔,家鄉宜蘭這邊網路情況不佳(7-11),只好先上傳Northwind-Table.sql這一支檔案,讓讀者可以按書中內容接下去實作。

Visual Studio 2012透過Connector/Net 6.6.4無法連接MySQL

問題的來龍去脈

下載安裝MySQL Connector/Net 6.6.4,在Visual Studio 2012連接至MySQL時會產生錯誤。MySQL Server Version:5.5.23-55。

MySQL連接範例程式碼,主控台應用程式:

Module Module1

    Sub Main()
        Dim conn As New MySql.Data.MySqlClient.MySqlConnection
        Dim ConnString As String = ""

        ConnString = "server=x.x.x.x;" _
                     & "uid=bruce;" _
                     & "pwd=***********;" _
                     & "database=?????????;"

        Try
            conn.ConnectionString = ConnString
            conn.Open()
            Console.WriteLine("MySql連線成功!")
        Catch ex As MySql.Data.MySqlClient.MySqlException
            Console.WriteLine("錯誤編號:" & ex.Number)
            Console.WriteLine("錯誤訊息:" & ex.ToString())
        Finally
            conn.Close()
            Console.WriteLine("MySql測試完畢!")
        End Try

        Console.ReadLine()

    End Sub

End Module
   

錯誤編號:0

錯誤訊息:MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication method 'mysql_old_password' not supported by any of the available plugins.

於 MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.GetPlugin(String method, NativeDriver driver, Byte[] authData)

於 MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.HandleAuthChange(MySqlPacket packet)

於 MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.Authenticate(Boolean reset)

於 MySql.Data.MySqlClient.NativeDriver.Open()

於 MySql.Data.MySqlClient.Driver.Open()

於 MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)

於 MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()

於 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()

於 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()

於 MySql.Data.MySqlClient.MySqlPool.GetConnection()

於 MySql.Data.MySqlClient.MySqlConnection.Open()

於 mysql_test_01.Module1.Main() 於 C:\Users\Bruce\Documents\Visual Studio 2012\Projects\mysql_test_01\mysql_test_01\Module1.vb: 行 14

如果使用【伺服器總管】【資料連接】方式,當輸入完所有資訊按【測試連接】時,會產生一樣錯誤訊息:

Authentication method 'mysql_old_password' not supported by any of the available plugins.

如果按下【確定】更會使Visual Studio 2012 Crash然後重啟。

ASP.NET MVC 4網站開發美學 - 目錄與預購

目錄

以下為《ASP.NET MVC 4網站開發美學》全書目錄,本書共11章792頁。以下是非常長的一串目錄,可以讓讀者先瞭解將會閱讀到什麼的主題與內容。

ASP.NET MVC 4網站開發美學 - 前言與預購

前言

本書命名為《網站開發美學》,是因為開發ASP.NET MVC網站讓我們覺得好美。

ASP.NET MVC 4網站開發美學 - 導讀與預購

導讀

ASP.NET MVC 由2007 年開始發展至今,我們看到MVC 開發模式逐漸地 成熟,並且一步一步成為網頁開發的主流。在ASP.NET MVC 4.0 這個版本裡, 我們看到了許多令人驚喜的魔法,簡單、快速、強大又充滿彈性,更重要的是, 當開發人員掌握了MVC 開發精髓,便能用更少的時間做更多的事。

Web Optimization Framework 1.1.0-alpha1新功能預覽

ASP.NET MVC 4 - 合併與最佳化(bundling and minification)補充資料

合併與最佳化 - 1.1.0 Alpha 1

在ASP.NET MVC 4網站開發美學第5.6小節談到【合併與最佳化】這個主題,內容中討論的相關功能就是由【System.Web.Optimization.dll】所提供,以前必須由擴充套件來達到的功能,現在都由ASP.NET MVC 4內建的System.Web.Optimization.dll提供,我查了一下書中的截圖,在Visual Studio 2010 RTM版本內版本為1.0.0-beta2,應該是安裝了Visual Studio 2012 Update 1,所以目前開啟的專案已內已經是版本1.0.0。以下會補充一些書藉沒有的內容,共有二篇補充資料,此為第一篇,第二篇會討論Microsoft ASP.NET Web Optimization Framework 1.1.0-alpha1這個下一版本又會提供那些新功能。

啟用合併與最佳化的影響

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification提供了一分資料,有使用B/M與沒有使用B/M的差異:

項目 使用B/M 未用B/M 改善
檔案請求 9 34 256%
KB傳送 3.26 11.92 266%
KB接收 388.51 530 36%
載入時間 510 MS 780 MS 53%

ASP.NET MVC 4網站開發美學 - 我們如何合作?

北中南Microsoft MVP大合作

ASP.NET MVC 4網站開發美學-封面

這是我人生第一本合著,想多留點回憶,宣傳文會多一些,請各位見諒。

第一次寫作就是以合作方式進行,這讓我非常高興,我是應Demo的邀請,知道作者群之後,有點嚇一跳,因為是一次北、中、南三地Microsoft MVP大合作,怎麼溝通與討論,這很好玩。

ASP.NET MVC 4大綱討論

在網路的時代,當然是用網路來解決。

書藉的大綱討論絕大部分都是在Demo所提供的一套http://www.mindomo.com/工具裡完成,一般不管是XMind之類的工具,都是離線式的應用工具,不合適協同作業,Mindomo是線上工具,這讓我們在不同地點也能清楚整個架構,直接的討論、回應、修改。

除了線上,另一個重點是,像我用XMind,雖然它有發佈至線上的功能,但都是發佈之後的資料都是公開的,像我們這種團隊合作的資料是需要隱私且不公開的,而且還要能邊討論邊修改,這部份Mindomo都是上上之選。

最重要是感謝Demo的付費,讓所有作者有一個好的討論空間。(Mindomo免費與付費功能差異不在此文討論。)

ASP.NET MVC 4大綱 for Mindomo

開箱文 - Lenovo T430(含使用心得)

我的選擇:Lenovo T430

前一篇「SURVEY MY DREAM NOTEBOOK」交帶我很認真為了找心中規格筆記型電腦所做的努力,從SONY T13、Lenovo G580、Lenovo S430到最決定的是Lenovo T430,拿到Lenovo T430剛好是2012/12/24的聖誕夜,fb上許多人留言說「開箱文」,說實話,那種第一時間的開箱文不是我想要的,和初戀一樣,一開始太甜蜜了,眼裡都只有滿滿的優點而沒有缺點,那上原廠網頁看就好,照片一定比我的美,文筆一定寫的比我的好。正式使用一段時間後,我慢慢發現Lenovo T430那不為人知優點與缺點,這篇開箱文絕不是只有圖片,裡面會有我的使用心得,心得有優點也有缺點,這樣的開箱文是我認為比較有用處。

Can Run ASP.NET Web API with HTTPS?

讀者發問

是的,書還沒賣出半本就已經開始做讀者服務。寫書真的不是拿來賺錢的。@_@

參加twMVC#7時,有社群朋友問說,ASP.NET Web API是否能運作在HTTPS之下?老實說,我還真沒想過也沒試過,不過這在商業上是很實際的需求,與前端之間重要、機密的資料,最簡易與安全的方式就是使用HTTPS。那麼,ASP.NET Web API是否能在HTTPS協定下運作呢?

讓我們看下去。

IIS Express for HTTPS環境架設

進入HTTPS測試之前,當然要先有一個HTTPS的測試環境。在「ASP.NET MVC 4網站開發美學」裡我花了很長的篇幅教讀者如何設定與使用IIS Express,也說明了使用了IIS Express指令模式的好處,如果你要學習ASP.NET Web API不會使用IIS Express,那真的是吃虧。

  1. 以下操作與設定環境為Windows 8 and Visual Studio 2012。
  2. 以下使用ASP.NET MVC 4預設Web API專案測試。
  3. IIS Express相關細節請參考《ASP.NET MVC 4網站開發美學》第七章。

ASP.NET MVC 4網站開發美學 - 寫作心得與封面曝光

一本真正ASP.NET MVC 4的技術書藉

ASP.NET MVC 4網站開發美學封面

這本書得來不易,「看書容易寫書難」這句話或許讀者感受不到,說真的,我沒當過書藉作者之前,寫寫部落格只是為了記錄或記筆居多,真的有人找你寫書才知道,一本書從寫作到出版,如果用心,不是一件那麼容易的事。古人說的好:「凡走過必留下痕跡。」我說:「凡寫過必留下心得。」

ASP.NET MVC 2/3/4的完整討論

這本ASP.NET MVC 4絕對精彩,它完整討論目前ASP.NET MVC 2/3/4的所有內容尤其是MVC 4這個版本裡所有的新功能,我們6位作者個個使出看家本領,進行了完整且大量的討論,絕不是幾筆、幾頁帶過就算了。如果沒有意外的話,依頁數來看應該是一本枕頭書,晚上拿來壓完泡麵後,可以多K個好幾章。

Survey My Dream Notebook

一台IntelliSense無反應的Notebook

公司有一台公用筆電,公用就是有需要的人就借去用。不過,這台筆電已經有點年紀了,自從安裝了Visual Studio 2012之後,就每況日下,又安裝一堆擴充套件與Visual Studio Update 1、Web Tool 2012.2等後,已經來到了打個字就能立Visual Studio 2012無反應數十秒,然後才跳出IntelliSense。

之前,下班之後,專心於家庭生活,所以有台筆電可以借來偶爾用用,我已經很高興了,並無購買需求。但今天,自己接下寫書工作後,自己又有一些計劃,需要在家使用電腦的機會大增,另外,因為有攜帶的需求,就不考慮桌機而考慮筆記型電腦。

需求

  • 開發機,以Developer為主。
  • 虛擬機,會玩虛擬化。
  • 行動機,重量不要太重
  • 價格3萬上下

如果用白話來說就是:效能、擴充性、攜帶性。

NB Survey part 1:Windows 8 for Touch Monitor Notebook

一開始鎖定是觸控螢幕筆記型電腦(Touch Monitor Notebook),考慮Touch Monitor只是為了玩Windows 8。