2012年6月22日

Windows Azure - 將使用SQL Server Express的舊專案轉移到LocalDB

最近因為太愛用Visual Studio 2012 RC了( 主要是因為他的黑色介面XDD ),再加上Azure SDK可以正常的支援了,所以也將很多專案慢慢地轉到Visual Studio 2012 RC上來 ( 其實是一兩個實驗用的專案… ),而新的Windows Azure,預設會使用IIS Express,而資料庫呢,則會使用LocalDB,所以第一次開啟使用SQL Server Express的舊專案的時候,又沒裝SQL Server Express的話,他會跳出這個視窗。

圖片 1

Web 專案 'xxx' 需要SQL Server Express,該程式未安裝這部電腦上。Vistual Studio 2012的建議資料庫引擎為SQL Server LocalDB Express。…

如何解決

首先,如果對於LocalDB不了解的話,可以看Rico大的這篇文章和這篇文章;然後我們就開始進行轉換的步驟吧!

從伺服器總管匯入資料庫!

雖然上圖的說明說,可以點兩下進行升級,但小弟沒試過就是了,小弟是參考MSDN的升級流程;首先,我們在Visual Studio 2012開啟伺服器總管。

image

接下來,我們在伺服器總管的地方,按下下圖的按鈕,來連接到資料庫。

image

我們選擇如下圖的設定。

image

接下來,我們需要加入連線,伺服器名稱是(localdb)\xx,localdb是連接到LocalDB的字串,後面的XX,可以依據需要使用自己創建Instance,而預設的Instance為v11.0,然後選擇Windows 驗證,再選擇mdf的檔案,最後要Key上邏輯名稱。( 這個mdf檔案,是從SQL Server Express 拷貝出來的,原本預設的目錄,應該會在C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\ 底下,而拷貝出來的時候,別忘記也要把副檔名為log的檔案,一併拷貝出來喔!! ),這時,我們可以按下測試連接試試看。

image

如果發生如下圖問題,通常是因為LocalDB沒有啟動。

image

而如果出現下圖,是正常的,那我們只要回到加入連線的畫面( 也就是上上圖 ),然後按下確定,就可以升級了;但我們這邊先假設LocalDB沒啟動,所以我們來看看LocalDB怎樣啟動吧。

image

啟動LocalDB

首先,我們必需進入命令模式來啟動LocalDB,可以使用CMD,或是PowerShell;指令在C:\Program Files\Microsoft SQL Server\110\Tools\Binn\底下的sqllocaldb,我們可以鍵入sqllocaldb info來看看目前有哪些Instance,如下圖,目前有Study4TwAzure和v11.0,如果你想要建立一個xxxx的Instance,可以用create指令。

image

如果要起啟動,我們可以下sqllocaldb s “xxx”來進行啟動。

image

我們也可以用sqlllocaldb i “xxx”來查看目前Instance是否已經啟動了。

image

回到加入連線並完成升級

我們可以在按按看測試連接按鈕,如果出現下圖,雖然是錯誤,但只少可以確定LocalDB已經啟動起來了。

image

接下來,我們只要回到加入連線的畫面,並按下確定,就會出現下圖,問我們是否要立即升級資料庫檔案。

image

最後,我們就可以從伺服器總管看到資料庫被掛上去了,當然,程式的連線字串,也別忘記調整喔!!

image

這樣就完成了!!

後記

使用LocalDB的好處非常多!但因為還有像RicoCary小朱James等等,這些神人在,小弟就不多介紹LocalDB了,以免誤人子弟XDD;而這整個過程,雖然很簡單,MSDN也有中文的文件,但想說還是一邊弄一邊截圖( 也變成一種習慣了= = ),這樣大家按圖施工,速度也會比較快,也希望能幫助到需要的大家,謝謝。

參考資料

2012年6月20日

Visual Studio 2012 - 超好用套件VSCommands 11

偶而也要來一點輕鬆的話題XDD,以前在使用Visual Studio 2010的時候,看著大家裝一些套件,小弟也會想更著流行裝一下;而到了Visual Studio 2012,就順便介紹了一下,從Visual Studio 2010就有的超級好用套件VSCommand。( 因為VSCommand 11的功能會一直增加與改變,未來這篇就不維護了,也請大家多多包涵。 )

裝上去!!

我們可以從工具,擴充功能和更新的地方來裝上去!

image

