Quantcast
Channel: 天空的垃圾場
Viewing all 144 articles
Browse latest View live

Azure - Azure File

$
0
0

如前面幾篇文章所述,這次北美TechED,根本就是技術大爆走,ASP.NET一堆新玩意,而Azure也冒出一堆之前完全沒聽過的東西…而今天我們就要來看看小弟很期待的一個Azure新的東東,也申請了很久,才終於申請下來的新玩意。

這是Storage家族的一個新成員,就如同其名一樣,它的功能就是存File !! ( 迷之聲 : Storage Blob和Drive也都是存File阿… ),但這個東西的取向和Blob完全不同,Blob比較偏像定位於Paas層級的應用,可以讓我們使用Cloud Service或是Web Site時,有另外一個快速讓應用程式存放檔案的地方…

而Drive,在以前,就通常都是用在Iaas層級,讓我們的VM,多一顆硬碟…

那Azure File呢!?…基本上Azure File出現後,幾乎就是在打Drive的臉了…( Orz… ),Azure File簡單的說,就是支援SMB 2.1協定的檔案存放區;是低,發現了嗎!?,也就是說,我們可以輕易地將VM透過網路芳鄰來連線Azure File (抖抖),而未來,相信支援SMB 3.0後,我們就可以輕鬆的遠端增加硬碟了… ( 嗯,感覺就像昂貴的OneDrive… )

而Azure File的出現,也提供了我好友之前問我的一個問題,"我要怎樣讓Azure多台的VM的檔案Sync與備份"…

是的,以前Drive沒辦法做到這點,因為Drive同時間,只能掛在一台VM下;而Blob又要經過軟體的處理,也很麻煩,而現在Azure File就可以讓多個VM掛上他拉!!!! ( 讚 )

當然,現階段Azure File 畢竟是SMB 2.1,而且還是Preview,所以可能有些應用程式,也沒辦法裝在Azure File上,還是必須透過Drive;但未來如果出了SMB 3.0,後勢可看好阿!!!

最後,關於Azure File,如果大家想要深入了解,可以參考小朱前輩的這篇文章,而如果想看小弟喇賽文XDD,那也可以繼續讀下去啦~~

要使用Azure File,不意外,他當然就是被歸類在儲存體裡面,所以我們要建立一個新的…而畢竟現在是Preview,所以之前建立的儲存體,小弟看了一下,是沒有包含Azure File的。

image

完成後,就可以看到檔案了…

image

是的,這樣就建立完成了喔!!

接下來,我們就要用指令的方式,來建立一個準備要存放檔案的地方,而這邊,畢竟是Preview…所以官方這邊也只提供了兩種方式來建立,一個是使用PowerShell,一個是Api…基本上,並不是每個人都會無聊去裝Visual Studio,所以我們這邊還是使用PowerShell來進行建立;而相信以後正式推出後,會更加方便。

首先要先下載這個官方提供的檔案,下載完後,先不要急著解壓縮,我們要先解除封鎖。

image

完成之後,我們再解壓縮,小弟是直接解壓縮到C目錄下。

然後打開PowerShell並輸入以下指令,如下圖,我們要把官方準備好的module載入到PowerShell裡面去。

import-module .\AzureStorageFile.psd1

image

完成之後,接下來輸入以下指令 ( 以下是兩行喔… ),其中share name是名稱,而account name則是這個Azure Storage的名稱,而同樣的Azure Storage有key,就是填入到account key了…可以參考下圖。

$ctx=New-AzureStorageContext <account name> <account key>
$s = New-AzureStorageShare <share name> -Context $ctx

如下,這樣就完成了設定。

image

接下來,我們要使用Azure的VM進行連線,但不要從Azure管理介面下載連線檔案,我們使用Windows內建的遠端桌面,並且設定如下;透過此方法,我們就可以將Local的磁碟機map到vm上去,到時候要複製檔案也比較方便。

image

連線進去後,我們要讓我們的vm去map Azure File。

image

這邊要輸入網址,其中storagename就是Azure Storage的名稱,而sharename則是剛剛建立時取的名稱;另外Connect using different credentials記得打勾喔…因為我們要使用Azure Storage的驗證,按下確定之後,要輸入帳號,帳號就是Azure Storage的名稱,而PW則是Azure Storage的金鑰。

image

完成之後,除了Azure File外,我們也把Local給掛上去了,這樣要處理檔案就更加方便了。

image

參考文章


Visual Studio - Visual Studio 14 CTP 1 隨便玩

$
0
0

今天早上一上班,就看到Eric哥在FB Po的訊息,原來是Visual Studio 14 CTP 1已經公布了!! ( 這裡的14不是代表2014…是代表版號… ),所以當下,就立刻去Azure開了一下VM,並且下載,裝起來…

警告 : 這是CTP 1版本,所以未來改變的幅度還是有非常大的可能,其次,官方也提出,這還有許多已知的問題,就算人品再好的勇者…也不要拿去正式環境搞自己=V=。

下載完後,依照慣例,就截圖幾張安裝畫面吧,也當作是留個紀念與紀錄…

image

Win App 和Win Phone不是小弟的專長,就直接省略XDD ( 預設也沒勾選 )

image

然後就進行很久的安裝,可能是公司網路問題,或是太多人下載XDDD,其實裝的滿慢的…

image

到這邊就完成了…

image

同2013一樣,可以登入進去,但小弟心臟比較小顆,就先不登入了…抖抖…

image

然後選擇佈景與環境,小弟當然是選擇黑暗的色調…

image

結果進去不是黑色的…這算是一個Bug嗎XDD,不過CTP 1嘛,不要要求太多了…

image

自己改成黑色後,就來建立一下ASP.NET MVC的專案吧,這次的VS 14 已經把ASP.NET vNext放上去了 ( 也就是MVC 6 )

image

可以從左邊看到新的專案結構…其實也不能講新的專案結構…反正就是原本的csproj消失了…連web.config也消失了… ( 畢竟為了和iis脫鉤… )

image

取而代之的是kproj和project.json、config.json,這個未來文章再來談,但是sln檔沒改變就是了…

image

如果Run起來,在bin的目錄下會多一個AspNetLoader.dll。

image

Bin的Debug目錄也沒以前一堆東西了。

image

因為這次Visual Studio 14 使用了新的.NET Compiler Platform 叫做"Roslyn" ( 羅斯林= =? )。

另外,IDE上也稍微有一些好玩的東西… ( 但其實也不稀奇就是了… ),如下圖,當那行錯誤的時候,停在那行的時候,會出現一個飛利浦(電燈泡),他會給我們一些建議…而比較好的地方是,我們可以看到產生後的結果…這點倒是還不錯…

image

重構的話,也是有相同效果~

image

基本上就先玩到這樣,未來有看到新東西,再慢慢補上吧XDDD

參考網址

ASP.NET MVC - ASP.NET MVC 6 初體驗

$
0
0

繼上篇之後,這次我們實際來體驗看看MVC 6,這篇原文出處於這裡,但不是完全翻譯,小弟邊實作,邊用自己的話加上註解。

最後,還是要警告,目前版本千萬不要拿來用於正式環境…

首先,我們一樣選擇Web;但這次我們要從空的Web Application開始…

image

完成後…就真的很空…

image

接下來,我們一個一個看…

project.json

它包含了相依性的列表,組件輸出的列表,還有命令的列表,這也是全新的檔案,而裡面的dependencies主要是負責NuGet package或其他項目。而現在空的vNext Web專案的唯一依賴是Helios ( 太陽神…聽起來就很威的感覺XDDD ) 這個NuGet包,他可以使應用程序在IIS中運行。( 未來還會不會出現雅典娜、宙斯、波斯頓、黑帝斯之類的阿= =|| );而當是NuGet的依賴關係時,Visual Studio會非同步異步的恢復任何遺失的項目,並且載入;而我們仔細看右邊,會發現現在有階層的關係了,這也會讓我們對於依賴的項目,更加得清楚,並且好管理。

image

另外,我們可以透過更改設定,並將目標框架設置為.NET Core Framework 4.5;這時候,可以看到右邊也會迅速地去做切換。另外,.Net Core Framework 為雲端優化版本。

image

此外,project.json還可以包含命令,例如下圖,我們可以將ASP.NET slef host,而不需要iis;此時,我們就可以用commands來指定port等等…

image

以前我們加入NuGet是可以用滑鼠點的,現階段應該是因為CTP的關係,所以只能用IntelliSense來選NuGet套件…但是IntelliSense目前的範圍只有預設的NuGet來源、Package目錄、如果打angularjs,基本上目前是找不到的… ( 但如果全部打正確,還是可以下載 ),所以目前還是要自己去查套件名稱…

