• Azure 網站服務新功能預覽: 生成 PDF 文件以及支援載入檔案憑證

    原文發表於 PDF Generation and loading file based certificates in Azure Websites

    在 Azure 網站服務上,我們致力確保它與開發環境中、一般的 IIS 平台有一致的環境,這樣一來,開發人員便能夠讓應用程式在既有機房與雲端之間無縫切換執行。不過身為一個多租戶服務(multi-tenant service),Azure 網站服務設計了一些確保安全的遊戲規則,這可能會讓一些既有的應用程式發生一些相容性問題。所以今天我們宣佈 Azure 網站服務將新增兩個功能讓使用基本或標準方案的用戶先預覽,以確保應用程式的相容性。

    使用 SQL Server Reporting Service 生成 PDF 文件 (Report Viewer)

    在 Azure 網站服務上您可以用許多工具或開發框架來生成 PDF 文件,其中之一是過去受到開發人員歡迎的 SQL Server Reporting Services,透過這次的更新,我們讓使用基本標準方案的用戶能夠直接使用它來產生 PDF 文件。

    支援載入 PFX 憑證檔案

    應用程式在使用 HTTP 介接其它服務時,若是需要使用用戶端憑證 (client certificates) 來做身份驗證的情境,就會需要能夠從檔案系統中載入憑證檔案(使用 X509Certificate2 類別指向一個 PFX 檔案),然後用它來進行 HTTP 請求。為了要能夠從檔案系統中讀取 PFX 檔案,Windows 需要一個用戶配置(user profile)來完成讀取憑證。在一般的 IIS 伺服器上,因為支援 "per Application pool" 做設定,所以很容易就可以做到這個功能。經由這次更新後,我們讓 Azure 網站服務支援了一樣的設定(目前僅開放給基本標準方案的用戶),只要在管理後台的應用程式設定(app settings)中加入一個 WEBSITE_LOAD_USER_PROFILE 常數,並且將它的值設為 1,如此一來 Azure 網站服務便會替應用程式載入用戶配置,這樣一來也就能夠從檔案系統中讀取 PFX 檔案了。

    我們一直很重視客戶給我們的各種意見,這讓我們可以專注在改進系統以滿足用戶的需要,上面這兩項功能就是許多開發人員經常反映希望我們加入的功能,當然我們持續歡迎你們提供寶貴的意見。

  • 移轉資料至 Microsoft Azure 檔案服務

    原文發表自 Migrating Data to Microsoft Azure Files

    關於 Microsoft Azure 檔案服務(Files)

    Microsoft Azure 檔案服務是一個以雲端平台為基礎的檔案服務,並且提供 SMB2.1 協定,讓使用者能透過雲端分享檔案。在 Azure 上的應用程式現在可以很輕易地在虛擬機器間、使用熟悉的檔案系統 API 如:ReadFileWriteFile 來分享檔案。除此之外,這些檔案也可以透過 REST API 的方式來存取,使其應用情境更多元。如同現有的其它儲存體服務如:Blob, Table, Queue Services 等一樣,Azure 檔案服務一樣有可延展性、高可靠度、地理複本備援等雲端平台的特性。目前這個服務還在預覽階段,關於詳細的技術內容可以參考這篇部落格文章

    移轉資料

    當您開始使用 Azure 檔案服務,你可能會需要搬移大量的既有資料到 Azure 檔案服務中,搬移的方式有很多種,這取決於您的資料放在哪裡,這篇文章接下來會介紹幾種方式,並且介紹如何獲取最大的效能。

    1. 透過網際網路將既有機房的檔案搬上 Azure

    您可以使用 Microsoft Azure 提供的 AzCopy 工具來複製檔案,AzCopy 優化了複製檔案的操作以達到最好的效能(例如:平行上傳、多執行緒、正確處理流量傳輸等等)。

    AzCopy 的命令列操作格式如下:

    AzCopy <source path> <destination URL> [optional filespec] /S /DestKey:<YourKey>

    參數

    source path 是要複製的檔案路徑

    destination URL 指的是要複製的目標目錄 URL

    filespec 可以是任何檔案篩選條件 (預設是 *.*)

    YourKey 是你儲存體帳戶的金鑰

    /S 是一個選項用來複製整個目錄、包含子目錄的內容

    AzCopy 還有很多其它的命令列參數,您可以根據您的需求來選擇使用,關於 AzCopy 的詳情可以參考這篇部落格文章

    底下是一個範例,是將 e:\data 目錄下的內容複製到 Azure 檔案服務:

    AzCopy c:\data https://myaccount.file.core.windows.net/myshare *.* /S /DestKey:myStorageAccountKey

    2. 從 Azure IaaS 虛擬機器磁碟到 Azure 檔案服務

    使用 Azure 虛擬機器來做檔案伺服器的人來說,Azure 檔案服務應該是非常有吸引力的,因為如此一來就不必再自己管理檔案伺服器了。

    要將檔案移轉到 Azure 檔案服務,需要:

    1. 在虛擬機器中連接磁碟機
    2. 掛載 Azure 檔案服務
    3. 使用 robocopy 來複製檔案

    Robocopy 是 Windows 上免費且強大的複製工具,用來處理大檔案的複製。

    命令列工具的格式如下:

    Robocopy <source path> <dest path> [optional filespec] /MIR /MT:16

    參數為:

    source path 是要複製的檔案路徑

    dest path 指的是要複製的目標目錄路徑

    filespec 可以是任何檔案篩選條件 (預設是 *.*)

    MT 是使用的執行緒數量

    當使用 robocopy 時,您可以使用 "/mt" 參數來增加工作效率,它讓你可以使用多執行緒來處理檔案的複製,並且控制 IO 處理的佇列深度。如果執行緒數目太少,則可能會無法填滿佇列,但卻可以利用到 Azure 儲存體的平行架構;而要是執行緒數目太多,可能會有伺服器端傳輸切換過於頻繁而反而造成傳輸效能降低的問題。在我們的測試之下,最好的執行緒數目是在 16 ~ 32 之間可取得最大的效能。

    要避免的方法

    我們發現雖然可以使用 xcopy 或是檔案總管來處理大檔案的複製到 Azure 檔案服務,而且在 NTFS 的檔案系統下表現良好,但是這些工具缺乏足夠的平行處理能力,由於 Azure 檔案服務提供了高平行化的 I/O 處理,所以使用像 robocopy 這樣的工具,並搭配多執行緒的處理將可以得到更好的傳輸效能,以節省資料傳輸的時間。

    3. 從 Azure Blob 到 Azure 檔案服務

    從 Azure Blob 搬資料到 Azure 檔案服務最快的方法就是使用 AzCopy,你可以在與 Azure 檔案服務相同的資料中心上建一個虛擬機器來做複製的操作。

    底下是一個從 Azure Blob 傳資料到 Azure 檔案服務的指令操作:

    AzCopy https://myaccount1.blob.core.windows.net/mycontainer z:\mydirectory *.* /SourceKey:myStorageAccountKey

    (在這裡我們假設 Azure 檔案服務連接到 Z 磁碟機)

    在這個方法之下,資料會先下載到虛擬機器後,再上傳到 Azure 檔案服務中。

    4. 從 Cloud Drive 到 Azure 磁碟

    Cloud Drive 在 2010 年時預覽釋出,它讓用戶可以使用 Azure 雲端服務來掛載一個 page blob 作為 Web 或 Worker role 的磁碟機。在 Azure 檔案服務釋出後,幾乎可以取代所有 Cloud Drive 的應用情境,而且還有更好的功能及效能。同時,Cloud Drive 將在 2015 年停止服務,所以我們建議使用 Cloud Drive 的用戶可以移轉資料到 Azure 檔案服務上。搬移的方法與使用 VHDs 來從 Azure 虛擬機器中搬資料類似。

    1. 使用 Cloud Drive 掛載一個 blob
    2. 在虛擬機器中,將 Azure 檔案服務掛載為一個磁碟機。(可參考這篇部落格文章)
    3. 使用 Robocopy 來複製檔案。

    我們希望這些方法都能幫助您將資料移轉到 Azure 檔案服務上,並且提供您新的應用情境來滿足您的商務需求。

  • 在 Azure 上的 PHP 網站使用 Azure 的 Redis Cache 服務

    Redis Cache

    Microsoft Azure 的網站服務可以讓 PHP 網站開發人員架設網站(參考教學課程),如果要在網站系統中使用 Cache 來提升系統效能,可以考慮 Azure 上的 Redis Cache 服務(目前在預覽階段)。

    建立 Redis Cache 服務

    要使用 Redis Cache,目前需要到預覽中的新版 Azure 管理介面來操作,在新增服務的選項中選擇 Redis Cache。

    New Redis Cache service

    然後選擇要用哪一個訂閱、什麼方案(Basic or Standard)、還有快取服務要用哪一座資料中心(建議與您的服務放在同一座資料中心,以減少網路的延遲)來提供服務。

    Redis Cache plans

    建立完成後,Azure 需要一些時間把服務建立起來,一旦建立完成便能立即使用,而也可以在管理介面中看到它的一些狀態,可以點開 KEYS 來看金鑰或是 Properties 來看它的設定

    Cache properties

    點開 Properties 就會看到連線資訊,還有連接埠號碼。

    Cache information

    搭配 KEYS 裡面顯示的金鑰就可以來使用 Redis Cache 服務了。

    在網站服務上的 PHP 網站如何使用

    如果您使用 Azure 的網站服務來運作 PHP 網站,要連接 Redis Cache 服務也很容易,只要下面幾個步驟:

    1. 到這裡下載編譯好的,給 Windows 環境的 PHP Redis 擴充套件,記得要根據您網站上設定的 PHP 版本下載對應的版本,而且要下載 VC9 編譯、NTS (non-thread-safe) 的版本。(當然您也可以選擇熟悉的 PHP Redis 套件,這裡只是範例)
    2. 將下載的套件解開壓縮,將 php_redis.dll 放在您的 PHP 專案目錄下,比方說放在 bin/php_redis.dll 下。
    3. 在上傳部署套件之前,先到 Azure 網站服務的管理介面上,將 app settings 加一個 PHP_EXTENSIONS 的常數,然後指到擴充套件的位置(如:bin\php_redis.dll 要用 Windows 的目錄表示法),像是這樣(圖為新版管理介面的網站設定,在現在的管理介面可在設定頁籤中找到):

    4. 上傳擴充套件檔案、重新啟動網站就完成了。

    上面這個 PHP Redis Cache 是使用這個套件,它的連接方式像這樣:

    <?php
    $redis = new Redis();
    $redis->pconnect('您 Redis Cache 的 hostname');
    $redis->auth('在 KEYS 頁面中找到金鑰');
    
    #開始使用 $redis 做 cache 操作 ...
    

    您可以在專案的 GitHub 頁面上查詢它的使用方法。

    參考資料

  • 為什麼 ASP.NET 開發人員要瞭解 Azure 行動服務?

    原文發表於 Azure Mobile Services: why should ASP.NET developers care?

    Mobile Services for Web API Devs

    Azure 行動服務為行動應用程式開發人員提供了以雲平台為基礎的後端解決方案,現在這項服務除了可以使用 JavaScript (Node.js) 來客製化後端平台之外,也支援了使用 ASP.NET Web API 的技術來客製後端平台的運算邏輯,所以對於要開發給行動裝置應用程式 API 的 ASP.NET 開發人員來說,Azure 行動服務是相當有吸引力的:

    • 適用於所有行動平台的完整後端平台以及 SDK 解決方案。透過 Azure 行動服務,您可以迅速地為您的 iOS, Android, Windows, Windows Phone 或是 HTML app 加上一個有豐富功能的後端平台,即使是使用像是 Xamarin, Sencha 或 PhoneGap 這些跨行動裝置平台的開發套件也適用。我們同時為這些平台分別提供了 SDK,讓您在開發整合上更加方便。
    • 您 Mobile API 的最佳託管平台。雖然 Azure 行動服務本身就提供了 Web API 供行動應用程式界接,您仍然可以部署 Web API 控制器到 Azure 行動服務上做客製化,相對其它的託管服務,Azure 行動服務可以協助您監控及管理您自行部署的 Web API 控制器,如果 Web API 的執行環境發生了任何問題,我們也會自行修補或更新,除非是您的控制器程式發生問題,我們才會聯絡您。
    • 優質且多功能的行動後端平台。Azure 行動服務提供了許多立即可用的功能,您可以輕易地與 Web API 結合,像是使用 SignalR 即時發出推播通知(push notification)使用社交網路的機制做身份驗證同步離線資料等等。
    • 與企業系統結合。如果您是企業中的開發人員,Azure 行動服務也讓您可以使用 Active Directory 做身份驗證、透過 API 存取 SharePointOffice 365 的資料。除此之外,我們也提供了無縫整合的機制 (connectivity to on-premises assets),即使企業內部的系統或資料庫沒有直接曝露在 Internet 之下,您依然可以在 Azure 行動服務上連結它們。
    • 與 Visual Studio 整合。現在您可以直接在您最愛的 IDE 中直接操作及開發 Azure 行動服務相關的專案,Visual Studio 同時也是 Azure 行動服務最佳的開發、偵錯及發佈的工具。

    適用於所有行動平台的完整後端平台以及 SDK 解決方案

    開始使用 Azure 行動服務是很容易的,只要在 Azure 管理後台上建立一個新的行動服務,並且在第一個畫面記得在 BACKEND 欄位選擇「.NET」。一旦行動服務建立完成後,您可以到 Quickstart 的頁面,根據您要開發的行動平台下載一個起始專案來開發。

    如果您比較喜歡從 Visual Studio 開始,那也可以在新增一個新的 ASP.NET 專案時,選擇新增 Azure Mobile Service 專案範本,稍後再將它直接發佈到 Azure 上。請注意:這項功能是在 Visual Studio 2013 Update 2 之後新增的

    不論用哪一種方式,都會拿到一個 Mobile Service .NET 的專案範本,同時您也可以發現它其實是一個簡單的 Web API 專案(加上一些 NuGet 套件)。

    您可以打開 TodoItemController.cs 這個檔案,在 GetAllTodoitems() 處設定中斷點,這個控制器的程式碼也展示了要如何操作 Azure 行動服務上的資料:

    public class TodoItemController : TableController
    {
        protected override void Initialize(HttpControllerContext controllerContext)
        {
            base.Initialize(controllerContext);
            csharp_testContext context = new csharp_testContext();
            DomainManager = new EntityDomainManager(context, Request, Services);
        }
    
        // GET tables/TodoItem
        public IQueryable GetAllTodoItems()
        {
            return Query();
        }
    
        // GET tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public SingleResult GetTodoItem(string id)
        {
            return Lookup(id);
        }
    
        // PATCH tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public Task PatchTodoItem(string id, Delta patch)
        {
            return UpdateAsync(id, patch);
        }
    
        // POST tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public async Task PostTodoItem(TodoItem item)
        {
            TodoItem current = await InsertAsync(item);
            return CreatedAtRoute("Tables", new { id = current.Id }, current);
        }
    
        // DELETE tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public Task DeleteTodoItem(string id)
        {
            return DeleteAsync(id);
        }
    }

    您可以看到這裡我們產生了所有的 CRUD 方法來處理 TodoItem,同時這個控制器使用了 EntityDomainManager,它為 Entity Framework 模型包裝了一層,讓您可以很容易地選擇不同的資料來源,像是:

    • MongoDB: 透過 NuGet 套件管理工具可以安裝使用 MongoDomainManager。詳情可參考這篇文章
    • Azure Table Storage: 透過 NuGet 套件管理工具可以安裝使用 StorageDomainManager。詳情可參考這篇文章

    現在 Azure 行動服務支援您可以在本地端進行偵錯(按 F5 執行),啟動的頁面將可以幫助您瞭解 Web API 送出的資料是否正確。按下頁面中的 GET tables/TodoItem 就可以開始進行測試;按下「try this out」的連結,並按下 send,就會觸發程式中的 GetAllTodoItems() 方法,由於剛才已經設定過中斷點,所以就可以在 IDE 裡進行偵錯。

    當您完成了 API 的開發,您可以立即從 Visual Studio 中將專案按右鍵發行至 Azure,而不必另外打開 Azure 管理介面來操作。

    一旦完成發行,Azure 行動服務便會立刻將您開發的 Web API 上線,同時進行監控。

    想要瞭解更多關於 Azure 行動服務的 .NET 支援,可以參考下列文章:

    您 Mobile API 的最佳託管平台

    如果您是一個有經驗的 Web API 開發人員,您也許會想瞭解把 Web API 服務放上 Azure 行動服務有什麼好處?下面舉出了一些好處:

    • 監控 (monitoring) 及診斷 (diagnostics)。Azure 行動服務提供了 SLA 99.9 的服務水準,並且透過內建的監控機制來確保您服務的穩定。如果是付費用戶,我們更會嚴密監控 HTTP 流量及 SQL 的連結,一旦有問題時便會與您聯絡。除此之外,我們也提供了許多自助監控的機制,像是服務端點監控以及警示功能。
    • 自動更新。我們平均每週都會更新或修補錯誤我們的伺服器平台,而更新的過程不會讓您停止服務或是需要重新部署應用程式。當然,我們會確保更新後的相容性,所有的更新都會向後相容(backward-compatible)。
    • 自動部署雲端服務。當您建立一個 Azure 行動服務時,我們也會自動設定 SQL 資料庫以及通知中樞(notification hub, 為了做推播通知),並且正確地連結好。同樣地,您也可以在管理後台上輕易地設定好與既有機房的連結,達到混合雲的使用情境。Azure 服務提供您公有雲的方便之外,也提供了與既有機房連結的彈性。

    優質且多功能的行動後端平台

    當您開時使用 Azure 行動服務打造應用程式時,您會發現 Azure 行動服務提供了許多有用的功能,這些功能可以為您省下好幾個禮拜的開發時間。

    • 統包的身份驗證方案。許多行動裝置應用程式都會有身份驗證的使用情境,Azure 行動服務已做好像是 Microsoft Account, Facebook, Twitter, Google 以及企業用的 AAD 身份驗證機制,您只需要透過 Azure 行動服務的 SDK/API 呼叫就能完成身份驗證的工作,而不必真的成為 OAuth 專家。詳情可以參考這份教學文件
    • 可延展的推播通知。有一些行動裝置應用程式有使用推播通知的情境,Azure 行動服務已經做好 Windows, iOS, Android 以及 Kindle 的推播機制,您可以只透過一套 Azure 行動服務的 API 便能完成全平台的推播通知機制,當然您也可以完全客製化推播通知的內容,這份文件可以讓您瞭解如何使用 Azure 行動服務的推播通知功能。
    • 同步離線資料。許多用戶希望在行動裝置離線時也能繼續使用,而 Azure 行動服務的 SDK 也提供了類似 SQLite 的離線資料庫機制,待裝置再度連上線後進行同步。詳情可參考這份文件
    • 即時。推播通知是一個與客戶接觸的好工具,但這使得您必須提供可延展且低延遲的網路環境,Azure 行動服務支援以 WebSocket, SignalR 為基礎的即時雙向通訊機制,使您的應用程式能更即時地傳送或接收訊息。而這一切都建構在 Azure 上可無縫延展的基礎架構上,同時也可以輕易地做身份驗證。更多的訊息請參考這篇文章

    與企業系統結合

    在企業系統的開發上,.NET 是很常見的開發平台,所以在 Azure 行動服務支援 .NET 程式語言後就有更多與企業系統結合的機會,您可以參考這一頁的資訊,看到更多的展示。

    • Active Directory 整合。在企業應用中,常會使用 Active Directory 來做身份驗證的機制,Azure 行動服務支援 AD 的登入機制後,也可以存取原本用 AD 做身份驗證的 SharePoint 以及 Office 365,更適合做企業的行動應用程式開發。更多 AD 整合的資訊請參考這份教學文件,而這部影片說明了如何設定 on-behalf-of 的機制。
    • 與既有機房連結。有時候企業的系統或資料庫並沒有曝露在 Internet 的環境下,Azure 行動服務依然支援設定與既有機房連結的機制,創造出「混合連結」的架構。可參考這部影片以及這份教學文件來進行設定。
    • Xamarin SDK。許多企業會選擇使用 Xamarin 的技術來開發多平台的行動裝置應用程式,Azure 行動服務也提供了 Xamarin SDK 讓以 Xamarin 開發應用程式的開發人員也能輕易使用 Azure 行動服務的功能。
    • 加速器。Azure 行動服務團隊針對特定產業的應用開發了一些範例,以加速特定產業的行動應用開發。這些加速器可在此下載

    與 Visual Studio 整合

    除了上述的功能之外,與 Visual Studio 開發工具的整合也是相當重要的,除了可以直接開發、偵錯及發行之外,您也可以在 Visual Studio 中產生像是表格控制器、自訂控制器或是排程工作等程式範本。

    同時我們也整合了遠端偵錯的功能,您只要在伺服器總管(Server Explorer)上連結到對應的 Azure 行動服務,按右鍵選擇「連結偵錯工具(Attach Debugger)」,這樣就可以直接在 Visual Studio 中進行偵錯已發行至 Azure 行動服務的程式碼(要是 Debug 編譯)。

    另一個很棒的功能是,您可以在伺服器總管(Server Explorer)上使用「檢視記錄(View Logs)」的功能看到 Azure 行動服務上的所有 log,也包含錯誤訊息堆疊等。

    我們衷心地希望這些新功能會吸引您在下一個專案來試用 Azure 行動服務。如果您有任何意見或是建議,歡迎透過 Twitter 連絡 @theYavor

  • 我們宣佈與 Google 及 Docker 合作以在 Microsoft Azure 上支援新的開源專案

    原文發表於 Announcing Collaboration with Google and Docker to Support New Open Source Projects on Microsoft Azure

    在上個月,我們宣佈支援部署 Docker 上 Azure 虛擬機器上,並且應用我們的技術,讓客戶能夠盡快地使用 Docker 的威力。為了持續為我們的客戶提供更好的支援,我們宣佈將與 Google 及 Docker 合作,預計將在 Microsoft Azure 上支援 Kubernetes 及 libswarm 這兩個開源專案。

    Kubernetes 這個專案發表於今年六月份,它是一種「宣告式容器管理解決方案」,原本是在 Google Compute Engine 上管理 Docker 的工具,在 Microsoft Open Technology 於這個專案的 GitHub 專案上的貢獻後,也讓這項工具支援在 Microsoft Azure 的 Linux 虛擬機器上運作。這讓使用 Microsoft Azure 來建置 Linux 虛擬機器的用戶多了一個管理工具的選項。

    同樣地,MS Open Tech 也開始貢獻 Docker 的命令式管理工具 -- libswarm 專案,Microsoft Azure 也有了原生的支援,能夠在 Azure 虛擬機器上部署 Docker 容器。

    這項宣佈呼應了我們 Microsoft Azure 一貫對客戶的承諾 -- 回應客戶的需要,並且支援多樣的系統、技術及語言(從 Windows, SQL, .NET 到 Python, Ruby, Node.js, Java, Hadoop, Linux, 以及 Oracle ),讓客戶能夠快速在 Microsoft Azure 提供的公有雲服務上建置及部署應用。同樣我們也持續打造 Microsoft Azure 為開放的平台,如同最近宣佈支援的 Puppet, Chef 及其它開源專案一樣。在 Microsoft,我們一向看重與開發人員、合作夥伴以及客戶在複雜 IT 環境的需求,也期待能從您的需求中瞭解什麼對您是最重要的事。