從左邊的線上,Visual Studio 組件庫,就可以找到VSCommands for Visual Studio 2012。 ( 通常大概在第一或是第二頁 )

image

裝上去就完成了。

有甚麼功能呢!!?

其實官網都有介紹,但我相信新手或是有很多像小弟我一樣,看到英文就會瘋掉的朋友們,所以小弟就在這邊利用Google來翻譯一下XDD。

打開 / 編輯

就如下面這張圖( 這張是從官網剪下來的 ),我們可以看到,可以直接從方案總管開啟一些原本Visual Studio不支援的格式!!

image

ZIP Solution

可以快速地幫我們壓縮Solution,並且濾掉不需要的檔案!!

image

這邊可以選擇一些設定。

image

複製 / 貼上 連結

有的時候專案太大,我們就可以用這個方式來複製需要的連結。( 不是整個檔案喔,是連結喔! )

image

同步Visual Studio設定

這個還滿Cool的,但我沒試過XDD,基本上他會把設定存到我們指定的目錄,然後可以利用DropBox或是SkyDrive( 應該也可以 )來同步。

image

輸出窗的改進

就如下圖,多了更多的顏色( 好吧,我抓的圖顏色比較少,可以去官網看看 ),然後有標示行號等等。

image

主選單的增強

我們可以隱藏主選單,或是改變主選單的字體大小喔!!

image

像這樣就不見了。

image

解決方案徽章

恩…反正就是下面的工作列,如果沒有裝的時候,會如下圖的上面這樣,完全不知道哪個視窗是做甚麼的,但如果裝了VSCommand之後,就很方便的可以知道,哪個視窗是哪個喔!! ( 這個功能真的超棒的 )

image

除錯支援

這個小弟也沒用過就是了,不過根據官網說,他可以輕鬆地幫你切換想要使用的憑證喔。

image

基本上就到這樣了,這麼好用的東西,不裝嗎?,如果已經有在使用Visual Studio 2012的人,一定要裝裝看VSCommand 11,保證不會後悔喔!!

參考網址

Windows Azure - 使用Windows Azure Cache的Dedicated Caching解決Session問題

最近忙著處理一些事情,所以這短篇到現在才出來,基本上使用Dedicated Role來當Cache也和前一篇差不多,如果不清楚此機制的人,可以先參考小弟這篇,或是小朱前輩這篇

前篇我們是使用Co-located Cache( Existing Roles )的機制來放當作Cache使用,Co-located Cache( Existing Roles )也就是拿目前現有的Role中,一部分的記憶體,來當作Cache,但有的時候,網站真的附載太大了,我們就可以使用新的Role來當作Cache,也就是Dedicated Caching ( Dedicated Roles )。

增加Dedicated Roles ( Cache Worker Role )

我們可以從Azure專案裡面的Roles來新增,如下圖。

image

到這邊,我們在選擇Cache Worker Role。

image

之後我們就可以從下圖發現,增加了這些東西,而這邊雖然也有WorkerRoles.cs,不過裡面是空的。

image

設定Dedicated Roles

我們可以點兩下剛剛建好的CacheWorkerRole1。

image

其實點開後,就會發現,預設已經幫我們Enable了,而如果要部屬到Windows Azure上面,別忘了要設定一下Storage Account ( 預設是UseDevelopmentStorage=true 那邊。),如果想自行定義一些其他Cache功能的,可以在Add Named Cache那邊去新增,預設就是Default了。

image

其餘的部分,需要增加的dll、ASP.NET Web.Config的設定,都和前一篇相同,這裡就不詳細多做介紹了,比較須注意的是,Web.config的設定,這邊因為我們要使用的是CacheWorkerRole1,所以identifier要設定成CacheWorkerRole1。

  <dataCacheClients>
    <tracing sinkType="DiagnosticSink" traceLevel="Error" />
    <dataCacheClient name="default2">
      <autoDiscover isEnabled="true" identifier="CacheWorkerRole1" />
      <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />-->
    </dataCacheClient>
  </dataCacheClients>

這樣就可以了。

後記

最近在看這部分的原理,其實裡面的詳細設定還滿多東西的,這部份等一些細節真的比較了解後,會在po上來;而這幾篇的Cache可以感覺得出來,Microsoft很費心地希望把雲端的環境弄成和一般環境一樣 ( 真實當然是不一樣,這裡是指,可以讓目前現有的環境,無痛轉移到雲端 ) ,無論是最近的Web Site或是新的Cache機制,都讓現有的環境更方便的轉移到雲端上面來,而現在雲端台灣區也開放了,這麼好的東西,還不趕快來用嗎=v=?