而套件名稱打完後,冒號後面可以選擇版本, 可以指地明確的版本(例如,"0.1-α – build - 1268”),或是用一個空字串(例如,“”)來表示最新,也可以使用通用符來指定(例如,“0.1-α-build-*”);但目前為止,只有如下圖的版號,才能正常運作。

image

而基本上你刪除project.json依賴關係後,Visual Studio不會刪除Package目錄下的東西,但也還好,畢竟這個目錄下不會包含在source controller裡面。

Startup.cs

其實從MVC 5開始,就已經出現了這個Class了,而MVC 6正式啟用這個類別,而原本的Global.asax也算是進入歷史了吧…

默認情況下,ASP.NET MVC啟動後,會先找到Startup這個Class,而這個Class預設會有一個Configure這個方法,而這個方法會傳入IBuilder這個型別的東東;而這個方法的用途,就是讓我們可以去控制HTTP pipeline。

image

這邊我們使用AddMvc來注入,並且使用UseMvc方法來設定MVC的預設值, 例如路由。

image

接下來,我們要來新增Controller 和 View

新增controller和view

首先,我們要先建立下面兩個目錄,基本上,還好這個規則沒變XDD

image

然後就和以前差不多,只是現在IDE有些功能還沒那麼簡潔迅速就是了…要多一點步驟來建立;我們這邊加上Controller Class;基本上這和以前MVC一樣,小弟就不深入多說了。

image

打開Controller可以發現,原本是ActionResult,現在變成IActionResult了,變成interface了,這是件非常好的事情阿!!!

image

增加View…

image

別忘了,View要放在和Controller同名的目錄下喔!~

image

這邊,我們直接輸出時間。

image

然後run起來後,就可以看到如下圖了;因為Server為UTC時間…所以台灣時間應該要加上8小時喔~~

image

以上是初步的初體驗,後面還有更多東西喔!!我們準備進入下一篇~~

後記

順便補上錯誤的新畫面XDDD

image

以後不是白底黃字了~~

參考資料

ASP.NET MVC - ASP.NET MVC 6 初體驗 第二回 參考其他專案

$
0
0

前一篇我們使用Visual Studio “14” 進行了MVC 6的初體驗,接下來,我們將進行第二回,在方案下,新增另外一個專案來體驗看看。

首先,我們要加入一個新的專案。

image

這個專案類型是ASP.NET vNext Class Library。

image

然後我們隨便寫一個新的方法。

image

回到Controller後,我們要使用這個Class1是找不到的,因為還沒有參考進來。

image

而這邊才是這篇的重點,很簡單;基本上,以前可以透過參考的方式來增加其他專案,但現在要在project.json這邊去添加了;當然,相信未來官方會提供UI介面,但如果是目前,則必須用這種方式來添加。

image

完成的話,就如同之下。

image

然後我們可以看一下參考後的比較,一個是Project,一個是Package

imageimage

這時候我們就可以使用電燈泡功能…來加入Namespace。

image

然後我們調整一下Controller…

image

還有view… 基本上這些都是基本中的基本,小弟就不多談了…

image

然後出來結果~~

image

就這樣,一點小小的紀錄~~

ASP.NET MVC - ASP.NET MVC vNext ( MVC 6 ) KVM初體驗

$
0
0

這個月根本就是大爆炸,除了公司的案子在本月要交付,所以公司事情大爆炸外;其次就是北美TechED 2014的技術大爆炸…

而這次TechED 2014 非常出乎意料之外,原本以為現在MS因為跑Scrum,所以有甚麼新的東西都會先釋出於Blog…,結果這次沒想到,TechED一口氣釋出了一堆新的技術…尤其是ASP.NET MVC vNext ( 也就是MVC的下一版…,通常下一版都通稱為vNext,所以這邊指的是MVC 6的版本 ),根本是核心大翻修…( 不過對使用者來說,還是有兼容舊版就是了,不用過於擔心~ ),至於翻修了啥東西,有興趣的可以參考資訊界的神人前輩,小朱前輩,第一手已經準備好了很多優良的文章,而今天,小弟我這邊只是簡單的紀錄一下,KVM的初體驗過程(羞),未來有機會當看到那些部分,再逐一補齊~~

另外,請注意,目前這個版本是新到不能再新Alpha版本,請不要使用於正式環境,可以使用Azure的VM,或是虛擬機來玩這個新玩意~。

好,廢話先到這邊,我們就快速地來建立一下。

首先,我們可以到以下的github網站,未來ASP.NET的Source全部都會放到github上…( CodePlex表示…. )

https://github.com/aspnet/Home

這個網站主要是放vNext簡單的範本,我們到時候可以從這範本來玩玩看。

如果我們有裝GitHub的Tools,我們就可以直接使用Clone Desktop將這個Source下載回來,如果沒裝的朋友,就直接Download ZIP吧…那差別在哪邊??..用Tools可以追蹤目前更新的Source狀態=v=..

image_thumb3

另外,如果有要用GitHub Tools,也別忘記要先登入GitHub,那Clone in Desktop才有作用…

我們可以從下圖看到GitHub Tools的功能,可以看到目前的一些更新歷程。

image_thumb6

下載完成之後,我們就要進入到下載好的那個目錄,下 kvmsetup.cmd,他會協助幫我們把一些路徑等等之類的設定,設定好…

image_thumb10

完成之後我們就可以使用以下指令,kvm install 0.1-alpha-build-0421來安裝。

image_thumb13

安裝完成後,我們使用kvm list就可以看到目前我們已經有了這個環境;而未來除了可以讓我們選擇不同的環境外,我們也可以自己準備自己需要的各種不同環境。

image_thumb16

另外,雖然我們準備好環境,但我們還沒有把相關的東西下載下來,所以我們要下kpm restore,下圖因為按下去後,下載太多東西了,所以沒辦法忠實呈現XDDD,只能告訴大家,輸入以下指令後,會如上面依樣,下載很多東西。

image_thumb19

完成之後,因為我們是要啟動的是web,所以要下k web,如果是命令列的應用程式,就是下k run,所以我們可以從下圖看到,下k run的時候,他會和我們說找不到Main這個起始點;因為現在是要run web應用程式…

image_thumb22

完成之後,我們就可以打開瀏覽器,輸入這個範例預設的位置localhost:5001,就可以看到web網頁跑起來了!!!

image_thumb25

那就先到這邊,我們後續再繼續看下去~~~

參考資料

ASP.NET MVC - ASP.NET MVC vNext ( MVC 6) 發佈與self host

$
0
0

此回介紹ASP.NET MVC的一個重大功能,self host與publish。

從MVC 5開始,ASP.NET MVC就開始計畫與實作傳說中的OWIN,OWIN的全名就是Open Web Interface for .Net;我們思索一下,從以前開始,ASP.NET都必須要掛載在IIS之上,而ASP.NET也從以前至今,都必須相依於system.web等等的Lib;換言之,沒有IIS,ASP.NET也就等於死翹翹…

而這個混亂的時代下,就出現了OWIN這種東西,將原本的相依性,透過定義好一個一個的介面,來達到未來抽換的一個目的。

好啦,講白一點,就是可以不用IIS就可以讓ASP.NET運作啦!!而所謂的self host,就是用命令模式的方式,讓程式在那邊監聽瀏覽器等的請求,而不用IIS啦!!

而到了新版的ASP.NET MVC這功能就更加強大了,所以第四回合,就來體驗一下吧!!

首先,我們要先透過NuGet載入一個監聽器,也就是底下的Microsoft.AspNet.Server.WebListener這個字串,當然我們要在project.json底下去新增… ( UI介面的趕快出來吧… );完成之後,我們再加上下面這段Commands,這個Commands可以定義要用哪個port監聽等等之類的命令列參數。

image

全部的json config如下,有需要的人就直接copy吧~

{
    "dependencies": {
        "Helios": "0.1-alpha-*",
        "Microsoft.AspNet.Mvc": "0.1-alpha-*",
        "Microsoft.AspNet.Server.WebListener": "0.1-alpha-*"
    },
    "commands": { /* Change the port number when you are self hosting this application */ 
        "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
    },
    "configurations": {
        "net45": {},
        "k10": { }
    }
}

完成後,我們就可以在命令列下使用k web這個指令來將常駐run起來 ( 可以參考KVM那篇 )。

( PS 因為我們Commands底下是"web" : xxxxx,所以用k web,如果是其他的字,例如"web8080" : xxx 那就要輸入k web8080,換言之,我們可以定義多個,來達到不同的目的。 )

好self host KVM那篇已經試驗過了,接下來我們看一下佈署。

基本上佈署的設定和之前沒啥兩樣。

image

但我們這邊準備要把WEB丟到USB ( 假設要丟到USB…實際上我是把他傳到另外一台電腦上面去RUN ),所以這邊選擇要佈署到File System。

image

就…打一下Customer Profile名稱…

image

然後選擇目錄。

image

完成後,其實可以發現,現在多了一個web.cmd這個檔案了;另外,大家可能會覺得…為啥有一堆MVC的Code…那是因為我們上一篇有把MVC的Source Code加入進來。

當然,這個這樣是不安全的,但大家也不用擔心啦,離整個發表,還有一年的時間(2015年),我們先體驗過程就好了~~

image

這時候,我們執行web.cmd,就可以得到如下圖的結果。

image

另外,如果copy到另外一台電腦,也不用做甚麼事情,就可以順利run了 ( 我的筆電上是沒有裝KVM的,但也是一樣可以跑得很開心~~ )

image

當然,能RUN起來的秘密,其實就是他把所有需要的東西,全部都放到Package裡面去了。( 當然,要run的電腦上還是要裝.Net Framework啦…不然空有dll,沒有環境可以Run,當然還是不行;而這次透過這方式,可以讓Server端不用安裝一堆Package,而變成動態下載,也因此,我們不用再去找相對應的版本對應包,更加的方便了!!

image

大致上就這樣!!以後網頁也可以帶著走了喔!!

ASP.NET MVC - ASP.NET MVC vNext ( MVC 6 ) Core CLR and .NET Core Framework

$
0
0

開始之前,還是要免責聲明一下…

這部分目前官方還是沒有提供很多詳細的敘述,所以多半是透過官方Blog的很多篇文章彙整起來的;其次,目前這都也還在Preview,未來依舊有可能會去改變和變化,所以這部份,大家參考看看就好。

Core CLR是這次ASP.NET vNext很重要的核心之一,官方這部分沒有講得很清楚,但基本上Core CLR就是一個精簡的CLR;拿掉了繪圖等等的一些功能,讓Server和Cloud有更高的效能,更低的記憶體使用,與高透通性。

另外,在講Core CLR的過程中,其實我覺得要和新的.NET Core Framework一起講;在官方的文章裡面,我看到的,通常Core CLR和.NET Core Framework是混再一起講;雖然目的上是一樣的 ( 也因為目的相同,所以我看到的文章都是混再一起說這件事情 ) ,但小弟實驗了一下,我覺得事有一些差異的,當然,這部份有沒有可能是小弟我自己腦補,未來也是要等官方證明。

.NET Core Framework

如下圖所示,我們可以從專案這邊選擇是要原本的.NET Framework或是.NET Core Framework;.NET Framework顧名思義就是一大堆的Lib,提供給我們方便的用途,但實際上,我們開發Web應用程式的時候,可能不需要使用到那麼多的Lib;所以才會有精簡版本的.NET Core Framework;另外一個用意,之前我們使用.NET Framework,多半需要安裝完整的套件,例如ASP.NET MVC,就要安裝ASP.NET MVC的安裝包,才能去做執行;也就是說,以前我們使用.NET Framework的時候,專案參考到的是GAC。

image

而.NET Core Framework則不會再去參考GAC,他的另外一個變革就是,要用多少載多少;所以就如下圖的Package包 ( 未來都會自動打包,這牽涉到Kruntime的一些東西,我們後面會再看到,這邊我們先關注 Framework ),我們可以看到.NET Core Framework這個包裡面,其實包了一堆原本會在GAC底下的東西…;的確,這樣的Package會比.NET Framework包起來大得多,但實際上,透過這種方式,再也不用和GAC相依、一個Server則可以run不同的dll版本、甚至Server上不用再裝類似ASP.NET MVC這種套件包,只要整個複製過去,就可以順利執行。

另外,這邊會打包成KRE-svrc50-x86 ( svrc的c是代表core的意思 )

image

這邊下圖是.NET Framework的Package,我們可以看到,完全看不到system.dll的蹤影,因為sysytem.dll會去吃GAC;當然,這也比較小包,但是就會和系統相依。

這邊則是KRE-svr50-x86。

image

除此之外,我們看一下Visual Studio裡面的應用,也可以看到.NET Framework完整版,可以找到system.managment這個namespace。

image_thumb[2]

而.NET Core Framework 則找不到…

image_thumb[5]

另外一個例子,.NET Core Framework找不到System.xml的時候。

image_thumb[8]

可以透過NuGet取得XML包。

image_thumb[10]

這時候自然而然就找到了。

image_thumb[13]

從上面那個例子,我們也可以看到,其實.NET Core Framework就已經把一個一個常用的Lib獨立出來,有需要的情況下再去載入~

但是,請注意,上面那個例子,你就不會找到system.management的package包,我不確定這部份未來官方會再補上去,又或是這牽涉到Core CLR…

但不管如何,我們先來談一下 Core CLR

Core CLR

CLR是.NET最終運行的地方,基本上完整的CLR,自然提供了完整的功能,而Core CLR則拿掉了一些用不太到的功能,來達到精簡與加快速度的目的。

而就如前面一開始說的,從目前的文章看到,幾乎都是會把.NET Core Framework與Core CLR一起談,但就小弟的觀點來看,兩件算是同一件事也不算是同一件事情;.NET Core Framework、.NET Framework指的是可以用哪一種的.NET Framework產生出大包、小包的Package包…而Core CLR和DesktopCLR指的是整個CLR能支援.NET Framework程度的完整性…

所以剛剛找不到system.management不知道算不算是Core CLR不支援這個Lib,但可以確定的是,從官方的影片可以看到,目前Core CLR不支援System.Draw;所以反過來說,Core CLR拿掉了很多用不到的地方…

所以,.NET Core Framework必須搭配Core CLR…而.NET Framework則要搭配Desktop CLR。

繼續往下看,下面的圖是官方那邊出來的,顯示了“雲優化”的架構(不考慮跨平台的特性)

另外,也要注意一下,目前官方有指出以下這段話。

Also, current plug of the Core-CLR on top of IIS is “Helios”, but there will be an IIS Native Module in the future, too.

目前在IIS之上必須要有Helio (太陽神) 這個套件,這個主要是配合OWIN而產生出來的一層;未來這部份官方也會實作IIS Native Module。

image

另外一張官方的架構圖,我們可以看到中間會有Loader。

是的,這是前面沒提到的一個東西,未來整個ASP.NET vNex runtime,除了CLR外,還會在CLR外面包一個Kruntime;所以前面那邊大家才會看到自動打包成KRE-xxx這種Package包,用途就是在執行的時候,才去處理與載入。

所以我們其實可以從下面這簡單的架構圖看到,在KRuntime的時候來解決要讀取哪個CLR ( 其實上面也會有Loader,只是上面那張圖專注於雲優化這件事情 )。

image

最後,我再補上兩張,使用.NET Framework 和 .NET Core Framework佈署到Azure的情況。

我們可以看到使用.NET Framework時,是run DesktopCLR。

image

如果是使用.NET Core Framework 則會使用CoreCLR。

image

大致上就這樣了,如有錯誤,歡迎告知小弟… (但請鞭小力一點QQ )

下一篇,來看看Kruntime。

參考資料

ASP.NET MVC - ASP.NET MVC vNext ( MVC 6 ) 使用Source Code

$
0
0

經過前面兩回的亂玩XDD,而這回我們要體驗的東西,則是之前很難處理的"使用Source Code”…( 其實目前也沒好到哪去,但至少方便多了… )

很難處理!?是的,雖然MVC 5之前的Source Code都公開了,但要拿Source Code進行偵錯老實說真的還是很麻煩…而這一次的其中一個變革,除了ASP.NET的相關專案都放到Github公開Source Code外,MVC 6本身更提供了開啟關閉使用Source Code的偵錯功能!!

當然,前提之下,我們還是要先下載Source Code…這邊我們進入ASP.NET MVC的Github網站,另外,下圖的左邊( 小弟我忘記紅色框框了QQ.. )有一個branch : dev ,這代表的是分支的版本,也要選到對應的版本;然後小弟是使用Clone in Desktop來下載,但使用這個必須裝Github for Windows這套軟體。 ( 可以參考小弟的舊文 ) 如果看完文章,覺得麻煩,也可以直接Download ZIP。

image

當按下Clone in Desktop後,IE會呼叫Github for windows來處理。

image

下載完成後,我們可以從下圖的位置,得到Source Code放在哪邊..

image

以下是MVC的Source。

image

接下來,我們要在方案的目錄下,增加NuGet.Config檔案,這個檔案的目的,只要是設定現在MVC的NuGet位置;為什麼要這樣做呢??其實很簡單…因為目前官方的NuGet路徑,主要還是放比較穩定的版本,而現在如飛一樣的速度版本則是放在myget上面,而我們用github抓下來的一定是最新版本,但是這最新版本會需要很多同樣是最新版本的mvc lib,所以我們要設定myget路徑,讓NuGet自動透過myget路徑去取得最新的mvc lib。

image

主要是下面這一行,myget是第三方幫忙託管NuGet Package的雲端服務…目前MS把MVC開發中的Lib放在myget上。

image

完整的xml如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/" />
    <add key="NuGet.org" value="https://nuget.org/api/v2/" />
  </packageSources>
  <packageSourceCredentials>
    <AspNetVNext>
      <add key="Username" value="aspnetreadonly" />
      <add key="ClearTextPassword" value="4d8a2d9c-7b80-4162-9978-47e918c9658c" />
    </AspNetVNext>
  </packageSourceCredentials>
</configuration>

接下來,我們要再方案的地方,增加一個global的資料夾。

image

並且在此資料夾加入一個global.json的檔案

image

如下圖。

image

接下來,我們編寫一下json,如下圖…...使用sources來指定source code的路徑。

image

然後過一陣子後,就會看到檔案載入了…

image

如下圖,我們可以看到,Visual Studio “14”自動的參考到Source Code的專案,而其他沒參考到的就還是package;而且我們可以發現,也自動的下載更新版的package。

imageimage

接下來,我們在ASP.NET MVC的Source Code裡面的ViewResult檔案裡面加入一個輸出Hello World,並且設定中斷點後執行。

執行後就可以發現,中斷點很有效地停在那邊了。

image

而實際輸出,也真的出現Hello World了!!

image

是的,這樣就可以了!!!,很簡單嗎!?,不,一點也不,現階段要使用這功能,會遇到踩不完的雷…理由很簡單…現在Github上面提供的是dev的分支,簡單的說,還沒有規劃出里程碑的分支,而dev的分支則大概幾小時就會有更新,並且出現新的版號…換言之…我們要讓所有MVC有用到的Lib,都吃到相對應的版號,才能讓功能正確的運作…

而這次小弟就遇到不少類似的坑,光是要湊集神之卡所有的版號,就搞掉我一天的時間了… ( 又不是收集七龍珠… )

而且不只MVC要用到的Lib…連KVM的版號也會有關… ( 畢竟這次的底層是用KVM ),除此之外,VS的版本又和KVM有關…所以現階段要成功,還真的要碰點運氣…

但相信未來正式版出來後,這種問題就可以迎刃而解了…

最後,官方這次有提到,會提供這功能的原因有幾個,一方面是提供Source Code給我們偵錯使用,其次,利用此功能,如果我們發現原本官方的Bug,我們也可以先自行改Source Code的方式撐著用… ( 抖抖…完全不想阿- - ),那等官方出新版的時候,再把專案移除,改用Nuget抓下來的package即可…當然,未來怎樣發展,還是要等到明年才知道嚕!!


ASP.NET MVC - ASP.NET MVC vNext ( MVC 6 ) 於MAC上跑ASP.NET MVC (上篇) 安裝Mono

$
0
0

前篇介紹了用USB將編譯好的ASP.NET MVC網站丟到另外一台機器上,就算沒裝K環境,還是可以正常地跑;但是,大家這樣就滿足了嗎?;下一代的ASP.NET MVC vNext可不只是這樣而已,現在也支援了跨平台執行ASP.NET MVC的應用程式;所以小弟我,這次就來試驗一下,如何跨到Apple的MAC OS上!! ( 第一次覺得小弟的Macbook那麼有用… )

但Mac底下沒有CLR阿…那該怎麼辦呢??,沒錯,就是靠Mono啦…所以這篇,就來教大家,如何安裝Mono…

基本上,在Mac底下安裝Mono說難不難,說簡單也不簡單…基本上只要照著以下指令下,通常都可以成功~

警告!! 目前Mono這個版本,也並非正式釋出,所以也會有很多的bug,小弟是為了興趣而嘗鮮,如要用在正式環境,還是建議等推出正式版本,再來裝設。

PREFIX=/usr/local
 
# Ensure you have write permissions to /usr/local
mkdir $PREFIX
sudo chown -R `whoami` $PREFIX
 
# Downlaod and build dependencies
mkdir ~/Build
cd ~/Build
curl -O ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
curl -O ftp://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
curl -O ftp://ftp.gnu.org/gnu/libtool/libtool-2.4.2.tar.gz
 
for i in *.tar.gz; do tar xzvf $i; done
for i in */configure; do (cd `dirname $i`; ./configure --prefix=$PREFIX && make && make install); done
 
PATH=$PREFIX/bin:$PATH
git clone https://github.com/mono/mono.git
cd mono
CC='cc -m32' ./autogen.sh --prefix=$PREFIX --disable-nls --build=i386-apple-darwin11.2.0
make get-monolite-latest
make
make install

好,現在開始,我們一步一步地做。

首先我們先設一下變數,PREFIX=/usr/local,這樣之後就不怕Key錯路徑了,而且未來的mono所包好的dll也會放到這個目錄之下。

接下來,要建立剛剛我們設定的那個路徑的目錄,並且將我們自己設為這個目錄的owner,所以會下這兩個指令;另外要注意,'whoami’記得換成自己的名稱喔 ( 連單引號都不用Key )。

mkdir $PREFIX
sudo chown -R `whoami` $PREFIX
下圖這邊因為我已經建立過usr/local了,所以他提示我,已經存在了。

SNAGHTML3a49bdd

接下來,我們要執行這些指令。

mkdir ~/Build
cd ~/Build
curl -O ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
curl -O ftp://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
curl -O ftp://ftp.gnu.org/gnu/libtool/libtool-2.4.2.tar.gz   
for i in *.tar.gz; do tar xzvf $i; done
這些指令就是在家目錄建立一個Build目錄,並且下載三個要用到的套件;分別是autoconf、automake、libtool,這是因為編譯Mono需要這三個套件。
接下來,就用迴圈,將這三個壓縮檔通通解開。

SNAGHTML3a3a75b

完成後的圖如下;接下來就輸入以下指令編譯與安裝。

( 下圖的部分,指令key進去後沒截到圖,但我們可以從下圖看到,這三個套件都已經解開了 )

for i in */configure; do (cd `dirname $i`; ./configure --prefix=$PREFIX && make && make install); done
( 查資料的過程中有發現,有人這三個套件Build不起來,有人建議是要裝xcode…但小弟的Macbook本身就有裝xcode,所以過程是滿順利的…所以過程中有遇到問題,可以死馬當活馬醫,試試看吧… )

螢幕快照 2014-06-17 下午11.21.48

正確安裝完成後,我們要設定PATH這個變數,然後使用git下載最新版本的mono;並且進入mono目錄,來下指令檢查與編譯前準備。

( 注意,mono的source也要放到剛剛上面下載下來的同一個目錄裡面,也就是Build裡面,不然會出錯 )。

PATH=$PREFIX/bin:$PATH
git clone https://github.com/mono/mono.git
cd mono
CC='cc -m32' ./autogen.sh --prefix=$PREFIX --disable-nls --build=i386-apple-darwin11.2.0

螢幕快照 2014-06-18 上午12.16.38

完成後,我們就可以使用make編譯了,編譯完成後可以再用make install安裝…

但正式開始使用make指令前,要先下make get-monolite-latest來取得最新的mcs compiler,不然會有錯誤make[6]: gmcs: No such file or directory的錯誤。

取得之後,就可以下make,當make跑了超久跑完之後,就可以下make install了。

( 下圖也沒截圖截到…反正就是跑很久就是了… )

螢幕快照 2014-06-18 上午12.22.05

接下來要調整一下預設的路徑位置,我們要去/private/etc/裡面的paths這個檔案去做修改;但因為這個檔案的權限是644 ( 644代表只有root可以讀寫,其他都只能讀,詳細可以去看Linux的權限設定 ),所以小弟先把它改成777,等改完檔案後,再調整回644。

( 指令如下圖,因為這算是基本的Linux指令,小弟就不多談了,請見諒~ )

螢幕快照 2014-06-18 上午12.37.01

這邊小弟是使用vi直接改了…如果不熟vi的朋友,可能會很吃力…看看能不能用ide的編輯器改…基本上,而如果是使用vi編輯的方法,就是進去vi後,按下i,就可以編輯內容,編輯好後,按下:wq,就可以儲存…如果編輯錯了,可以按下:!q來跳出VI,從新再來一次…

而這邊,我們要把/usr/local/bin放到/usr/bin之上,但這邊也要小心,如果原本/usr/bin有放大量的指令,這樣改,未來系統可能會有問題,不過基本上小弟本來就很少在OSX安裝那些東西,所以我是不怎麼怕啦XDDD。

螢幕快照 2014-06-18 上午12.36.25

編輯完成後,就把剛剛那個檔案改回644。

螢幕快照 2014-06-18 上午12.37.01

然後下Mono --version就可以看到mono的版本,一定要3.6.1以上…

螢幕快照 2014-06-18 上午12.38.12

基本上這樣就完成了~~初步就到這邊,後篇則是要改ASP.NET MVC的project.json檔,來達到可以run在OSX上的目的。

參考資料

ASP.NET MVC - ASP.NET MVC vNext ( MVC 6 ) 於MAC上跑ASP.NET MVC (後篇) Kruntime與MVC專案設定

$
0
0

開始前,還是要提醒大家,目前也還有很多問題,小弟測試下來,真的感受到,要用於正式環境還有一段路要走…

後篇與前篇相比起來,因該是簡單的多,基本上就是兩件事情,第一件事情是要建立Kruntime和KVM,第二件事情則是要針對OSX上,MVC的設定。

建立Kruntime與KVM

基本上,要建立Kruntime與KVM只要下以下這個指令就可以了…

curl https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh && kvm upgrade

這個指令基本上做的事情和在Windows下安裝Kruntime和KVM是同樣的…他會做以下的事情。

  • 下載kvm.sh並且儲存在~/.kre/kvm/kvm.sh  
  • 使用kvm upgrade下載最新的KRE Package

完成之後,我們就可以使用kvm list來查看裝了哪些東西…

螢幕快照 2014-06-19 上午1.26.34

基本上,這樣Kruntime環境與KVM就設定完成了。

設定MVC

設定MVC專案有幾個地方需要設定,一個是NuGet.config,另外一個是project.json,最後Startup.cs也是要加上useMvc;另外建議也把一些不需要的東西砍一砍,基本上留下下面這些就夠了。

而比較特別的是Nowin.vNext這個相依的專案,這是國外的高手寫的,就是為了解決OSX上的問題;請注意,當初Scott在Demo的時候,也是有加入Nowin,但實際上,Nuget裡面是找不到Nowin的… ( 未來可能會有… ) 所以現在是由網友熱情自己撰寫一個~~

那大家可能會想,我要去哪找到這個Nowin.vNext這個專案,大家可以到這邊去下載

螢幕快照 2014-06-19 上午1.28.55

NuGet.Config的設定一樣,要加上ASP.NET vNext現在的dev版本下載位置,平常的NuGet只能取得比較穩定的版本,但畢竟現在版本衝得太快(因為在開發中),所以很容易版本不同匹配不起來,所以這邊還是建議使用最新的dev版本。

螢幕快照 2014-06-19 上午1.30.18

以下是NuGet.Config的code

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/" />
    <add key="NuGet.org" value="https://nuget.org/api/v2/" />
  </packageSources>
  <packageSourceCredentials>
    <AspNetVNext>
      <add key="Username" value="aspnetreadonly" />
      <add key="ClearTextPassword" value="4d8a2d9c-7b80-4162-9978-47e918c9658c" />
    </AspNetVNext>
  </packageSourceCredentials>
</configuration>

另外,project.json的設定如下,要改command和加入Nowin.vNext這個相依,所以目錄下,一定要有Nowin.vNext這個專案。

螢幕快照 2014-06-19 上午1.30.23

以下是project.json的code

{
    "dependencies": {
        "Microsoft.AspNet.Mvc": "0.1-alpha-*",
        "Nowin.vNext": ""
    },
    "commands": {
        "web": "Microsoft.AspNet.Hosting --server Nowin.vNext"
    }
}

基本上Startup.cs沒甚麼改變,但現在大家應該還是不習慣vNext,所以也在這邊貼出來,提醒大家一下。

螢幕快照 2014-06-19 上午1.31.51

以下是Startup.cs的Code。

using System;
using Microsoft.AspNet.Builder;
using Microsoft.Framework.DependencyInjection;

namespace WebApplication1
{
    public class Startup
    {
        public void Configure(IBuilder app)
        {
            // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
            app.UseServices(services =>
            {
                services.AddMvc();
            });

             app.Use(async (context, next) => 
             {
                Console.WriteLine(context.Request.Path);

                try
                {
                    await next();
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex);
                }
            });

            app.UseMvc();
        }
    }
}

然後在run之前,要先用kpm restore,在下指令之前,也別忘記,進入到專案的目錄下。

( 是專案,不是方案喔 )

螢幕快照 2014-06-19 上午1.44.51

最後,下k web這個指令,就可以run起來;而難得有OSX表現的機會,我們這次就讓safari來表現一下吧XDD

( 預設的port是8080 )

螢幕快照 2014-06-19 上午1.47.46

這樣就完成嚕,當然現階段這部分也還在開發,相信明年的這個時候,會更加的方便!!

參考資料

VSO - 使用Azure進行Visual Studio Online的付費

$
0
0

最近朋友問的我一個問題…"當Visual Studio Online上的壓力測試和Build使用超過額度了,不能用了怎麼辦!!?為什麼我都找不到付費的地方??"

其實在Visual Studio Online上找不到是很正常的…因為Visual Studio Online的付費是綁定Azure帳號的阿!!!!! ( 可見兩者的關係很好…阿…畢竟之前ScottGu是管整個ASP.NET Team的!! )

所以我們要進行Visual Studio Online的付費,就要有一個Azure帳號,並且進行繫結~

如下圖,就等同我們平常使用Azure一樣,我們新增一個Visual Studio Online服務就可以;但這邊要注意,如果是要連結現有的VSO帳號,那你的Azure帳號要和VSO帳號一樣,也就是說,這個帳號必須是VSO的擁有者,並且也是Azure的Administrator、co-Administrator,不然會找不到喔!!

image

新增完之後,就可以從這個畫面進行調整,而且隨時可以進行使用者人數、組建、附載測試的設定;另外,目前也沒辦法只提供管理VSO資源(如下圖)的管理者,畢竟是針對Azure權限開啟,所以一開後,整個Azure的權限都會開= =…

image

另外,官方有這點特別條文,MSDN每月的可用額度,是不適用於VSO計費的(反正就是要額外收費,而且還要關閉付費限制)

image

最後補充上關於各等級的網址,有需要的朋友可以去網址看看;另外,如果加入進來的帳號,有MSDN的權限,那就不會占掉五人名額喔!

基本上就是這樣,有興趣的也可以去看網站說明。

參考資料

VSO - 使用Azure AD管理Visual Studio Online

$
0
0

記得前一段時間,聽到Visual Studio Online可以整合AD了!!真的是一大新聞,但是後來仔細一看,原來要將VSO整合AD,必須用Azure AD帳號去申請VSO,而已經有VSO的朋友則還沒辦法支援… (抖抖)。

但畢竟雲端變化很快,在這次的更新,MS已經提供支援了!!

所以,除了前面一篇講到了在Azure上付費外,我們還可以利用Azure AD來進行Visual Studio Online的控管!! 另外,如果是Local的AD,那也有同步機制可以同步到Azure AD喔!!

注意! 根據官方文件,繫結的時間需要2HR,所以請利用無人的時間,執行下列動作!

首先,我們要有Azure的最高權限管理者,才能進行這個動作;要怎樣看有無最高權限管理者,可以從Azure的設定畫面,訂用帳戶這邊看到…如果是最高權限管理者,那應該會顯示白色的字,如果不是,則是灰色的… ( 可以使用Azure的所有服務之人,並不代表是有最高權限的管理者,但最高權限管理者,一定可以使用Azure全部服務;基本上最高權限帳號,就是當初註冊的那個帳號。 )

image

另外,Azure AD的部分,這個帳號也必須為全域管理員…

image

如下圖,就不是全域管理員;如果不是全域管理員,那要使用全域管理員的帳號,登入Azure 並去AD裡面去修改…另外,如果當初申請Azure,用的是Microsoft Account,那也別忘記把Microsoft Account加進去Azure AD裡面。

image

接下來,進入VSO的管理頁面。

image

然後我們按下設定。

image

這邊我們就可以利用連接的方式,將現有AD與現有VSO進行連接…

image

這邊我們要選擇我們的Azure AD目錄;另外這邊的提示是告訴我們,如果現有的VSO使用者,要繼續使用,那必須要加入到Azure AD目錄下,不然會無法存取!!

而這邊,按下勾勾後,就可以完成連線了~~

image

如下圖,假設我們設定完成後,在VSO新增一個使用者,VSO也會提醒我們…

image

基本上這樣就可以了,但有個小細節提供給大家參考。

首先,因為當時申請VSO的時候,大家幾乎都是用Microsoft Account,但現在整合的時候,如果希望完全使用組織AD,那大家可以先去VSO,把VSO的擁有者換成組織的AD帳號,然後再進行上面那些步驟,這樣就可以了!!

參考資料

GitHub - GitHub Page for User

$
0
0

今天要來撰寫的筆記是GitHub Page,其實GitHub Page以前就稍微有看過,但畢竟在實務面上,小弟我也沒甚麼地方可以用的到,所以就沒真的開起來玩玩看,而最近,因為有些需求,所以就想說,邊設定,邊做一個簡單的筆記~

那GitHub Page是啥??,其實Google一下,應該就可以找到超多的文章;小弟這邊就不詳細的說明了;簡單的說,就是GitHub使用Ruby所撰寫的引擎,來提供靜態網頁服務;簡單的說,就是可以來當作Blog、介紹自己、或是介紹放在上面的Project!!在MS的圈子裡大家可能比較少聽到,因為MS的圈子哩,國內有鼎鼎大名的點部落,其次的一般人可能會選擇使用Wordpress或是Blogger,但其實GitHub Page在Open Source的朋友圈裏面,超多人用!!更號稱是Developer ( Hacker ) 專用的Blog系統。

或許會有人想問說,那有甚麼差??

首先,他是靜態的,所以速度非常快,基本上我們撰寫技術文章,也用不到啥動態產生HTML的Server端語言…,此外,透過底層的Jekyll引擎,更可以將Markdown格式的文章轉成HTML ( MD格式撰寫起來真的會很快樂… ),其次也支援版控、隨便一個編輯器就可以撰寫… ( 你可以使用Visual Studio寫Blog = =|| )…等等等的眾多優點,所以目前GitHub Page非常的夯!!

( 不過小弟暫時也不會搬Blog…因為太累了= =|| )

所以講到這,心動了嗎??…不管心不心動,至少身為愛好技術的人,反正就先體驗看看吧!!

首先GitHub Page 基本上有分成兩大類,一個是for User,簡單的說,你申請的這個帳號,就只會有一個GitHub Page for User的網站;而另一塊是GitHub Page for Project,也就是說,你的這個帳號,有幾個Repository,就可以有幾個Project用的網站;換言之,User通常是企業的品牌網站,而Project則像是企業底下的產品頁面;所以小弟我這邊會分兩篇來敘述,這篇是講User篇。

當然,在開始前,我們要先有GitHub帳號;登入之後,如下圖,我們要建立一個新的Repository。

image

而這個Repository Name是這個GitHub的UserName 加上 github.io,所以如下圖,小弟使用的帳號是study4,所以Repository Name就必須為study4.github.io。

image

完成之後,我們要把檔案發佈上去,但這之前,我們要先在Local建立一個Repository;然後寫完之後在publish上去;而小弟這邊選用的是GitHub的Windows UI圖形工具來處理;如果你想直接下Git指令也是可以啦…那可以直接參考最後的參考連結。

( 這邊是基本的Git原理,如果真的不懂,又有興趣,可以參考小弟之前的文章,這邊就不重複敘述了 )

image

按下上圖的按鈕後,就會打開工具,下圖是已經處理完,並且在Local已經建立完成了。

image

接下來,我們在下載的路徑下,加入html。

image

並且簽入,簽入後,透過工具發佈出去。

image

通常發佈出去後,需要等一段時間,才可以在username.github.io這個網址看結果,如下圖,我們就可以到study4.github.io看到結果,基本上這樣就完成了!!

image

下一篇,會講到關於Project的GitHub Page喔!!

參考資料

GitHub - GitHub Page for Project

$
0
0

接下來的這篇,我們會談到,給Project用的GitHub Page!!

如要給Project用,會有兩種設定方式,一個是直接開一個分支,一個則是讓GitHub網站自動幫我們建立,如果想手動開分支,自己設定樣板的朋友們,就請參考參考連結的地方吧;小弟這邊是直接使用官網來設定 ( 因為小弟比較懶= =+ )

首先,我們要先開一個Repository,如下圖,已經開好了一個Lottery ( 傳說中的亂數抽獎系統!! ),假設這個亂數抽獎系統很偉大,你想幫他建立一個專門的Project頁面,讓使用者了解他很偉大,那就可以做下面這些步驟…

首先選擇Settings。

image

然後往下來,就可以看到如下圖的選項。

image

在這邊,會使用Makedown的撰寫方式來撰寫Project的首頁,基本上Makedown很容易了解,大家可以去Google查一下就知道了喔!!

image

接下來選擇樣板。

image

然後就完成了;你會發現,如下圖,基本上它就是幫忙產生一個gh-pages的分支,所以我們自己建立這個分支,並且把檔案傳上去,也是可以達到目的的。

image

同樣的,要等待一段時間後,網站就會開始運作,而他的網址格式會是username.github.io/repository的格式,所以如下圖,我的格式就會是study4.github.io/Lottery。

image

就是這樣的簡單!!

參考資料

GitHub - 在GitHub Page使用Markdowm格式編寫網站

$
0
0

前面我們使用了GitHub Page for User來建立個人網站,但基本上還是只能使用HTML來撰寫,沒辦法用Markdown格式;但前面明明說GitHub Page支援Makedown阿!,而且不是還說GitHub背後有Jekyll引擎會將Makedown轉成HTML,那為啥還是不行呢??

那是因為要設定Jekll的設定檔,並且放在特定的目錄下,才會有效果;但是,該怎麼設定呢??其實是有很多規則的,所以網路上就有好心的神人,將這些東西準備好,我們只要下載後就能使用,所以,這篇文章,就會來提一下由神人plusjade提供的。

首先我們可以從GitHub找到神人提供的jekyll-bootstrap,來當作網站的範本。他的網址在這邊,從他的網址可以進入到GitHub後下載。

如下圖,其實我們也可以用指令或是GitHub for Windows進行下載,但這邊小弟就直接用Download ZIP檔吧,比較快。

image

下載完後,解開,把所有的東西丟到我們Local的專案下。

image

然後用GitHub for Windows工具Commit後,並且Sync到GitHub。

image

之後登入網頁,就可以看到,已經變成jekll-bootstrap的樣板了!!

image

這時候,我們回到Local的目錄下,並進入_posts目錄,就可以新增一個MD的檔案;這邊,_posts是Jekll預設發佈的目錄,所以我們實際上也可以在裡面建立目錄結構,例如底下的core-samples,就會建立出study4.github.io/core-samples的結構;而底下建立的檔名則是固定的,也就是必須搭配日期和Title的格式;所以下面的2014-07-31-hello-world.md到時候會產生成study4.github.io/2014/07/31/hello-world/ ( 當然,有興趣的朋友,可以自行去修改config,來調整url格式 )

image

另外,或許大家有人會注意到,那為什麼預設的範本,網址會是study4.github.io/core-samples/lessons/2011/12/29/jekyll-introduction/,多了一個lessons??那是因為那個md檔有多設定了一個類別如下,才會多了一層目錄。

image

當GitHub for Windows Sync完後,我們就可以去GitHub上面看到我們上傳的md檔了。

image

之後,我們就可以連進去看看了!!

image

這樣就完成嚕!!

後記

其實這些文章,網路已經有很多很多,但因為天資愚笨,有很多盲點不懂=v=,所以小弟還是實作了一次,並且順便紀錄一下嚕!,所以也請各位前輩多多包涵嚕!~

參考資料


GitHub - 在本地端建立Jekyll Server以利測試Blog文章

$
0
0

前面幾篇,我們介紹了使用Jekyll Bootstrap來當作樣板,並發佈到GitHub Page上,但總不可能每次改一個東西,就發佈到GitHub上來驗證吧!? ( 嗯,也不是說不能啦XDD ),所以網路上幾乎都會介紹到,如何在本地端建立Jekyll Server,來搭配使用;建立完後,我們就可以利用本地端Jekyll Server來測試看看有無錯誤,如無錯誤,在sync到GitHub上面去。

首先,因為Jekyll是使用Ruby寫的,我們需要下載RubyInstaller ( Ruby在Windows的安裝工具 ),如下圖。

image_thumb1

那小弟這邊是選擇x64版本。

image_thumb4[1]

以下是安裝畫面,小弟全勾就是了。

image_thumb9[1]

安裝完之後,我們還要安裝DevKit工具。

image_thumb2

DevKit 是windows編譯C/C++的工具包,簡單的說,就是模擬Linux下的make、gcc。通常情況下,我們是可以不需要,但因為等下要搭配Gen,所以就變成必須安裝這個工具包了。

預設是會放在c:\DevKit這個位置。

image_thumb4

完成之後,我們要key下面這個指令

ruby dk.rb init

就會進行初始化設定。

image_thumb6

設定完後,我們要回到ruby200-x64的目錄下,也就是安裝Ruby的目錄下修改config.yml檔案,並且設定我們目前安裝Ruby的路徑;如下圖。

然後輸入

ruby dk.rb install

進行DevKit的安裝。

image_thumb9

接下來是Ruby的Gem工具,這個工具就和MS的NuGet很像,我們可以透過指令的方式,來安裝套件,並且他會自動的處理相依性;下面是RubyGem的官網,但我們不用下載也不用安裝,因為RubyInstaller其實已經包在裡面了。

image_thumb7

接下來,好的習慣,就是要先更新一下,我們可以利用

gem update –system

進行Ruby的更新。

image_thumb12

更新完後,我們也順便把gem更新一下。

gem update

透過此指令來更新。

image_thumb15

都準備好之後,我們就可以使用

gem install jekll

來安裝Jekll了!!

image_thumb18

完成之後,我們就進到你的網站目錄下 ( 以下圖為例,則為study4.github.io這個目錄下 ),輸入

jekyll server

來啟動Server,啟動之後,預設是port 4000,就可以透過瀏覽器看到我們使用Jekyll Bootstrap的畫面了。

image

最後,我們就可以從本機進行修改,確認無誤後,在發行到GitHub上嚕!!

參考資料

ASP.NET MVC - 使用Web Deploy佈署MVC應用程式到IIS

$
0
0

是的!!,大家沒看錯,這篇文章就是要寫很基本到基本不行的基本功;那為啥要寫這篇呢?因為小弟最近都佈署到Azure…久久才佈署一次到IIS上,但每次都會遇到一些小問題(翻),所以為了一勞永逸,就直接把步驟記錄下了來= =…( 不然每次都會忘記東一點,忘記西一點 )

既然如此,我們就開始吧!!首先,我們要先安裝IIS (廢話…)。

image

然後功能這邊,要勾選ASP.NET 4.5!!,因為MVC 5都是拆開成一個又一個的DLL了,所以如果要佈署MVC 5,就直接勾選ASP.NET 4.5就可以了,不用再特別安裝獨立的MVC Package。

image

因為我們會使用Web Deploy佈署,所以要把Management Service勾起來。

image

另外,我們也要在Application Development裡面勾選ASP.NET 4.5,通常勾ASP.NET 4.5,那.NET Extensibility 4.5、ISAPI Extensions、ISAPI Filters都會自動勾起來,另外,如果有使用到SignalR,那要把WebSocket Protocol勾起來喔~當然,其他的Windows驗證等等之類的,就看各位看官的需求了,這邊畢竟是針對Web Deploy和標準的MVC,有需要的朋友,就自行勾選吧。

image

接下來要使用Web Platform來進行安裝Web Deploy,如果是新安裝的OS,進入IIS的時候,他就會問你要不要裝了,然後就會進入Web Platform的官網,這時選擇下載,並且安裝就可以。( p.s 如果IE的安全性沒關掉,不能下載喔…別忘了Win Server的IE預設會開安全性 ),或是進入IIS後,選擇下圖的按鈕也是可以。

image

這邊要裝Web Deploy 3.5、Web Deploy 3.5 without bundled SQL support、Web Deploy 3.5 for Hosting Servers三個套件,除此之外,你也可以直接到Web Deploy的官網下載msi檔案來安裝,我們這邊就先用Web Platform來安裝。( 也有很多文章,是建議直接裝"Recommended Server Configuration For Web Hosting Providers",但那裏面包含了PHP、MySQL等等東西,還要自己取消勾選,所以小弟是直接安裝Web Deploy啦~ )

image

完成後,重新開啟IIS管理介面,就可以看到如下圖位置,多了很多管理的東西~

image

接下來,我們要設定使用權限,通常我們不會使用administrator的權限來進行Deploy,所以在進行下圖這個步驟之前,請自行先去新增一個帳號;新增完畢後,就可以透過下圖的位置,來設定權限。

image

這邊,我們使用skychang這個帳號,到時候在vs裡面,也是用這個帳號進行佈署。

image

接下來,我們要進入到下圖的位置,打開遠端佈署的功能。

image

要Enable,必須先停止後,才能勾選Enable,勾選完後,再啟動就可以了。

image

接下來,我們要設定佈署的相關資訊,簡單的說,就是設定skychang擁有web目錄下的權限。(這樣才能塞網頁上去嘛~ )

image

這邊我們選則剛剛設定的帳號,然後按下setup,就會開始設定目錄的權限了~

image

到這邊,其實還沒結束,也別忘記要把port 8172打開。

image

另外,我們也順便從啟動服務這邊,看看Web Deployment Agent Service、Web Management Service啟動了沒。

image

都完成之後,就回到Visual Studio裡面,設定發行;通常伺服器,用ip比較方便,他會自己去尋找Web Deploy的位置;網站名稱如果有需要,可以在Default Web Site後面再加上Application Name,例如Default Web Site\MyApp;目的地URL,就是你佈署完之後,你這邊會用瀏覽器打開的URL。

image

正常情況下,驗證連線就可以通過了,但今天不知道為啥,遇到了404錯誤,通常遇到這個錯誤,是因為Web Deploy沒有啟動監聽處理,也就是說Web Deploy的安裝沒安裝好,所以我們可以進Web Deploy的網站下,下載安裝檔;記住,如下圖,全部都要勾選。

image

另外,今天也有遇到一個小問題,是Microsoft.Web.Infrastructure錯誤,這種錯誤通常都是因為使用到Windows Server上的GAC;解決方式很簡單;基本上,回到我們專案上,看一下Infrastructure這個DLL的路徑,是使用到下載NuGet的Package,還是參考到GAC路徑;如果是參考到GAC,大家可以參考這篇,或是參考饅頭這篇解法;如果是參考NuGet下載下來的路徑,那只要把複製到本機這個false改成True;到時候就會把這個dll給傳上去了。

image

通常這樣應該就都會成功了!!~你的MVC 5應用程式,就可以順利佈署上去了~

參考資料

Entity Framework - 為什麼修改的資料不用Attach

$
0
0

這幾天在上MVC的課程,有一個同學問到一個很不錯的問題,這個問題大致上是這樣的.

為什麼ASP.NET MVC的範例,修改資料的時候,不需要Attach??

程式碼在下面

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,FirstName,LastName")] Emp emp)
{
    if (ModelState.IsValid)
    {
        db.Entry(emp).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
return View(emp);
}

其實這個問題,很久以前有研究過,但後來並沒有寫到Blog上,所以也忘記了…而基本上,上面的程式碼,是從ASP.NET MVC範本出來的,大家可以看到,只要Emp這個物件傳進來之後,並且把Emp塞到db.Entty()裡面,在改State成Modified後,就可以了。完全不用Attach!!

但是不用Attach,DBContext怎麼會知道我們要更新甚麼東西呢??

其實我們去看MSDN的文件,官方也這樣寫的;如果你有一個Entity,並且你已經知道它存在於資料庫,但這個Entity裡面的東西已經被改變,那你可以告訴DBContext要Attach,並且將狀態設為Modified!!,如下程式碼。

var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" }; 
 
using (var context = new BloggingContext()) 
{ 
    context.Entry(existingBlog).State = EntityState.Modified; 
 
    // Do some more work...  
 
    context.SaveChanges(); 
}

等等,我們還是沒看到Attach阿!!?…

理論上應該如這篇文章的內容一樣,是這樣這寫吧??..我們應該先Attach這個物件,然後再把State改為Modified…那為什麼上面的範例不用??

db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();

其實原因很簡單,那是因為背後他幫我們自動Attach了,所以我們就可以不用Attach了…

那是在db.Entry()這個方法裡面進行Attach的嗎??…

錯…我們可以看到下圖;當我們執行完db.Entry()後,根本就還沒開始追蹤,甚至現有物件和原始物件都還是沒東西的狀況…

image

那到底在哪邊?

答案就在這一行,真正會自動幫忙Attach的地點其實是在設定State的這個地方…

dbEntry.State = EntityState.Modified;

其實我們反組譯看看,就可以看到如下圖。

image

是的,其實在我們設定State的時候,會用到set,所以真正的自動執行Attach的地方,就是這裡… ( 老實說,真的意想不到阿= =|| )

也因此,我們也不用多寫Attach,只要變更State的時候,他就會自動幫我們Attach去上,並開始追蹤了~~

參考資料

Azure - Redis Cache

$
0
0

在Open Source裡面,Redis其實算是非常紅的NOSQL資料庫,尤其是他的速度非常快(因為都存在Memory裡面),所以大家通常都會把Redis當作Cache使用。

( 這裡有簡體的Redis 設計與實踐手冊,有興趣的朋友可以看看,小弟是還沒空看就是了… )

而近年來,不斷改變形象的MS,現在Azure上,也幫我們實作了以Redis為核心的Cache,讓我們可以不用建立,立馬可以使用!!

除此之外,官方的Blog文章也指出,"微軟公司建議 Azure 用戶所有的新開發的應用系統,未來皆採用 Azure Redis Cache",所以可以看的出來Redis Cache已經取代了原先的Cache機制了…

另外,這邊也有"早期"的Redis Cache vs AppFabric的效能比較資訊,不過這種資訊參考參考就好,畢竟時代不斷的進步~

那接下來這篇,我們就來介紹一下Azure上的Redis Cache。

Create a cache

首先,我們當然是要建立Redis Cache,而在寫這篇文章的時候,還是Prieview,所以要用於正式環境的朋友,要注意一下喔!~要啟用Redis Cache,必須於新版的Azure Portal上,才可以看見,所以大家記得切換到新版的Portal上喔!~

要建立很簡單,只要選擇Redis Cache就可以了。

image

然後我們要輸入一下DNS的位置;然後依據你想要使用的大小,選擇方案,基本上目前Redis Cache有兩種方案,一種是Basic,一種是Standard;Basic比較便宜,但是不保證SLA 99.95,而Standard基本上都有SLA 99.95 ( 詳細資訊可以參考官網 )。

另外,如果不滿1G,通常都會和別人共用,所以如果想獨享,那就要選1G以上方案 ( 好像在講手機4G行動方案的感覺= =|| )

接下來要選擇Resource Group、要使用的帳號、和地區。

image

完成之後,就可以等他建立完成;完成之後,我們就可以從下圖的位置取得密碼等資訊。

image

到這邊,就建立完成了!!

Application

應用程式這邊,則要使用第三方套件,才能對Redis Cache進行操作;我們可以使用NuGet打"StackExchange.Redis"取得,如下圖。而這邊,兩個套件選擇其中一個就可以;如果你喜歡Strong-Name,那可以選擇第二個。( 關於Strong-Name,有興趣的朋友可以Google ),另外,要注意的是目前這個Lib只支援.Net Framework 4以上版本。

image

接下來就是寫Code了!!~,基本上我們這邊會有三個簡單的Demo;首先我們會使用ConnectionMultiplexer.Connect來設定連線字串;如果不想要SSL,可以把SSL設為False;而後面的Password就是我們上面所看到的Key。

另外,官方網站有特別提到,ConnectionMultiplexer.Connect只需要設定一次,就可以給你的這個應用程式使用,如果設定多次,可能會有效能下降的疑慮。接下來,我們可以使用connection.GetDatabase()來取得IDatabase的實體,到時候我們就可以使用這個Object來操作Redis Cache。

我們要存放資料很簡單,只需要下cache.StringSet("Key1", "value");,而不需要在下啥SaveChange等指令…;Redis裡面存的是Key、Value,而這個Value基本上是文字;但我們也可以把二進位元碼存、C# Object存進去;只是要稍微轉換一下就是了。

要取出來也很簡單;我們可以用StringGet(“Key1”)來把資料放到MVC的ViewData裡面;而如果裡面沒有東西,則會回傳Null,所以透過此機制,我們可以很簡單的實作出Cache-Aside Pattern ( 如Demo-2 )

最後,如果有需要,也可以設定過期時間,如Demo-3。

using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace RedisCacheDemo.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            //設定連線字串
            ConnectionMultiplexer connection = 
                ConnectionMultiplexer.Connect(
                "skyrediscache.redis.cache.windows.net,ssl=true,password=....");
            
            IDatabase cache = connection.GetDatabase();

            //Demo-1 存放簡單的形態到Cache
            cache.StringSet("key1", "value");
            cache.StringSet("key2", 25);

            //取得資料
            ViewData["key1"] = cache.StringGet("key1");
            ViewData["key2"] = (int)cache.StringGet("key2");


            //Demo-2 Cache-Aside Pattern
            string value = cache.StringGet("key1");
            if (value == null)
            {
                //如果找不到資料,就從資料庫取得
                value = GetValueFromDataSource();

                cache.StringSet("key1", value);
            }

            //Demo-3 指定時間
            cache.StringSet("key1", "value1", TimeSpan.FromMinutes(90));

            return View();
        }
    }
}