參考資料

2012年6月16日

Windows Azure - 使用Windows Azure co-located Caching解決Session問題

co-located Caching是新的Cache架構,不清楚的人可以看一下這篇

之前有寫過一篇"Windows Azure - 使用Windows Azure Storage解決Sessios問題"主要在講Windows Azure架構下Load Balance機制可能會讓Session抓不到的問題,而那篇的文章主要是使用Windows Azure Storage來解決問題,當然文中也講到,其實微軟官方也不建議使用Windows Azure Storage來解決,而今天隨著1.7的發佈,我們就使用新的Cache機制來解決吧。

這次我們的範例,使用這篇"ASP.NET MVC - 在Windows Azure使用TempData要小心!"的範例,其實沒看過的人也沒關係,因為這個機制,真的是簡單到爆掉XDD。

啟動Cache機制 ( 使用Co-located Role )

首先,我們在Azure專案底下,並且打開Role的設定,如下圖位置。

image

然後在Caching這邊,就可以啟動Caching設定 ( 於Enable Caching處打勾 ),我們這邊選擇使用Co-located Role,並且使用30%,另外,因為目前是本機進行測試,所以沒有特別選擇Windows Azure Storage,不然這邊也要選擇一下Windows Azure Storage ( 這裡會使用到Windows Azure Storage的原因是因為,每個Cache cluster會將runtime的資訊分享在Storage,所以這邊一定要設定 ),最後要注意一下Name的地方,預設是default,你也可以自己去命名,或是自己新增加一個設定,這邊的用意就像是讓Cache更有彈性。( 此外現在此機制是屬於Preview,要啟用此機制,也要先去官網申請Preview )

image

我們可以看到ServiceConfiguration.Local.cscfg增加了很多的東西,主要都是在設定Cache,不過小弟我還是喜歡在上面的界面修修改改=v=。

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="AzureAndMvcUseTempDataTest" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*" schemaVersion="2012-05.1.7">
  <Role name="MvcWebRole1">
    <Instances count="2" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
      <Setting name="Microsoft.WindowsAzure.Plugins.Caching.NamedCaches" value="{&quot;caches&quot;:[{&quot;name&quot;:&quot;default&quot;,&quot;policy&quot;:{&quot;eviction&quot;:{&quot;type&quot;:0},&quot;expiration&quot;:{&quot;defaultTTL&quot;:10,&quot;isExpirable&quot;:true,&quot;type&quot;:1},&quot;serverNotification&quot;:{&quot;isEnabled&quot;:false}},&quot;secondaries&quot;:0}]}" />
      <Setting name="Microsoft.WindowsAzure.Plugins.Caching.Loglevel" value="" />
      <Setting name="Microsoft.WindowsAzure.Plugins.Caching.CacheSizePercentage" value="30" />
      <Setting name="Microsoft.WindowsAzure.Plugins.Caching.ConfigStoreConnectionString" value="UseDevelopmentStorage=true" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

此外ServiceDefinition.csdef也有了改變,主要是多了import module=”Caching”這段,並且設定1G的本地儲存。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="AzureAndMvcUseTempDataTest" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-05.1.7">
  <WebRole name="MvcWebRole1" vmsize="ExtraSmall">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
      <Import moduleName="Caching" />
    </Imports>
    <LocalResources>
      <LocalStorage name="Microsoft.WindowsAzure.Plugins.Caching.FileStore" sizeInMB="1000" cleanOnRoleRecycle="false" />
    </LocalResources>
  </WebRole>
</ServiceDefinition>

到這邊就已經準備好了Cache機制

設定組態

接下來我們只需要在Web Role專案 ( 可能是ASP.NET或是ASP.NET MVC專案 ),使用管理NuGet套件。

image

然後從線上中尋找"windowsazure.caching",並且安裝Windows Azure Caching Preview。

image

安裝完後,他會幫我們加上:

  • Microsoft.ApplicationServer.Caching.Client.dll
  • Microsoft.ApplicationServer.Caching.Core.dll
  • Microsoft.WindowsFabric.Common.dll
  • Microsoft.WindowsFabric.Data.Common.dll

這些dll,而如果你是使用ASP.NET,還會加上:

  • Microsoft.Web.DistributedCache.dll

如果想要手動添加,可以到這個目錄。

C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-06\ref\CachingPreview

如果是使用NuGet,他也會自動在app.config或是web.config加上兩段,下面這段會加在<configuration>之下。

<configSections>
  <section name="dataCacheClients"
    type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core"
    allowLocation="true"
    allowDefinition="Everywhere"/>
</configSections>

和這段,也是加在</configuration>之下。

<dataCacheClients>
  <tracing sinkType="DiagnosticSink" traceLevel="Error" />
  <dataCacheClient name="default">
    <autoDiscover isEnabled="true" identifier="[cache cluster role name]" />
    <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />-->
  </dataCacheClient>
</dataCacheClients>

其中,上面那段程式碼,裡面有個"[cache cluster role name]"字串,這邊要特別注意,需要把這個字串改成你要使用Role的名稱,如下圖,我們就必須改成"MvcWebRole1",這樣就可以了。( 記住,這[ ]兩個符號也要一併的替換掉喔! )。

image

所以會變成這樣,另外,如果有在最前面,有自己加了一個新的名稱,就必須在這邊把<dataCacheClient name=”default”>裡面的default改為自己設定的名子。

<dataCacheClients>
    <tracing sinkType="DiagnosticSink" traceLevel="Error" />
    <dataCacheClient name="default">
      <autoDiscover isEnabled="true" identifier="MvcWebRole1" />
      <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />-->
    </dataCacheClient>
</dataCacheClients>

到這邊就完成了設定組態。

將ASP.NET的Session指向Cache

最後,我們在修改一下web.config,讓Session改成自訂,把這段加到<system.web>之下就可以了,同樣的,如果有自行設定Cache的名字,也別忘了把dataCacheClientName的名稱改一下。

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
  <providers>
    <add name="AppFabricCacheSessionStoreProvider"
          type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"
          cacheName="default"
          useBlobMode="true"
          dataCacheClientName="default" />
  </providers>
</sessionState>

這樣就完成了,夠簡單吧。

參考資料

Windows Azure - Overview of Caching in Windows Azure

這次2012年6月的Windows Azure的大更新,小朱前輩也很快的幫大家整理最新消息,也很感謝小朱前輩的文章,讓小弟能快速掌握新的Windoes Azure趨勢;而這幾天,也把部分的新功能玩了一下,並且用破破的英文加上Google翻譯XDD讀了一下文章,所以也在這邊做個筆記與整理。

這次我們要看的是這裡,也就是紅色圈起來的地方。( 圖片來自MSDN )

image

Windows Azure Caching

Caching大家應該就會直接聯想到記憶體( Memory ),當然,Windows Azure Caching也就是記憶體,不過他是一種分散式的記憶體 ( 畢竟在雲端嘛 ),而Windows Azure Caching當然就會給多台的機器做使用;講到這,我想大家應該都沒有問題,反正就是雲端用的Caching。

既然如此,為啥要介紹呢?

因為既然談到雲,就會有商機新技術,Windows Azure Caching當然也和一般Server的Caching架構有點不一樣嚕。

Shared Caching

Windows Azure Shared Caching是之前就活在Windows Azure下的產品,也就是貴死人不償命的產品XDD;Shared Caching不是存在於Role之中,也就是說,Shared Caching並不是存在每一個Web Role或是Work Role,而是有自己獨立的環境 ( 像Windows Azure Storage ),當我們痛心地刷下去,並且使用Shared Caching的時候,就可以使用URL來進行訪問、存取,然後就會收到貴森森的帳單。

Caching (Preview) on Roles

這裡加個Preview,就代表這是新推出的Caching機制,也是小朱前輩文中介紹到的新東西,我們就稱為Caching on Roles吧 ( 未來不知道會用哪個名… );就如前面所說,Shared Caching是個貴森森的東西,並不是一般小老百姓用得起的東西;其次,對於現有程式要搬上雲端,步驟上也比較麻煩 ( 其實感覺也還好 ),所以又多了一種新的Caching,叫做Caching on Roles,而Caching on Roles和Shared Caching有甚麼不一樣呢!?其實很簡單,Caching on Roles就是使用目前的Web Role或是Work Role中的記憶體當做Caching,畢竟原本使用的Web Role和Work Role本身就有部分的記憶體了,不用白不用XDD,而微軟為了讓大家能更加平民的使用XDD,所以推出了這個機制,而Caching on Roles又稱為role-based Caching

Caching on Roles 有兩種