基本上這部份的操作就是這樣,還滿簡單的;下一篇,我們來看看,如何將Session存放到Redis Cache裡面去。

參考資料

Azure - 儲存Session到Redis Cache

$
0
0

上一篇,我們快速地看到了Redis怎麼樣在Azure建立與使用,那同樣的,在Azure上,多個Instance最需要解決的還是Session問題;我們以前看了很多種解決方式,例如官方不建議的Table方式,或是早期的存放到SQL Database、貴貴的Azure Cache,或是拿Cloud Service的Work Role當作Cache。

而這篇文章,我們就來看看,要怎樣使用超高速的Redis Cache當作Session的存放位置。

首先,我們要在NuGet裝RedisSessionStateProvider,所以我們要在搜尋方塊打"RedisSessionStateProvider”。( 目前這個Lib是屬於發行前版本,所以要切換到發行前版本進行搜尋才搜尋的到 )

image

完成之後,官方是寫說會將Lib載入,並且自動修改Web.config,但實際上,我沒有阿QQ..好啦,這個月人品持續有問題,那我們也只好自己加入了…下面是官方給的範例,我們就用這範例去做調整吧。

基本上,只有retryTimeoutInMilliseconds要注意一下,因為是以毫秒為單位計算。( RetryTimeoutInMilliseconds是當有斷線,連不到的情況下,可以重試 )

<sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <!--
      <add name="MySessionStateStore" 
        host = "127.0.0.1" [String]
        port = "" [number]
        accessKey = "" [String]
        ssl = "false" [true|false]
        throwOnError = "true" [true|false]
        retryTimeoutInMilliseconds = "0" [number]
      />
    -->
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" accessKey="" ssl="false" />
  </providers>
</sessionState>

那我們修改玩的Web.Config會長得像這樣,記得accessKey要填入Azure上Redis Cache的Key。

<?xml version="1.0" encoding="utf-8"?>
<!--
  如需如何設定 ASP.NET 應用程式的詳細資訊,請瀏覽
  http://go.microsoft.com/fwlink/?LinkId=301880
  -->
<configuration>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0"/>
    <add key="webpages:Enabled" value="false"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5"/>
    <httpRuntime targetFramework="4.5"/>

    <sessionState mode="Custom" customProvider="MySessionStateStore">
      <providers>
        <!--
      <add name="MySessionStateStore" 
        host = "127.0.0.1" [String]
        port = "" [number]
        accessKey = "" [String]
        ssl = "false" [true|false]
        throwOnError = "true" [true|false]
        retryTimeoutInMilliseconds = "0" [number]
      />
    -->
        <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" 
             host="skyrediscache.redis.cache.windows.net"
        accessKey="..." ssl="true" />
      </providers>
    </sessionState>

  </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed"/>
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.5.2.14234" newVersion="1.5.2.14234"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-5.2.0.0" newVersion="5.2.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

最後,我們可以寫一個Session進去看看。

public ActionResult SessionTest()
{
    Session["Test"] = "Hello Redis";

    return View();
}

基本上如果無報錯的話,就代表成功了喔!!

參考資料

Viewing all 144 articles
Browse latest View live