其實沒有想像中的複雜,第一種是co-located Caching ( 或稱為Caching on Existing Role) ,如下圖 (此圖來自ScouttGu’s Blog),簡單的說,就是拿你目前使用的Web Role和Work Role的其中一部份的記憶體,來當作Cache,而這些Cache會形成一個大的分散式Cache ( 就當成大的游泳池吧=v= ),而每個Role都可以去存取這個游泳池,所以當其中一個Role將資料放到這個游泳池時,其他的Role也可以讀到資料 ( 但只限於同一個Applicaion,如果是不同的Application,當然還是讀不到 ),當然,最重要的是,它是"免費"的,而且可以自行的動態調整,希望使用的百分比為多少,也讓原本每台Role用不完的記憶體,有新的去處!! ( 重點是免費喔!! )( P.S 在ScouttGu的Blog,Scoutt把兩種都稱為是Distributed cache,其實這樣講也沒錯,因為都是分散式的Cache,但為了讓大家比較清楚,小弟就使用MSDN的命名吧,MSDN則是稱為co-located Caching和Distributed Caching )

image

第二種叫做Dedicated Caching ( 又稱 Caching on Dedicated Role ),上面是將目前Role中,部分的記憶體拿來應用,但對大型公司來說,Role本身的記憶體就已經不夠了阿,怎麼可能還拿得出來哩!?所以第二種Dedicated Caching,就是新建一個Cache Worker Role來當作記憶體,如下圖,建立了兩個12G的Cache Worker Role來當作Cache,當然,多新增加的Cache Worker Role,就要多付錢了,不過還是比貴森森的Share Caching便宜。

image

下一篇,我們來看看,原本的ASP.NET Session問題,該如何使用新的Cache架構來解決。

參考資料

2012年6月9日

Windows Azure – 安裝Windows Azure SDK 1.7 for Visual Studio 2012 RC in Win 8 RP ( DIY篇 )

6/14更新 目前已經可以在這裡下載到包裝好的安裝包了喔!!底下的步驟就不用那麼麻煩的自己DIY了喔!

之前在Visual Studio 11的時候,一直沒辦法把Visual Studio 11當作正式環境的一個因素,就是Visual Studio 11不支援Windows Azure SDK,但如今Visual Studio 2012 RC 已經可以支援Windows Azure SDK了!,缺點就是目前沒有整合包,小弟我也相信,未來不久一定就會推出整合包,但是,最近台灣也好不容易開通了,想必一定有很多人和小弟一樣,已經迫不及待了,所以小弟這邊就把小弟的安裝流程貼過來,給大家一個參考。

( 這個流程裡面的連結全部都是X64的檔案,如果是跑32bit的人,還是請參考官網的連結,其次,如果不急的人,也可以再等一段時間,等有整合包會比較方便,另外,理論上Windows Azure預設是使用IIS Express, IIS應該是可以不用裝的,但小弟沒有測試過,有興趣的可以自行嘗試看看。)

第一步,先安裝.Net Framework 3.5 Service Pack 1

image

接下來,我們要設定本機的IIS,我們可以從右下角叫出設定。

image

然後再選擇控制台。
image

接下來選擇程式集。

image

並選擇開啟或關閉Windows功能。

image

接下來的設定如下,除了.NET3.5外,其他的都是在IIS的設定底下。

image

image

image

image

image

image

image

完成後,安裝URL Rewrite Module 2.0。可以選擇使用Web Plattion Installer或是直接下載安裝檔。

image

接著要安裝Microsoft SQL Server Express LocalDB

image

安裝Windows Azure Authoring Tools

image

安裝Windows Azure Emulator

image

安裝Windows Azure Libraries for .NET 1.7

image

安裝Windows Azure Tools

image

完成!!,我們簡單測試一下,記得要切換回.Net Framework 4.0。

image

第一次執行時的DB設定。

image

懷念的啟動畫面,這時候只能禱告,希望不要出問題了。

image

同時,我們也要讓模擬器可以過防火牆。

image

看到這個畫面,就代表已經成功了,終於可以在Visual Studio 2012 RC下開發了!!

image

後記

基本上,這篇就是從頭到尾都是裝裝裝,整個流程都是按照官網的順序再跑,但其實Win8 和 VS2012 RC之下,有很多東西也可以不用裝了,裝的時候,也會跳出提示說,已經不擁有了,最後,還是老話一句,懶人包趕快出吧>"<,這樣一個一個慢慢裝,還滿累人的…

參考網址