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

Windows Azure - 用存在Azure Storage現有的VHD重新佈署VM

$
0
0

當在Windows Azure上面建立了一台VM後,其實是會在Storage裡面創建一個VHD的,就算我們不小心刪除了剛剛建立好的VM,或是因為服務額度超過被停用,以至於此VM被移除,等等之類的狀況;乍看之下VM已經消失了,但實際上,我們還是可以利用原有的VHD重新佈署回來 ( 只是Public IP會變得不一樣就是了… ),如下圖,VHD會被存到Storage裡面去。

image

接下來,我們就來看看怎樣利用原有的VHD重新佈署回來。

首先我們要知道,之前建立的VM,如果被刪除的話,都會出現一個空的Cloud Service,如下圖,原本的study4dns這台VM被移除掉之後,在Cloud Services裡面就會出現一個空的Cloud Service ( 如果沒有刪除VM,就不會看到Cloud Services ),小弟是推測,可能VM的架構也是Run在Cloud Service上。

image

接下來,點進去這個Cloud Service之後,我們要把這個Cloud Service給刪除掉;原因很簡單,因為如果沒刪除,網址的部分就會被這個Cloud Service給佔用掉。

image

接下來,就如同以前建立VM的步驟,選擇購物車。

image

這時候,我們就會發現,最底下有我們之前的VHD可以選擇。

image

這部分就和之前的流程沒兩樣,大家看看就好。

image

這邊如果沒有刪除掉Cloud Service的話,再取相同的名子,就沒辦法了喔!!所以如果要取相同名稱,記得要刪除Cloud Service。

image

這邊設定高可用性,小弟我目前還不需要…

image

然後就會開始建立,當建立完後,要注意一下Status,通常會是Stop。( 下圖顯示Starting,那是因為小弟忘記截圖了… )

image

如果是Stop,記得要選擇Restart,讓VM能重新啟動,下圖因為已經按過了,所以是呈現黑色不能按的狀況。

image

這樣,除了Public IP不同外,大致上就都恢復了。

後記

其實有一點也需要注意的,這篇是講如何重建VM,但別忘了,如果這個VM真的要刪除,也別忘記去Storage裡面將VHD刪除,還有Cloud Service也要刪掉喔!!之前建立好幾台VM,結果Storage裡面存了一堆VHD…所以大家要注意喔!!


Windows Azure - 將使用Access Control Service的網站部屬到Windows Azure

$
0
0

前一篇有提到使用Access Control Service來整合Facebook的認證,但是那篇講的是ASP.NET MVC在地上然後搭配Windows Azure的Access Control Service,如果今天要把ASP.NET MVC的網站也部屬到Windows Azure,則會因為Identity and Access Tools是使用.NET 4.5的關係,所以會發生部屬不上去的問題 ( 未來Azure支援.NET 4.5,就可以不用理會這篇了~~ ),所以現在,我們必須要把Windows Identity Framework 換成3.5。

首先第一步驟,必須先取得Microsoft.IdentityModel.dll,而且要3.5版本的,小弟的作法是從另外一台有裝Windows Identity Framework 3.5的電腦上面Copy過來的,如果找不到的人可以去Google找找看,或是直接裝Windows Identity Framework 3.5 RuntimeWindows Identity Framework 3.5 SDK。( Windows Identity Framework 3.5 Runtime的下載頁面中,Win6.0代表vista,6.1代表win 7 ,另外裝完後,dll預設會在C:\Program Files\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5 底下。)

接下來,我們要把Microsoft.IdentityModel.dll引入到ASP.NET MVC的專案

image

小弟我這邊已經把Microsoft.Identity.dll複製到版控裡面,所以位置和預設的位置有點不同。

image

完成之後,接下來要開始修改Web.config檔案,首先我們先找到configSections區段,並且把原本的的Section註解調,替換成舊版的,如下。

<configSections>
    ...
    <!-- Use to IdentityModel 4.0 
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    -->
    <section name="microsoft.identityModel" type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </configSections>

接著,我們把validateRequest加入到Page裡面,如下。

<pages validateRequest="false">

然後,把httpRuntime的requestValidationMode從4.5改成2.0。( 雖然MSDN寫requestValidationMode超過4.0的值,都會被當成4.0,但實際上,4.5的驗證機制是有差的,可以參考附錄的資料 )

<httpRuntime requestValidationMode="2.0" />

接著,我們要把system.webServer裡面的內容替換如下,因為我們不是用System.Identity了,而是使用Microsoft.Identity ( 也就是3.5版本 )。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler" />
      <add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler" />
    </modules>
</system.webServer>

最後,system.identityModel的區段、和system.identityModel.Service的區段換成如下,因為要配合上傳到Azure的URL,所以audienceUris裡面的value要填成真實的URI ( 這裡是http://study4.tw ),而中間有一個trustedIssuers,裡面有一個thumbprint的值,可以參考之前system.identityModel的值,後面的name,其實也和之前的system.identityModel的值是一樣的,也就是Access Control Service的網址;最後,最下面的wsFederation裡面,issuer也要填入Access Control Service的URI,而realm和reply則填入真實的網址。( 其實裡面的值和system.identityModel裡面的值都一樣,只是別忘記,我們之前是利用localhost測試,所以填的是http://localhost,但這邊因為要部屬到Azure上面去了,所以填的必需要是真實網址 )。

<microsoft.identityModel>
    <service>
      <securityTokenHandlers>
        <securityTokenHandlerConfiguration>
          <audienceUris>
            <add value="http://study4.tw/" />
          </audienceUris>
          <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
            <trustedIssuers>
              <add thumbprint="9B8174896FA4C3FCF16587DCA35FF3834F956D19" name="https://Study4ACS.accesscontrol.windows.net/" />
            </trustedIssuers>
          </issuerNameRegistry>
        </securityTokenHandlerConfiguration>
      </securityTokenHandlers>
      <certificateValidation certificateValidationMode="None" />
      <federatedAuthentication>
        <cookieHandler requireSsl="false" />
        <wsFederation passiveRedirectEnabled="true" issuer="https://study4acs.accesscontrol.windows.net/v2/wsfederation" 
                      realm="http://study4.tw/" reply="http://study4.tw/" requireHttps="false" />
      </federatedAuthentication>
    </service>
  </microsoft.identityModel>

到這邊,我們Web.config就設定完成了,接下來,我們要回到Windows Azure的管理介面,進行一些設定;如下圖,我們要進入規則與群組設定。

image

進去後,按下產生。( 預設沒有產生新規則的情況下,通常只會有兩個規則,而底下的圖,是因為小弟已經按過了,所以已經產生了非常多的規則。 )

image

把兩個都打勾,再按下產生。

image

產生後,回如下圖,產生很多新個規則,並按下儲存。

image

接下來,還要調整一下憑證的信任網址。

image

記得領域和傳回URL的部分,要改成真實的網址,不然會沒辦法驗證。

image

儲存後,將整個方案打包好,就可以上傳到Azure了!!這又就完成了!!

image

後記

當然,後面還有一些微調的地方,例如怎樣設定哪個頁面需要驗證;或是整個測試要怎要做之類的,但談下去可能整篇會非常長,而且可能會離主題越來越遠,所以就先此打住了,也請見諒;未來Azure如果搭配.NET 4.5後,也可不在需要這樣做,也期待Azure上的.NET 4.5趕快到來=v=

參考資料

Windows Azure - Mobile Service初體驗!!

$
0
0

原本想說Windows Azure的東西寫的也差不多,準備告一個段落,跑去玩玩TFS的詳細功能,和開始看看ASP.NET MVC的東西,沒想到,突然間,就看到了Mobile Service這個服務出現;好吧,既然命中注定如此,只好把其他東西延一延,讓我們來看看Windows Azure的新功能吧。

現在的時代進步太快,原本只使用電腦上網的我們,現在還多了行動裝置,平板等等東西,可以讓我們帶著跑;多了行動裝置和平板也就算了,現在除了Microsoft本家的Win Phone、Win Store App ( 現在說不可以再用Metro Style App了 )外,還有Apple的iOS、和Android機器人大軍;在那麼多樣化的時代,我們也不可能把所有商業邏輯都一遍又一遍的寫一次 ( 好吧,如果可以用複製貼上,還免強可以接受 ),但遇到不同平台,有不同的語言,就沒那麼簡單了;當然,或許說有HTML5,但別忘了,那是屬於UI端的,因該也不會想把所有商業邏輯寫到UI去吧…( 也有難度阿… ),總之,後面還是要有Server端的語言來配合!!其實講了那麼多,鋪了那麼多梗,其實只是想說,為了配合前端那麼多的裝置,所以我們把服務放到雲端是最適合的了!!! 當然,其實自己架Server也,提供服務也OK,但太累了…;講了那麼多,終於要帶到今天所說的這個服務,假設今天我們要弄一個推播的服務,可以自動地將訊息推到各個裝置上,如果自己架設要處理的事情太多,從IIS的配置等等,實在是太麻煩了;雖然可以使用Azure Cloud Service的Web Role或是Work Role,但想到要寫Work Role去對Queue和DB做處理,也是要花上一點時間,所以,今天Microsoft聽到我們這些懶人的聲音,喔,不是,為了讓我們更專注於Mobile App的開發上,所以在Azure提供了我們Mobile Service這個服務!!( 對不起,說了很多廢話… )

Mobile Service當然不只是單純的提供推撥,也提供了行動裝置儲存等等的機制 ( 使用SQL Server來儲存資料,並利用安全的REST來將JSON為基底的ODATA格式,傳送於Mobile和Server之間 ),而且還可以輕鬆的定義資料的驗證,其次,Mobile上,也常常需要身分的驗證,Mobile Service也都幫你簡單的搞定了!!( 其實,前面感覺兩段感覺都是廢話,這段才是重點… )

接下來,我們不多說,我們直接使用官方提供給我們的範例,先來體驗一下!!( 這次沒有Hello World了.. )

( 目前依舊處於Preview階段,所以目前只提供Win Store App,也就是Win 8 Metro Style App的服務,未來Azure會提供iOS和Android等服務進來,另外,整個範例需要Visual Studio 2012和Windows 8,所以沒有裝的人,就只能看看圖了。)

建立Mobile Service

首先我們要先建立一個新的Mobile Service,當然,要選擇我們熟悉的New按鈕,如果沒看到這個服務的人,或是不能選的人,可能是因為還沒有申請這個服務,可以從這裡提出申請。

image

接下來,選擇Mobile Service,並選擇Create。

image

這裡輸入我們想要的URL,然後因為要存Mobile Service的Data,所以需要使用到Database,如果想使用目前已經有的Database,可以選擇現有的Database,那下一頁的時候,就會要求你輸入原來那個Database的帳號與密碼,但如果決定使用新的Database,就必須選擇建立一個新的,也就是選擇Create a New SQL database。因為實驗的關係,就選擇建立一個新的吧!!當然,最後的地區,原本應該要選擇東亞,但無奈的是,現在Preview階段,只有東美…

image

因為我們是選擇建立一個新的DB,所以接下來要設定DB,簡單的就是取名子,輸入DB的Login Name等等,但這邊可能會有人有疑惑,為什麼這邊又要選擇New SQL Database Server,原因很簡單,上面那張圖,是告訴Azure,我們要使用舊的DB還是建立了一個新的DB,而到了下面這張圖,因為我們決定建立新的DB,我們又可以選擇,要建立一台新的SQL Server,還是要把這個Database掛在以前建立好的SQL Server下,因為我們無論是SQL Server或是Database都要建一個新的,所以我們這邊選擇New SQL Database Server。

image

如果上圖有勾選Configure advanced database settings,就會進入到下一頁,也就是設定一下SQL Server的版本,看是要Web或是Business,基本上Business,只不過是最大的Size可以比較大,但相同的,用越大的Size當然也就越貴;最後設定一下定序。

image

然後我們就可以看到他在建立中。

image

到這邊就算建立完成

下載範例與執行

建立好之後,我們就可以進入剛剛建立好的Mobile Service。

image

其實這邊已經可以看到他有許多功能了,但我們先選擇閃電雲,也就是英文DASHBOARD旁邊那個圖示;然後就可以看到這個畫面,並選擇Create a new Windows 8 application這個選項,我們先快速的初體驗一下。

image

首先,我們要先下載新的Mobile Service SDK。

image

如果沒有裝的話,編譯會出現如下圖錯誤。

找不到 SDK “MobilesServicesManagedClient, Version=0.2.0.0”

image

下載與安裝的過程就不詳細敘述了,就下一步就可以了。

image

安裝中。

image

完成之後,我們要先建立TodoItem Table,也就是在SQL Server上開Table啦!!,點一下Create TodoItem Table;接下來,選擇你喜歡的語言,不過很可惜的,目前只有C#和JavaScript;最後並選擇下載。

image

下載的是Zip檔案,自己找地方存吧。

image

解開後,我們點一下專案黨,也就是sln檔案。

image

然後就可以順利地透過Visual Studio 2012打開,我們這邊利用模擬器執行。( 不用模擬器也是可以啦,只是我抓圖方便,所以使用模擬器=v= )

image

如下,這就是官方提供給我們的Win Store App。

image

我們可以從1的位置那邊Key值進去,並按下Save,按下去沒多久,就會在2的地方出現,當我們從2的Checkbox按下去,就又會消失喔!!,這就是整個Win Store App的功能,反正就是實作出簡單的Todo List。

image

這就是簡單的範例程式。

回頭看看

接下來,我們稍微回頭看看,我們點選Data。

image

其實我們從Mobile Service的服務,就可以看到相關的資料了,我們可以看到Name是TodoItem,然後目前還有一筆尚未勾選( INDEXES 為 1 ),總共紀錄有兩筆( RECORDS為 2 ),我們再點一下TodoItem。

image

就會進入到詳細資料,其實這就是DB裡面的資料。

image

我們從DB那邊看,是一樣的。( 至於怎麼進Azure SQL Service,就不是這篇的主題了,所以請原諒我審略進去查看資料的步驟。 )

image

到這邊,簡單的範例就完成了!!

後記

就如前面所說,其實如果自己要處理,還是可以慢慢寫出來這些東西,但整個工程可能會很麻煩,所以Azure提供Mobile Service服務,讓我們能快速地使用;當然,今天用的是官方的範例,可能大家對於許多細節是有疑惑的,這部分,小弟我會在這幾天慢慢補齊,等不及的人,也可以直接去MSDN看說明喔!!

參考資料

ALM - 使用Visual Studio 2012的分鏡腳本,並與TFS的Work Item Link

$
0
0

老實說,這次這個主題真難下,把他歸類到TFS也不是,因為這是Visual Studio裡面的新功能,但如果把他歸類到Visual Studio,又很在這篇介紹到和TFS Work Item Link的部分,所以考量之後,就把它歸到整個ALM流程下面了。

Visual Studio 2012這次除了漂亮又符合程式設計師黑暗的人生之黑色的介面外,其實還有許多新功能,而這次,要談的其中一個功能就是分鏡腳本,當我們安裝完Visual Studio 2012之後,就可以從開始列,找到PowerPoint分鏡腳本的功能。

image

點下去之後,其實就會開啟整個Power Point,不過小弟我因為是使用Office 2013 Preview的版本,所以開起來是英文版的,如果是使用Office 2012,那是中文的,大家可以不用擔心。

所謂的分鏡腳本,就是可以讓開發人員或是PM來和需求人員輕鬆又愉快地談畫面應該如何呈現,早期談論畫面的時候,我們可能用手來畫,可能會用很多張紙來解釋程式的流程;佛心一點的,可能就直接用設計工具來設計 ( 然後客戶就會以為你已經快寫完了…然後時間就被壓榨… );但今天,新版的Visual Studio則提供了"利用Power Point"來畫UI的功能,這就是分鏡腳本;我們可以從Storyboard Shapes的地方,快速的選擇畫面上的原件,甚至,也可以自行的剪貼想要的畫面,也因此,讓溝通更為方便!!甚至可以讓客戶自己來畫!!

image

甚至,大家也知道,PowerPoint原本就可以製作簡單的動畫效果,所以也可以製作出,簡易的UI,讓客戶能更加瞭解,是怎樣去做動作。

與TFS的整合

相信有玩過TFS的人都知道,TFS有Work Item,而在Scrum下面,會有一個Product Backlog的Work Item來記錄使用者的需求。( 有需要的人可以參考這裡 );所以我們就可以把畫好的UI,並且和Product Backlog進行連結,未來查到這個Product Backlog的時候,就會知道,當初談論的畫面是長怎樣;我們可已透過Storyboard Links來進行連結。

image

當然,這個PowerPoint檔案必須要放在共享的位置上,不然會發生錯誤;通常我們再配合Team Foundation Server的時候,我們可以把這個PowerPoint放在SharePoint上面;但如果今天你是使用Team Foundation Service時,就沒有SharePoint可以使用了,不過也沒關係,我們還是可以存到SkyDrive。

image

我們可以透過存檔到SkyDrive,來讓Work Item順利連結,也可以讓別人打開Work Item的時候,可以順利開啟這個檔案。

image

如下,我們就可以順利進行連結了。

image

就這樣。

後記

其實Visual Studio的分鏡功能,就和一般在畫PowerPoint的使用上沒甚麼兩樣,所以小弟我這邊就沒有很詳細的敘述;也因為大家有時都會比較注重在畫UI的上面,而忽略掉,其實可以和TFS整合的部分,所以順便利用這篇帶出了和TFS Work Item整合的方式;最後又因為也些人可能是使用Team Foundation Service,所以這篇也把重點放在如何放到SkyDrive來解決沒有共用區的問題,但不管怎樣,相信這個新功能,未來一定會讓大家更為方便與使用!!

Windows Azure - 使用Mobile Service來處理行動裝置APP的Data

$
0
0

上一篇體驗完Mobile Service的強大後,今天我們繼續延續微軟官方的教材;這次的內容在說明,當我們建立了行動裝置APP( 這裡使用Win Store App來舉例 ),一定會有資料需要和後面的資料庫等作處理;通常我們會怎麼做!?,第一天,準備好資料庫 ( 不要問我為什麼要一天,上班總是要有摸魚時間嘛 ),第二天開始撰寫Service,第三天休息上網聊天打屁,第四天撰寫一下傳遞用的物件,第五天正式整合,然後可能因為失敗,假日還要來繼續加班;當然,對於神人大大門來說,可能一天就搞定了,但就算是一天搞定,還是要處理很多事情,所以今天,我們介紹的Mobile Service Data篇,他輕鬆地幫我們解決這些問題!!讓我們可以只要花短短一天的時間,就做完全部的事情,讓我們剩下四天,都可以輕鬆的打混!!(疑!?)…

這篇目前不會講太多的技術原理,未來可能會在這篇補完,也有可能另外寫一篇;這篇的重點,是希望大家快速地感受到,Mobile Service的好處。( 當然,另外一個理由,也是因為直接翻譯官方教學而來XDD,有些細節還沒深入去看… )

在開始前,這篇範例需要使用到Win 8和Visual Studio 2012,如果沒有的人,也可以直接看圖,我幾乎把所有的圖都截下來了,如果轉快一點,搞不好會出現動畫的效果喔!! ( 不要當真阿!! )

實際要做的人,需要先去下面網址下載範例,然後就可以正式開始了。

http://code.msdn.microsoft.com/Get-Started-with-Data-in-8c9239e6

開啟應用程式

下載完後,裡面會有如下圖的東西,可以放到你喜歡的位置,但不要放到資源回收桶!!

image

利用Visual Studio 2012打開後,並且啟動起來 ( 使用模擬器,不知道的人可以參考上一篇 ),就會開啟如下圖的應用程式,當我們在左邊的TextBox輸入資料後,並點擊Save後,就可以在右邊看到;其實這就是典型的超簡單TodoList。當然,不會這樣就結束了。

image

目前下載下來的範例,是將資料存到本機端,我們可以從下面程式碼看到,會有一個TodoItem來存放輸入的TextBox資料 ( 也就是TextInput.Text ),並且利用InsertTodoItem方法來存放這個物件。

private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
    var todoItem = new TodoItem { Text = TextInput.Text };
    InsertTodoItem(todoItem);
}

當然,這個方法,其實也只是利用items.Add方法來存放,通常看到Add,我們大概就可以猜想到了;而第一行,只是來設定TodoItem的Id值而已。

private void InsertTodoItem(TodoItem todoItem)
{
    todoItem.Id = items.Count == 0 ? 0 : items.Max(i => i.Id) + 1;
     
    items.Add(todoItem);
}

其實再往上捲一點,就可以發現到了- -,items就是ObservableCollection型別。

public sealed partial class MainPage : Page
{
    private ObservableCollection&lttodoitem&gt items = new ObservableCollection&lttodoitem&gt();
...
}

到這邊,其實整個app很簡單,就是存到Collection裡面而已,但是,我們當然希望能把資料存到雲端上面去啊!!這樣資料才有機會跨平台,甚至可以保存!!所以接下來,我們要開始建立Mobile Service的Data。

建立Mobile Service

當然,建立任何Service都擺脫不了這個加號。

image

然後我們選擇Mobile Service,如果不能選的人,請看上一篇

image

接下來,我們要輸入超帥氣的URL,並且選擇新的Database,你也可以沿用舊的啦,這就看各人了。

image

然後我們要輸入一下Database的名稱,然後我們可以決定這個Database要放置的Server是哪一台( 這邊我們建立新Server ),並且給管理的名稱,和PW。

image

完成後,就會看到他在建立中,其實還滿快的。

image

完成後,我們就可以進去建立Data。

image

這邊選擇DATA。

image

這裡選擇ADD A TABLE。

image

我們決定一下DB的Table名稱,按下去之後,就會在DB建立好Table,另外,我們可以從下面的選項,來控制App存取權限。

image

完成後,就會看到TodoItem已經建立好了,我們可以再進一步的點進去看看。

image

點進去後,我們可以發現,裡面已經先幫我們建立好了一個Id欄位。

image

我們回到主畫面,按下CONFIGURE。

image

我們可以看到下面有一個Dynamic Schema已經啟動了,當這個啟動的時候,如果有JSON物件傳到Mobile Service時,Mobile Service就會自動地幫我們建立需要的欄位!!有沒有超方便的啦!!

image

到這邊,Mobile Service就已經設定好了,接下來,我們要開始改寫原本的程式。

改寫程式

首先,我們要先有安裝Mobile Services SDK,沒安裝的人,記得先去下載。

接下來,回到Visual Studio 2012,將Windows Azure Mobile Service Managed Client給參考進去。

image

我們第一步,需要先在App.xaml.cs這個檔案做設定,如下程式碼,我們要在AppUri輸入Mobile Service的網址,並且在AppKey的地方輸入存取Key。

public static MobileServiceClient MobileService = new MobileServiceClient(
    "AppUrl",
    "AppKey"
);

Key可以從下圖位置找到。

image

整個填法,可以參考下圖;另外,原本官方給的範例程式,其實都已經寫好了,只是把程式碼給註解了,把註解拿掉就可以;我們可以從下圖看到需要填值的位置。

image

接下來,我們要進入MainPage.xaml.cs進行修改,除了要加Microsoft.WindowsAzure.MobileServices這個NameSpace外,我們還要在建構子那邊,把原本的ObservableCollection那行給註解,並且把原本註解的程式碼復原,如下圖。

image

為了方便觀看,我又把程式碼貼出來,需要復原的程式碼如下,我們改用了MobileService的物件。

private MobileServiceCollectionView&lttodoitem&gt items;
private IMobileServiceTable&lttodoitem&gt todoTable = App.MobileService.GetTable&lttodoitem&gt();

接下來,在InsertTodoItem的地方,把todoItem.id那行註解調,現在交給DB來自動跳號了,並且在InsertTodoItem方法前面加上async,因為我們要用到非同步的功能,最後再把原本被註解掉的程式碼復原。

image

一樣,要復原的程式碼貼在這邊;我們利用todoTable物件,來進行新增資料的動作,當然,怎樣丟到Windows Azure上去,Microsoft都幫我們處理好了。

await todoTable.InsertAsync(todoItem);

接下來,來到RefreshTodoItems這個方法,我們先把如下圖的程式碼復原就好,

image

程式碼如下,這邊這裡,是當我們按下Refresh按鈕時要處理的事情,我們一樣使用Microsoft提供給我們的Mobile Service物件,來將資料塞到items裡面來。

items = todoTable.ToCollectionView();

最後,我們要處理UpdateChecktdTodoItem這個方法,因為一樣要使用到非同步,所以方法前面要加上async。

image

當然,這邊也是用todoTable物件來更新資料庫的資料。

await todoTable.UpdateAsync(item); 

剛完成之後,我們可以再把程式Run起來,一樣填填看,基本上,和原本的程式沒啥兩樣。

image

但我們回到管理介面,其實可以發現,資料已經丟到Windows Azure上了,更神奇的,連欄位都幫我們建立好了!!

image

到這邊,也算告一個段落,我們只剩下一點點東西,還沒調整。

小小的調整

或許有玩過第一版的人,會發現,這次在Checkbox打了勾之後,就不會消失了。

image

所以我們針對這個問題,利用Linq進行小小的修改;我們回到RefreshTodoItems這個方法,並把原本的註解,現在換上第二段程式碼。

image

同樣,為了方便起見,我把它貼到下面;我們這邊用Linq來過濾,如果為False,才會傳回到items。

items = todoTable
.Where(todoItem => todoItem.Complete == false)
.ToCollectionView();

然後我們再按一下Refresh按鈕,就會發現已經勾勾的Todo,全都不見了。

image

這樣,程式就告一個段落了!!

後記

當然,這個App還有些少許的東西沒加上去,所以並沒有第一版的完整,但這個就不在Mobile Service的教學範圍內了;這篇主要的目的,還是希望大家能感受到,Mobile Service強大的功能,也省略掉很多開發的時間,相信體驗過後,一定會發出一聲,哇!!的讚嘆聲!!

參考資料

Windows Azure - 刪除Windows Azure上的VM

$
0
0

或許大家會說,刪除Windows Azure這有甚麼難的,不就按下Delete就好了嗎??的確,按下Delete就可以簡單的刪除掉Virtual Machine這個服務,但初學者可能會常常忽略掉,當按下刪除,其實Windows Azure他只有把服務給刪除,但是提供這個服務的Disk其實是還存著的,而且也會使用到Storage的空間。

我們可以從Virtual Machines的DISKS進去看到,deleteVM-deleteVM-0xxxx這個Disk其實是ATTACHED to(連結至) deleteVM 這個VM,而這個Dsik的型別是OS Disk,也就是存放著作業系統用。

image

當然,這個Disk的本質就是一個VHD檔案,存放在Storage裡面,所以我們可以從Storage的管理裡面發現到這個VHD。( 不知道怎麼進去的人,也沒關係,等下講解如何刪除的時候,就會有詳細的進入步驟了,這邊只是讓大家理解,VM Server他的檔案放置原理。 )

image

現在我們回頭來回顧一下,應該就能理解,當我們建立一個新的VM的時候,就是會在Storage建立一個VHD的檔案,而這個檔案會關連到Virtual Machine Service裡面,變成Disk,而最後,Virtual Machine Service在Cloud Service上,使用剛剛建立好的Disk來跑VM。

所以當我們按下刪除的時候,其實也只有刪除Virtual Machine Service,但其實Disk、Cloud Service、Storage也都還存在,所以也要一步一步地把這些東西給刪除掉
( 其次,還有一種可能,小弟印象中,就算停止VM,也還是會被收費的,所以如果今天真的有很長一段時間不需要用到,就可以先刪除VM Service,但是因為此時的Disk都還保留著,所以當需要的時候,又可以重新建立起來;但這樣做的話有幾點需要注意,第一,Storage是會被持續收費的,第二,重新佈署後,ip位置就會不一樣了。)

現在,我們看一下,如何完整刪除Virtual Machine的步驟。

首先,我們要點一下,想要刪除的VM,並按下下方的刪除按鈕。

image

等過一段時間後,VM Service就會刪除了,題外話,此時的Disk是還存在的,所以如果想要把VM救回來,還是可以從My DISKS這邊救回來的。

image

回到主題,現在我們從Virtual Machine Service,Disk進去看,還是可以發現剛剛的deleteVM還存在( 眼睛厲害的人,可能會發現,剛剛已經把VM Service刪除掉了,為什麼左邊的圖示下面還有"1”這個數字?,那是因為實際上,小弟還有一個VM服務正在跑,只是截圖的時候,把它塗白了。 )

image

接下來,我們就可以用從Delete Disk的按鈕,來刪除Disk。

10/9更新,目前新版本的這裡,會多一個選項,可以選擇是否完全刪除,或是只刪除Disk,請看這邊

image

題外話,這時候如果還要使用這個Disk做建立,就會找不到了,因為此Disk已經被我們刪除了。

image

繼續題外話,這時候也不是說完全沒救,就如前面說的,雖然我們刪除了Disk,但實際的VHD還是存在Storage裡面,所以我們還是可以從下圖的位置,來建立回Disk。

image

這邊Name要取一下,會用在Disk畫面上,然後我們可以透過資料夾按鈕,來挑選我們存放Windows Azure Storage的VHD;因為是作業系統,所以一定要打勾;最後,也因為這個作業系統是Windows,所以最下面要選擇Windows,然後按下打勾,就會建立Disk回來。

image

最後的題外話,這時後,我們就可以從新建立VM了。

image

再度回到主題,( 很抱歉,跳來跳去,大家就全面啟動這部電影吧… ),當Disk刪除之後,我們繼續往下做,其實就如剛剛所說,Virtual Machine Service會建立一個Cloud Service,但如果VM Service沒有刪除,是看不到這個Cloud Service的,而雖然刪除了VM Service,Cloud Service就變成空的了,也不會有甚麼影響,但礙於美觀因素,我還是會把他刪除。當然,不知道未來Windows Azure會不會自動幫我們刪除就是了;選擇Cloud Services,然後點進去。

image

進入後,我們可以發現這個Cloud Service是空的,我們可以直接使用下面的Delete 按鈕來刪除。

image

刪除礙眼的Cloud Service XDD後,我們就可以開始刪除Storage裡面的VHD了,要記住,Windows Azure沒有資源回收桶阿!!,刪除了就Bye Bye了;從Storage點進去,如果有多個Storage,也可以自己找找看,看放到哪一個Storage裡面了。

image

然後,進入vhds目錄裡面。

image

就可以發現這次我們要準備刪除的vhd檔案了!!,按下刪除就可以了!!

image

全部刪除完後,這篇文章也告一個段落了。

後記

這些是一些小小眉眉角角的地方,第一次使用的人,相信一定不知道還要刪除那麼多地方,但是看過一次後,我想大概大家都不會有甚麼問題了,也希望這篇,能讓大家對於VM Service有更多的了解!!

Microsoft TechDays 2012

$
0
0

今年的TechDays 2012也順利落幕了!( 記得去年也講過同樣的話.. ),現在有已經很多的前輩們寫了非常多的上課筆記,或是心得,而小弟也因最近這幾天比較忙碌,到現在才開始整理一下資料。( 不過,當是遊記,完全沒有上課筆記XDDD )

老實說,今年是第三年參加TechDays 2012,畢竟小弟自己現在在MS的圈子裡面翻滾,所以對於這每年一次的大拜拜,不管排除任何困年,一定會來參加( 甚至面試時,就會先和長官說,我每年都要參加TechDays喔!! ),而今年,比較特別的一個地方,就是今年是以合作社群擺攤的方式參加,所以整個TechDays,只有上一堂Ruddy老師的課程,和第一場的大會演講;而且三天整個就是忙翻,一直跑來跑去,也沒辦法逛攤位,領證品,或是東看看西看看之類的,這次甚至連天瓏書局都沒有去QQ,所以這篇文章,就用不同的角度XDD,來看一下今年的TechDays… ( 其實就是遊記啦!! )

這次因為是合作社群,所以其實前一天,小弟就已經搭車北上,先整理會場,順便看看狀態,這也是第一次在TechDays前一天抵達會場,實在很難想像,其實當天下午,就已經一票人在準備,所以炫麗的外表,其實背後每個工作人員都很努力,大家在逛的時候,享受會場設施的時候,也不要忘記默默地感謝背後付出的人。

到達會場,第一件事情就是拍照,這次我們的Logo也出現在會場看板了喔XDD,也很感謝好友Ruffy,之前花不到5min,就把這個Logo設計完畢… ( 還一次畫出三個= =… ),到達會場後,就已經看到twMVC的創辦人DemoDino,已經到達會場了,而也看到我們的Logo也掛上去了=v=。

IMG_0861IMG_0862

其實布置會場還好,並沒有多大的事情需要注意,就這樣,第一天就結束了。

接下來的三天,我們和twMVC都在會場超級忙XDD,也可以從下圖看到,所以家當都擺出來了,Demo還帶了微投影機,結果人家第一個問題就是,這台投影機多少錢= =…而我們這邊,也擺出超不適合MS場子的MAC電腦,不過我們是要展示,就算在MAC上,Win 8還是可以很流暢的運作,更展現出"沒有Visual Studio 2012到不了的地方",就算使用MAC,也可以打開VS2012進行Coding ( 當然,是跑在win 8下面… )

SONY DSCSONY DSC

其實整個一字排開,還滿有魄力的XDD,明明攤位桌上沒啥東西XDDD

SONY DSC

再一張XDD,我們兩台電腦,一台是放Facebook粉絲團,一台是官網,這次我們也沒有使用向其他攤位按讚送贈品或是留Mail的方式( 其實本來想… )但後來也考量到,那樣FB很容易被鎖住,其次,我們贈品也沒多好,最後,我們還是希望用直接介紹的方式來介紹我們。( 好啦,其實是我們懶得搞… )

SONY DSC

這是我們這次送的贈品,是種子造型的書籤,雖然說,沒有人看出來XDD,其實我們是希望藉由我們每個社群的努力,來讓台灣的軟體變成一棵大樹!!而這個書籤,也很感謝Shannon的支援,讓我們短短時間內,就解決了這麻煩的事情!!

SONY DSC

這次會場中間,有擺設實體的主機,也有派專家在那邊直接解答問題,這真的是超讚的!!我相信大家平常都會累積非常多的問題,而這次有這種攤位,真的是佛心來者;左下的圖示則是展示著主機,右邊的則是問專家活動!!

SONY DSCSONY DSC

另外兩側則是Windows Azure的展覽,老實說,我還滿喜歡這次Windows Azure的布景,滿想把那些雲給拆回家,掛在牆上XDD,左下這邊會有人教,如何申請等等的相關問題,而右邊則是由各個專家來回答Windows Azure的問題,拍照的時候,剛好是小朱前輩

SONY DSCSONY DSC

這不知道是誰畫的XDDD老實說,畫的還滿可愛的=V=。

SONY DSC

除了一樓會場外,二樓也有MVP攤位,這次MVP攤位還滿大的,除了平常貢獻就很多的社群朋友有領牌可以自由進出外,也有開放給一般人來認識MVP,據說這次大家最好奇的就是黑暗執行緒大大了XDD,一堆人想來見黑暗大的廬山真面目 ( 不過下面那張圖不是黑暗大喔- - );當天也有Cosplay士官長在會場跑來跑去,據說,Cosplay的人是不能講話的XDD,而且兩天扮的人不同,身高也不同XDD,下圖是德瑞克老師與士官長的拍照。

SONY DSC

第二天晚上,剛好抽到微軟科技人饗宴,這次報名方式,還要填寫300個字以上的心得,然後才能抽獎,不過好在,平常我就滿會喇賽的,所以就很順利地寫出300個字XDD,然後又很僥倖的抽到獎;原本是打算給別人去,但後來看到現場只會有120個名額,重點是又有四顆SSD,一台筆電,換算下來,中獎機率超高的,怕抽到獎後,因不是本人,會很嘔,所以還是跑去參加了。

SONY DSC

不過其實當天吃的很不錯,每一桌都有一個主題,但是…為什麼沒有Visual Studio 2012和Team Foundation Server!!!,當天的主題有Win Server 2012和Azure桌,還有SQL Server 2012桌,System Center 2012桌,Office和SharePoint桌和Exchange Server桌。( MSDN表示,那我們勒!? );當天有玩一些小遊戲,最後就開始賓果抽獎,想當然爾,我沒抽到= =…( 還是比較懷念以前的IE9 Party )

SONY DSC

這是我唯一上的一堂課,是最崇拜的老師,Ruddy老師的課程,因為以前第一次聽Microsoft的研討會,就聽到Ruddy老師的TDD,也因此掉入了這個深淵讓我對程式的設計有了不一樣的想法,而無論是老師上課的方式,老師的技巧,都是小弟我模仿的對象,所以無論如何,就只有這門課,絕對不能不去上!!而這次,老師也找我一起拍照留念,感動到真的快當場哭出來了XDD,這種感覺,就像是聽到FinalFantasy交響樂,或是如右下角和微微告別的那一幕,過往的跑馬燈都跑出來了,真的是超開心的一件事情啊!!( 題外話,我竟然忘記用我的相機拍照= =,而且現場Ruddy老師黑暗大拍照時,我竟然完全不知道那就是黑暗大阿!!! ),當然Ruddy老師的課程也是精彩萬分,這次意想不到,連海賊王都可以拿來講敏捷開發的團隊!!甚至暗黑騎士,也有深遠的含意!!未來大家選課,也千萬不要錯過喔!!

IMG_0873IMG_0874

最後,這次會場集集樂,集到的獎品是水壺一個,其實還不錯!!而中庭的大型海報,也有我們的Logo喔!!大家可以找找看在哪邊=v=。

SONY DSCSONY DSC

到會場結束前,這次MVP牆,大家也簽名簽得差不多了,其實可以看到密密麻麻的簽名;大家可以找的到小弟的簽名嗎!?( 沒錯,字最醜的那個就是了= =||| )。

IMG_0881

這次的TechDays 2012,雖然沒有去上到課程( 據說今年王森前輩表演火燒Kinect直升機奪下第一,還有Eric哥的鄉民Demo,拿到了五星Eric之稱!! ),但學到的東西,並不比去上課學到的少,聽著老師的經驗談,前輩的人生大道理,還有MVP群對社群貢獻的熱情,甚至很多隱藏的高手間的交流!!也很謝謝Reneata姊和Katherine妹,讓我有機會採訪小朱前輩死DemoOuch哥保哥( 影片太羞了,就不拿出來了= = ),這些都比技術還要寶貴!!當然,也還要感謝當天來幫忙顧攤位的DH、Denile、Kande、Kyle,還有不斷來支援的JimChiachiJames等大家,謝謝你們!!!!

最後,還要感謝大鈞哥和Eric哥,還有台灣微軟,給我們這個機會,讓我們的社群,可以站上這個大舞台,也在這邊祝福大鈞哥,一路順風!!

SONY DSC

給永遠的TechNet - 大鈞哥!

Windows Azure - 在VM上掛載新的硬碟

$
0
0

最近突然想到,在Windows Azure上,遺漏了這篇,所以今天就利用一點時間,把這篇文章給補完。

我們在Windows Azure建立好VM之後,如果是使用最小的Virtual Machine,那可能會如下圖,只有少少的Local Disk和少少的Temporary Storage,如果是大一點Virtual Machine,可能就會發現Termporary Storage變得比較大,或許大家會很開心!,原來建立Windows Azure的VM,還會附加一顆那麼大的HDD!!但實際上,不要被騙了 ( 其實Windows Azure也沒騙人啦XDD ),Termporary Storage是系統用的,所以實際上,並不會確保資料一定會安穩的保存下來,簡單的說,每台Virtual Machine,就只有Local Disk是可以用的。

image

所以實際上,如果我們要建立Database,或是要存放大量的資料,還是請放到Storage,才是正確的作法,所以今天這篇文章,就來看看,如何輕輕鬆鬆地附掛上一台HDD。

我們首先,先從Virtual Machines點進來。

image

點進來後,下面有一個Attach的按鈕,按下他,我們就可以附加一顆新的硬碟到VM裡面去。

image

接下來,我們要輸入File Name和Size,其中File Name代表著的是存放到Storage,Blob的名子,接下來輸入Size,也就是預期的硬碟大小。

image

當按下去後,過一段時間後,就會建立完成,我們就可以在VM裡面看到硬碟已經新增完成了!!

image

這樣就完成了!!

後記

當然,我們也有辦法從本地端傳上去掛載,但這部分我們未來在解說,下一篇我們很快地教大家如何把硬碟和VM分離。


Windows Azure - 從VM將掛載上的硬碟分離

$
0
0

前一篇,提到如何掛載一顆新的硬碟,而這篇,小弟我會教大家,如何分離;雖然分離很簡單,但實際上,如果忘記刪除,這些資料還是會存在Storage裡面,沒錯,也就是會不斷地扣錢;當然,如果口袋夠深,就沒甚麼差了XDD;如果之前已經有看過刪除VM這篇文章,那後段辦是一樣的,可以不用在讀下去。

我們目前這台VM已經掛了一個新的硬碟進去,如下圖。

image

如果要分離VM和這顆硬碟,我們可以這樣做;一樣,先從Virtual Machine這個地方點進去。

image

點進去之後,這次我們選擇Detach Disk,就可以進行VM與硬碟分離的動作。

image

接下來,會跳出這個視窗,我們選擇要分離的硬碟後,並按下確定。

image

經過一段時間後,我們就會發現,目前這顆硬碟已經移除了。

image

就如前面所說,雖然已經移除,但不代表已經從Storage給刪除,所以我們還要進行兩個步驟;首先,我們要先把在Virtual Machine的硬碟給移除,如下,我們進入Virtual Machine後,選擇Disk,在選擇我們剛剛建立好的Disk,並按下Delete Disk,透過這個步驟,我們就可以把這個Disk從Virtual Machine給移除。

image

雖然這樣做之後,會從Virtual Machine的Disk列表中消失,但不代表已經從Storage給刪除了;所以接下來,我們要進入Storage進行.vhd檔案的刪除。

image

進入後,我們點選CONTAINERS,在選擇vhds目錄。

image

我們可以找到VMDemo-VHDemo.vhd檔案,也就是我們一開始取的名稱,選擇後,在按下下方的Delete,就可以順利刪除了。

image

刪除完後,就不會讓Storage繼續扣繳費用了。

後記

其實這東西還滿簡單的,但這邊稍微點出一點點一般人可能會遺漏的地方,但相信看完一次之後,就不會忘記了,所以這篇也獻給第一次使用的人。

Visual Studio - 在Visual Studio使用Adobe免費的Source Code Pro字型

$
0
0

今天在FB聽到Eric哥發布了一個令人開心的事情,那就是Adobe提供了免費的Source Code Pro字型給大家使用,而且也可以使用在Web上喔!!而線上同時,很熱血的Demo大馬上就弄出了比較圖出來!!如下: ( 點下去可以看到大圖,左邊是修改過,右邊是原始 )

黑色版本。

JmUrM

白色版本。

mRgzG

如果有興趣看全文的人,可以參考這篇,而今天,我們只針對如何更改Visual Studio字型作探討。

首先,我們可以到這個網址進行下載。

image

下載回來後,解開壓縮檔,我們就可以看到很多的字型,裡面有ttf和otf,otf是比較新的字型格式,我們可以直接點兩下,就可以進行安裝 ( 小弟的環境是win 8..如果點兩下不行安裝的朋友們,可能就要進入控制台來安裝。 ),而ttf和otf只能安裝其中一種,所以安裝完otf的字型就可以了。image

然後進入Visual Studio 2012,並選擇工作,選項。( 此時小弟的畫面,其實字型已經改成Adobe提供的字型了。 )

image

然後進入字型與色彩,然後可以看到預設是細明體。( 原本寫這篇文章,是要記錄一下,未來如果要還原,還知道要選擇哪一個字型,但後來才發現,還有使用預設值這個選項…Orz… )

圖片 1

把字型改成Source Code Pro Semibold就可以了,當然,也可以依據使用者的習慣,改成其他的Source Code Pro字型。

image

以上,完成收工!

後記

在這邊感謝Demo大的授權圖片使用,與Eric哥提供的消息,有使用Visual Studio的人,千萬要來用用看喔!!比以前的字型漂亮許多!!

Windows Azure - 使用FTP上傳檔案到Web Sites並取得MySQL帳號與密碼

$
0
0

這篇也是補完之前沒寫的,其實Terry哥也已經寫過同樣的一篇了,但為了小弟我自己查詢方便,所以就花一點點時間,將這篇給補完。

我們在使用Windows Azure Web Site的時候,可以透過很多種方式進行部署,例如TFS、Visual Studio,但是對於一般的ASP、或是PHP等使用者,可能會覺得使用FTP比較方便,或是有其他的ID,可能會要求使用FTP的方式自動來上傳;所以今天,我們就來看看,超簡單!使用FTP來上傳檔案到Web Sites。

下圖,是今天準備要拿來Demo的網站,裡面主要是放PHPBB這個Open Source Application ( 因為有人反映,小弟我每次都拿Word Press做Demo XDD,所以這次換成PHPBB… ),但真正的重點是右下角的Download Publish Profile這個按鈕,其實所有的帳號密碼都藏在這個裡面。

image

按下去後,會需要下載,我們可以直接使用記事本開啟。

image

我們可以使用userName來搜尋關鍵字,就可以找到ID,而旁邊的就是Password,但要注意,用userName搜尋,可能會找到兩個ID,要找到有斜線的那一個,如下圖,ftpdemo\$ftpdemo才是真正的FTP登入用ID。

image

接下來,我們只要把在Windows Azure管理介面的FTP HOSTNAME複製,貼到檔案總管( 或是其他FTP工具 ),然後再把剛剛找到的ID和Password貼上去就可以了。( 當然,底下的圖,Password只有一個v…當然不可能那麼短,那是因為斷行的關係… )

image

登入之後,我們可以看到兩個資料夾…LogFiles是存放WebSite Log用的,其實這邊Log的目錄,就和尚圖FTP HostName連結下的Diagnostic Logs位置一樣,而Site目錄,在點進去的wwwroot就是存放著網頁的目錄。

image

如下圖,存放著PHPBB的檔案。

image

同場加映,如果今天要管理MySQL資料庫,也可以從這邊得到帳號密碼。

image

就是這樣簡單!!但不知道門路的人,還真的會找不到>"<…

後記

這部分相信未來會持續改進,畢竟目前也還在Preview階段,大家就先將就著用吧=v=

Windows Azure - 刪除Windows Azure上的VM (10月新功能)

$
0
0

上一篇,我們提到了刪除Virtual Machine後續還要處理一堆事情,相信微軟也聽到了大家的心聲,所以在10月的新功能裡面,可以讓我們快速刪除;而這篇的誕生,也是為了怕大家以為,刪除Virtual Machine都要那麼麻煩,所以多附上這篇,如果想要清楚知道整個Virtual Machine的刪除過程,也可以重新參考上一篇

如果有讀過上一篇,那應該會很清楚,刪除完Virtual Machine後,其實Disk也還在,Storage也還在,如果依照以前的方法,就會要處理很多步驟,而這次Microsoft的更新,多了一個選項給我們;一個是Delete Assoclated VHD,另一個是Retain Assoclated VHD。

image

如果選擇Delete Assoclated VHD,就不用進行麻煩的Blob刪除,他會全部刪除光光.( 但是Cloud Service還是要自己手動 ),如下圖,就找不到剛剛建立的VHD。

image

但如果選擇Retain Assoclated VHD,就會把VHD給保留在Blob裡面,如下圖,deletest2的VHD就被保留下來了,所以如果不想全部刪掉的人,可以用這個方式留下來。

image

後記

基本上就這樣,這是新版的貼心小改變,也提供給需要的人。

Windows Azure - 錯誤!! 當使用現有的Disk來建立新VM時產生A lease conflict occurred with the blob

$
0
0

其實這篇,是昨天在將做VM轉Image的練習,當作完刪除Disk後,準備要刪除Blob裡面的VHD,卻出現錯誤,後來查了一下MSDN,後來有找到一篇類似的解決方式 (雖然案例和我的狀況完全不同),但感覺滿好玩的,就順便邊做邊翻譯。

根據原文,主要是在寫當,我們要使用VHD來創建不同的VM時,會收到這個錯誤

A lease conflict occurred with the blob <blob url>

當然,一般人應該不會無聊到把一個VHD拿去建立很多個VM,所以根據官方的說法,這個問題是出現在,當合約超過額度,時間等等,而造成系統自動把服務停止;當我們恢復合約( 繼續繳錢 )後,要使用之前的VHD來重建VM,卻建立不起來的情況。

所以官方,就使用了傳說中的命令列模式!! ( 老實說,真不喜歡用… ),也就是使用Windows Azure PowerShell…來處理,根據原文文件指出,可以使用 Lease Blob API來把契約關連給斷開,至於要怎麼用呢?,就是使用Windows Azure PowerShell來載入Microsoft.WindowsAzure.StorageClient.dll,並使用LeaseAction Enumeration.

神奇吧!?沒錯,我也是覺得很神奇,要不是找到官方這篇文章XDD,誰知道可以這樣搞呢~~

開始!!

我們先要下載Windows Azure管理工具,因為小弟是Windows環境,就使用Windows的管理工具。

image

接下來,安裝程式會呼叫Web Platform Installer 4.0,當然,也沒甚麼好猶豫的…反正也只能安裝了= =…

image

安裝完後,就可以找到Windows Azure PowerShell。( 找不到的人,可以利用搜尋功能,搜尋Windows Azure PowerShell,通常裝完後,就可以從開始那邊找到。 ),另外,記得用administrator權限開啟!!

image

接下來,在管理工具裡面輸入Get-AzurePublishSettingsFile,他就會自動地開啟瀏覽器,並且提供publishsetting檔案給我們下載,我們當然就是下載啦!!( 建議存到預設的下載目錄,這樣等下就不需要再打路徑了。 )

image

那剛剛下載的Publishsetting是做甚麼的呢,當然就是給Windows Azure PowerShell用的,如果沒有這個檔案,Windows Azure PowerShell自然就沒有權限…,所以下一步,我們要把這個檔案給Windows Azure PowerShell來使用;我們要在Windows Azure PowerShell裡面下這個指令Import-AzurePublishSettingsfile $env:userprofile\downloads\*.publishsettings 很簡單吧!!所以剛剛才建議大家直接丟到下載目錄,這樣這時候就可以直接複製上面那個指令到Windows Azure PowserShell裡面了,如果不是放到下載目錄,而是放在其他目錄,則後面的路徑,就要記得自己改喔!!

image

接下來,我們要把下面這烙烙長的程式碼貼到記事本上面去!! ( 就不要問小弟我內容了= =|| ),並且取名為BreakLease.ps1 ( 副檔名是ps1阿!不是txt喔,所以要用另存新檔的方式喔!! )

Param([string]$Uri = $(Read-Host -prompt "Please specify a blob URL"))

$ProgressPreference = 'SilentlyContinue'


echo "Processing $Uri"

echo "Reading storage account information..."
$acct = Get-AzureStorageAccount | ? { (new-object System.Uri($_.Endpoints[0])).Host -eq (new-object System.Uri($Uri)).Host }
if(-not $acct) {
    write-host "The supplied URL does not appear to correspond to a storage account associated with the current subscription." -foregroundcolor "red"
    break
}

$acctKey = Get-AzureStorageKey ($acct.StorageAccountName)
$creds = "DefaultEndpointsProtocol=http;AccountName=$($acctKey.StorageAccountName);AccountKey=$($acctKey.Primary)"
$acctobj = [Microsoft.WindowsAzure.CloudStorageAccount]::Parse($creds)
$uri = $acctobj.Credentials.TransformUri($uri)
echo "Confirmed - storage account '$($acct.StorageAccountName)'."


$blobclient = New-Object Microsoft.WindowsAzure.StorageClient.CloudBlobClient($acctobj.BlobEndpoint, $acctobj.Credentials)
$blobclient.Timeout = (New-TimeSpan -Minutes 1)
$blob = New-Object Microsoft.WindowsAzure.StorageClient.CloudPageBlob($uri, $blobclient)


echo "Checking whether the blob is currently registered as a disk or image..."
$disk = Get-AzureDisk | ? { (new-object System.Uri($_.MediaLink)) -eq $blob.Uri }
if($disk) {
    write-host "The blob is still registered as a disk with name '$($disk.DiskName)'.  Please delete the disk first." -foregroundcolor "red"
    break
}
$image = Get-AzureVMImage | ? { $_.MediaLink -eq $blob.Uri.AbsoluteUri }
if($image) {
    write-host "The blob is still registered as an OS image with name '$($image.ImageName)'.  Please delete the OS image first." -foregroundcolor "red"
    break
}
echo "Confirmed - the blob is not in use by the Windows Azure platform."




echo "Inspecting the blob's lease status..."
try {
    $blob.FetchAttributes()
} catch [System.Management.Automation.MethodInvocationException] {
    write-host $_.Exception.InnerException.Message -foregroundcolor "red"
    break
}

echo "Current lease status: $($blob.Properties.LeaseStatus)"

if($blob.Properties.LeaseStatus -ne [Microsoft.WindowsAzure.StorageClient.LeaseStatus]::Locked) {
    write-host "Success - the blob is unlocked." -foregroundcolor "green"
    break
}



echo "Unlocking the blob..."
$request = [Microsoft.WindowsAzure.StorageClient.Protocol.BlobRequest]::Lease($uri, 0, [Microsoft.WindowsAzure.StorageClient.Protocol.LeaseAction]::Break, $null)
$request.Timeout = $blobclient.Timeout.TotalMilliseconds
$acctobj.Credentials.SignRequest($request)
try {
    $response = $request.GetResponse()
    $response.Close()
}
catch {
    write-host "The blob could not be unlocked:" -foregroundcolor "red"
    write-host $_.Exception.InnerException.Message -foregroundcolor "red"
    break
}

$blob.FetchAttributes()
echo "Current lease status: $($blob.Properties.LeaseStatus)"

write-host "Success - the blob is unlocked." -foregroundcolor "green"

如下圖,存完後的檔案。

image

接下來,因為要執行的shell,會牽涉到安全性,所以我們要先把Windows Azure PowserShell的安全性原則解除,輸入Set-ExecutionPolicy unrestricted,然後按下Y。

image

接下來,我們就要Run剛剛建立的Shell之後,就會要求我們填入一些資訊,第一個要填的是Blob的URL,我們可以回到Windows Azure的管理介面,Blob那邊找到 ( 也就是要刪除的那頁 ),我們把URL全部框起來,利用左鍵,並按下複製,其實就可以將全部的URL複製下來了喔!!如下圖,貼上去就可以了。

image

然後根據官方文件,就會吐出這些東西。

BreakLease.ps1 -Uri 'http://clstorage.blob.core.windows.net/vhds/testvm1-testvm1-2012-06-26.vhd'
Processing http://clstorage.blob.core.windows.net/vhds/testvm1-testvm1-2012-06-26.vhd
Reading storage account information...
Confirmed - storage account 'clstorage'.
Checking whether the blob is currently registered as a disk or image...
Confirmed - the blob is not in use by the Windows Azure platform.
Inspecting the blob's lease status...
Current lease status: Locked
Unlocking the blob...
Current lease status: Unlocked
Success - the blob is unlocked.

到這邊,就算完成了!!

後記

而官方也提供了另外一個方法,是利用CloudXplorer工具,利用此工具的Rename功能來複製VHD ( 沒錯,就是Rename功能- -.. ),然後再用新的VHD來建立Disk;其實這個方法也滿簡單的,至於要用哪個做法就看看官如何選擇啦~~

參考網址

Windows Azure - 刪除VHD時,產生There is currently a lease on the blob and no lease ID was specified in the request 錯誤

$
0
0

好,前篇介紹了刪除VHD的一些問題,但老實說,還是沒有辦法解決小弟我目前碰到的問題XDD ( 所以上一篇是做爽的… ),但也因為上一篇的經驗,得到了一些啟示,我先來把問題列出來吧。

其實是,昨天在將做VM轉Image的練習,當作完刪除Disk後,準備要刪除Blob裡面的VHD,卻出現這個錯誤

There is currently a lease on the blob and no lease ID was specified in the request

image_thumb[1]

從字面上來解釋,就是這個Blob的ID還在被使用中,所以無法刪除;而這個時候,第一個當然就是會想到VM裡面的Image或是Disk,但是進去看,都是空空的= =… ( 如果Image或是Disk,又或是VM有掛載的話,通常只要移除就可以順利解決問題了,但這邊是很不幸的,完全沒掛載的狀況下…還是不能刪除 )

image_thumb[4]

Disk裡面一樣找不到。

image_thumb[5]

本來想說,這種問題,大概只有官方那邊能解決,正打算用中文信和印度工程師溝通的時候,剛好翻到MSDN有解決的方式,但做完發現,恩,官方的狀況,和我的狀況是不同的XDDD,但還是給了我一盞明燈,沒錯,就還是要使用Windows Azure PowerShell來處理,如果不知道Windows Azure PowerShell的人,或是不知道如何設定的人,可以參考一下上一篇

好,那到底該如何解決這個問題呢?,其實如果管理畫面看不到,那我們就使用Windows Azure Powshell來處理吧!!

其實我們只要下Remove-AzureVMImage –ImageNmae image的名稱 就可以順利刪除了,如下圖;刪除之後,就可以回到Windows Azure管理介面進行刪除Blob的處理了。

image

喔,如果你忘記當初Image的名稱,還可以使用Get-AzureVMImage來取得目前Image的名稱!!

沒錯就是這麼簡單…

後記

其實從這次體會到Windows Azure Powshell的強大,未來有機會再持續研究看看吧!

參考資料

GitHub - GitHub初體驗

$
0
0

GitHub其實之前就有聽說過了,是非常大的線上版本控制服務,但小弟自己之前都一直使用TFS,所以也沒有好好的來玩玩看GitHub,而這次,因為Windows Azure可以整合GitHub,另外一方面,也考慮到,一些Demo的Code都沒有地方放,所以想說,那就來試試看GitHub吧。

GitHub的文章,其實Google可以找到非常的多,而且小弟也算GitHub的新手,所以就不要誤人子弟XDD,我們這篇就純入門就好,相信想要深入的人,可以找到更多的教學。

小弟也知道,用GitHub或是Git的人,很多都是用MAC,但這篇會以Windows OS為主,所以如果使用MAC的人,可能要讓您失望了,因為這篇講的流程,MAC都不適用。

好的,首先,我們第一步,當然就是去GItHub申請一個帳號,我們可以從GitHub的官網,如下圖的位置開始申請。

image

基本上,申請是不用錢的,但是天底下怎麼可能會有免費的事情!?所以這邊的免費,是有條件的,也就是我們放在GitHub的Code都必須是要公開的;如果想要不公開,就必須付費了…小弟的Code本來就不值錢,所以當然就沒這個困擾,所以就選擇免費的嚕!

image

接下來,我們不需要輸入很多資料,只需要輸入使用者名稱、Email、Password就可以完成註冊,有沒有很方便阿!?

image

註冊完後,他會有一些教學,或是到這裡觀看教學,其實他的教學雖然是英文的,不過也滿簡單的,通常丟到Google翻譯就看得懂了XDDD;因為我們這邊主要是要示範Windows,所以下圖的位置要選擇Windows。

image

其實GitHub非常貼心的幫我們準備了GitHub for Windows這套軟體,讓我們不用再去裝很多東西,就可以方便我們進行管理,甚至比小烏龜還要簡單,而這邊,我們就針對GitHub for Windows這套軟體來做解說;當我們按下Windows按鈕後,我們就可以從下圖的位置下載到GitHub for Windows

image

下載完,安裝完後,我們就可以從桌面發現GitHub的捷徑了,點一下,我們就可以打開軟體。

image

打開後,GitHub for Windows會要求我們做一些設定,並且會幫我們建立SSH的金鑰,未來方便我們連線到GitHub,真的是超佛心又方便的!!首先,我們要在下圖登入我們剛剛申請好的GitHub帳號。

image

然後這邊要設定Git,這邊的Email記得要和GitHub相同,這樣GitHub才能做個繫結,基本上小弟是都Key一樣的使用者名稱和Email…

image

接下來,GitHub for Windows會尋找這台電腦有沒有Repo ( 也就是放版控檔案的目錄 ),因為是第一次,所以當然沒有。

image

接下來,我們要實際新增一個Repo,Repo的全名其實就是Repository,中文翻譯成倉儲,簡單的說,就是放Code或是檔案的地方,我們可以訂一個目錄,而這個目錄裡面的東西就等於是要進行版控的地方。

image

我們可以給新的Repo取一個名稱,甚至是一些註解,當然,最重要的就是要選擇目錄了,而Push to github也記得要打勾,因為我們最後要push到GitHub的 ( 放在Repo的檔案,會先存放在本機 ),Keep this code private就不用勾了,因為要打勾,我們就必須要付錢啦XDD ( 就是私人Repo,可以不公開 )。

image

完成後如下圖,可以發現Repo已經完成了,這時候我們可以快點兩下紅色框框。( 紅色框框是小弟我自己畫上去的… )

image

我們就可以看到,目前裡面有哪些檔案了;這時候,選擇上方的Tools,並選擇open in exploer就可以打開檔案總管來看看實際的目錄內容。( 預設是不會有README,README是小弟後來自己加上去的… )

image

如下,其實就和上圖一樣,而這時候,我們利用記事本,新增一個README的文字檔看看,並且把README.txt的副檔名去掉,變成README。

image

並且在README裡面加上Hello GitHub;至於為什麼要這樣做,等下就會知道了。

image

完成後,我們回到GitHub for Windows,我們就可以利用右邊黃色的區塊,來進行Commit的動作,也就是簽入的動作。

image

完成後,我們可以看到,右邊有簽入完成的資訊,而雖然本地端已經簽入了,但還是要push到GitHub上,所以我們要按下左上方的publish,來丟到GitHub上面。

image

完成後,我們回到GitHub網站,就可以看到我們本機的東西,已經放到GitHub上了,而且下面有個README的框框,裡面也是我們剛剛打上去的資訊;沒錯,其實README的內容,就是用來介紹、說明這個Repo,這個Project的用途,來讓大家知道這個專案是做甚麼用的喔!!

image

到這邊,基本的入門就算結束了,完全沒用到任何一個指令!!非常適合懶人的小弟我,但也不代表指令不重要,有機會,大家還是可以看看指令如何下。

後記

當然,後面還有很多好玩的東西,未來有機會再來介紹介紹,如果大家等不及了,也可以直接去官網看看喔!!

參考網址


LocalDB - 在LocalDB建立資料庫產生錯誤

$
0
0

至從有了LocalDB後,Windows Azure的模擬器使用LocalDB,開發專案也不再使用SQL Server Express或是SQL Server Compact,全部都改用好用的LocalDB。

不過前幾天要在LocaDB上面建立一個資料庫,卻失敗,如下。

image

錯誤訊息如下。

資料庫 'Test' 的 建立 失敗。  (Microsoft.SqlServer.Smo)

執行 Transact-SQL 陳述式或批次時發生例外狀況。 (Microsoft.SqlServer.ConnectionInfo)

A file activation error occurred. The physical file name 'Test.mdf' may be incorrect. Diagnose and correct additional errors, and retry the operation.
CREATE DATABASE failed. Some file names listed could not be created. Check related errors. (Microsoft SQL Server, 錯誤: 5105)

後來查了一下資料,原來是因為路徑沒給…( 雖然上面是寫預設路徑… )

image

解決的方法很簡單,只要指定一下路徑就可以了。

image

這樣就完成啦!!

後記

雖然這篇文章很短,但希望能幫助到剛好遇到問題的人=V=,最後,也感謝Terry哥的這篇文章,讓小弟可以很快地使用指令控制LocalDB喔!!

參考資料

Window Azure - 準備Web Sites與Git的連線

$
0
0

前一篇,小弟體驗了GitHub,但其實小弟的目的,是想來測試GitHub與Web Sites,所以我們延續前一篇,我們這篇來講解一下,設定Web Sites與Git連線的初期步驟!! ( 不過其實也很簡單,偶而也讓小弟混一混文章吧XDD )

下面這個是我們這要要準備Demo的Repo,裡面其實放的就是ASP.NET MVC 4的基本樣板,小弟預先把他簽入到GitHub上面了。

image_thumb[1]

接下來,小弟新建了一個稱為test5的Web Sites,至於為什麼要做test5!?,因為test1~4都被人用掉了Orz….,建立完成後,我們進入Web Sites,就可以從右下角,看到set up Git publishing,就可以設定設定Web Site的Git佈署。( 目前設定後,就不可以刪除了,除非整個Web Site砍掉重建,所以用在正式環境的人,要考慮清楚 )

image_thumb[9]

然後我們要輸入,新的使用者名稱和密碼,根據內文的意思是說,Git和FTP無法使用Live id進行驗證,所以這邊我們需要輸入一個新的使用者名稱和密碼提供佈署之用,這樣,我們就不需要在Web Site設定任何的憑證。

image_thumb[7]

完成後,我們就可以看到以下訊息,我們的Git Repository已經準備好了;是的,Windows Azure就會在Web Site上面建立一個Repo,當還沒設定Git的時候,我們可以連到Web Sites進去看看,就只有wwwroot。

image

但如果設定了Git,就會多出兩個目錄,一個是紀錄佈署Log用的,一個是存放原始碼的Repo目錄 ( 也就是Repository目錄 )。

image

完成後的畫面如下,我們就可以使用Git指令Push到Windows Azure,或是使用GitHub來觸發。

image_thumb[12]

到這邊,就設定完成了,如果第一次設定完成後,未來如果要設定其他的Web Site,就不會再跳出叫我們輸入帳號密碼的視窗,這點大家要注意;如果想改帳號密碼,也可以透過Reset deployment credentials的連結做更改。

image

就是這樣的簡單!

後記

這是基本的設定Git,簡單的說,Windows Azure會幫我們在遠端建立好Repo,接下來,我們要開始測試,如何自動佈署。

Window Azure - Git與Web Site的自動佈署

$
0
0

前一篇,我們將Web Site的Git設定好了,也在Web Site裡面建立好了Repo,也在GitHub上準備好了原始碼,那接下來呢?沒錯,現在就只剩下Web SIte裡面Repo和GitHub的橋樑,我們只要把這兩個連起來,就可以了!!

聽起來感覺很困難,但實際上,卻是非常的簡單,Windows Azure的自動化,都幫我們處理好了,連一行指令都不用下… ( 嗯,還是要打打帳號密碼啦。 )

所以我們繼續下去,我們點開Deploy from my GitHub repository,然後選擇Authorize Windows Azure。

image

接下來,惠要求我們輸入帳號密碼,輸入完畢之後,就會問我們,是否允許Windows Azure。

image

完成之後,我們就可以從下拉選單找到我們要連結的Repo。

image

恩….這樣就結束了…,但這樣只有Link阿!!,自動佈署呢!?

image

這時候,我們點離開Deployments,再點進來Deployments,就可以發現,其實Windows Azure已經自動幫我們開始佈署了!!

image

我們可以看到,網站就這樣建立好了… ( 好快… )。

image

這時後,我們連FTP進去看,其實可以發現wwwroot還是一樣是網頁的目錄( 廢話… ),但是多了Repository的目錄來存放原始碼;此外,也多了一個Deployments的目錄來存放佈署的Log。

image

當然,我相信,這樣大家一定還意猶未盡,所以我們改一下ASP.NET MVC裡面的內容,加上個HelloWorld!!

image

然後再利用GitHub進行簽入,如果不知道如何使用的人,可能要看一下之前的文章了…

image

也別忘記按下Sync,讓本地的檔案和GitHub進行同步。

image

當同步完成後,如果我們再來看Deployments,我們可以發現,沒錯!!Windows Azure又自動的幫我們佈署了!! ( 完全不用作甚麼事情啊…突然覺得自己好廢… )

image

打開網頁一看,恩,Hello World出現了…,所以從頭到尾,除了帳號密碼外,只打了Hello World這幾個字…

image

就這樣,這次的實戰就到此結束…愉快的一天…

後記

雖然很簡單,但是實際上,也去翻了一些Git的相關資料,畢竟,之前對Git和GitHub算是完全沒用過的狀態,所以有些觀念點,也花了一些時間釐清;但對於常用Git的高手們,這些文章大概就是小菜一疊吧XDD;但不管怎樣…Windows Azure真的是方便到一個極致,有用Git管理網站的人,絕對要來試試看喔!!( 然後再來好好教教小弟XDD )

參考資料

LocalDB - 在LocalDB上使用SSMS還原資料庫產生錯誤

$
0
0

2012/11/09 更新 – 保哥的這篇文章,有教大家手動修改註冊碼,來修正這個錯誤喔,而Terry哥也提供了一篇文章,利用T-SQL去修改註冊碼!!大家有興趣也可以連過去看看=V=

很久很久以前,有一個案子 ( 好像在說故事一樣… ),那時後再使用SQL Server Express當作本機的資料庫開發;而最近,因為需求的關係,需要進行一些調整,老實說,我也懶的(不想)去裝SQL Server Express,畢竟用LocalDB用的好好的,為啥還要去裝呢!?於是,就先把資料從SQL Server Express備份下來 ( 不要問我,為什麼不直接拷貝mdf和log檔案..因為小弟我直覺就選擇了備份XDD ),然後拿到現在的電腦上,準備利用SSMS對LocalDB進行匯入…

然後悲劇就發生了… ( 所以這是一個悲慘的故事… )

image

設定 'Microsoft.SqlServer.Management.Smo.Settings' 無法使用屬性 BackupDirectory。此物件可能沒有此屬性,或因為存取權限不足而無法擷取。 (Microsoft.SqlServer.Smo)

或是選擇還原資料庫,也是出現同樣的錯誤。( 當然,我不是要還原到msdb..這裡只是隨便選一個,重點是上面的紅色框框。 )

image

好吧,既然發生錯誤,就要去尋找怎樣解決,於是找到了這篇;內文大致上是說,因為路徑的關係,所以要去改註冊碼,要不然就是要用T-SQL解決,而目前保哥也提供了一篇文章,來教大家如何修改註冊碼,而Terry哥也提供了一篇文章,則是利用T-SQL去修改註冊碼!!有興趣的可以連過去看看,小弟這邊就不針對註冊碼的地方做教學了 ( 沒事不要和那幾位神人PK~~ )。

OK,不管怎樣,小弟是沒去改路徑,而且既然T-SQL可以解決,那就用T-SQL吧,反正小弟我也不是一天到晚要復原XDD,也順便學習一下T-SQL…( 路人 : 我看其實是寫這篇文章的時候,根本沒去測試註冊碼的方式…還那麼多理由… )。OK,不管怎樣,那些是神人的做法XDD,平民的小弟我,還是用T-SQL就好!!,接下來,我們先看一下這個T-SQL。

RESTORE DATABASE FROM DISK = '' WITH NORECOVERY,
MOVE 'example_dat' TO 'C:\Temp\.mdf', 
MOVE 'example_log' TO 'C:\Temp\.ldf'

OK,相信如果是DBA,大概就已經知道如何還原了,後面也可以不用往下看了XDD,( 後面就單純介紹這個指令而已了。 )。

那這個T-SQL是甚麼意思呢,簡單的說,就是恢復Restore資料庫(廢話!!),而要恢復的這個資料庫來源來自於哪邊,所有DISK後面要接位置;例如DISK = ‘C:\Temp\ss.bak';接下來的WITH,表示我們後面還要加上一些還原的選項,例如這邊我們的NORECOVERY,就是代表著,要執行NORECOVERY的作業 ( 好啦,後續會講到…);而Move表示我們要將原本SQL Server的mdf和ldf檔案的位置,改變到新的位置。

嗯,有聽沒有懂!?,那我們先執行一下下面這個指令看看;我們可以利用這個指令列出備份檔案的資料。

RESTORE FILELISTONLY FROM 
DISK='C:\Temp\SC' 

會出現如下圖,大家可以看到下面第一個是LogicalName( 這邊資料很抱歉,必須隱藏一下,總之就是Sxxxx_Data和Sxxx_Log ),而第二個是PhysicalName,也就是原本mdf和ldf檔案存放的位置;那大家可以發現甚麼?是的,原本的mdf和ldf位置,是放在SQL Server Express的預設目錄下面。

image

所以我們回到剛剛的T-SQL,大家應該就可以了解的到,為什麼要用Move了吧,因為原本的備份檔,mdf和ldf檔的位置是在SQL Server Express的預設目錄下,而小弟我因為要移到新的電腦上,所以要存放mdf和ldf的位置,就和原本的不同了,所以要使用Move指令改變位置,所以我們的T-SQL會改成這樣;Move後面接的是LogicName的名稱,也就是Sxxxx_Data,而To接的就是要搬到那裡,然後也順便把DISK填入備份檔的路徑。

RESTORE DATABASE FROM DISK = 'C:\Temp\SC' WITH NORECOVERY, 
MOVE 'Sxxxx_Data' TO 'C:\Temp\Sxxxx.mdf', 
MOVE 'Sxxxx_Log' TO 'C:\Temp\Sxxxx.ldf'

另外,備註一下,如果Sxxxx_Data填錯,則會出現以下錯誤,所以我們才要用RESTORE FILELISTONLY來列出名稱。

邏輯檔案 'xx' 不屬於資料庫 xx' 的一部分。請使用 RESTORE FILELISTONLY 列出邏輯檔案名稱。

所以,這樣就好了嗎!?如果這樣執行下去,你會發現,DB的確是還原了…但會出現如下圖;式的會一直卡在"正在還原"。

image

那是為什麼呢?其實是因為NORECOVERY這個參數的關係,這個參數的意思,官方是這樣寫的。

指示還原作業不回復任何未認可的交易。 如果稍後必須套用另一個交易記錄,請指定 NORECOVERY 或 STANDBY 選項。 如果 NORECOVERY、RECOVERY 和 STANDBY 三者都沒有指定,預設值就是 RECOVERY。 在使用 NORECOVERY 選項的離線還原作業期間,無法使用資料庫。

就如官方的最後段話,使用NORECOVERY後,會無法使用資料庫;其實那是因為SQL Server的還原機制有三種,不過再談下去,就越拉越遠了XDD,大家可以參考Cary的這篇,或是Funkent的這篇

總之,因為小弟我的備份,是全部備份下來,也沒使用差異備份,所以我們要把NORECOVERY改成RECOVERY,要把T-SQL改成這樣。

RESTORE DATABASE SDB
FROM DISK = 'C:\Temp\SC' 
WITH RECOVERY,
MOVE 'Sxxxx_Data' TO 'C:\Temp\Sxxxx.mdf', 
MOVE 'Sxxxx_Log' TO 'C:\Temp\Sxxxx.ldf' 

這樣又可以了,如下圖,因為SQL Server Express是舊版的db,所以也會自動升級。

image

就這樣,完成了人生第一次的T-SQL 備份還原XDDD ( 話說有點撈過界了XDDD )

後記

老實說,雖然有點撈過界XDD,但也學習到不少東西,希望DBA高手們,不要鞭我喔XDDD

參考資料

ASP.NET MVC – ASP.NET MVC 4 2012 Fall Update

$
0
0

ASP.NET MVC Fall 2012 Update 擁有更多的新功能!!還有更多的樣板!!

看到這段話,就讓我想到xxx-online,

xxx-online 新版更新,擁有更多的裝備,還有更多的副本!!

只不過,玩online看到新版的時候,心情是很躍樂的,而看到技術上的更新…恩…只好犧牲躍樂的心情來寫文章了QQ…

最近的技術更新,其實都慢慢有縮短的趨勢,當然,不知道算不算是敏捷開發的方式,讓這些新功能快速地釋出,來讓白老鼠大家能快速的測試與回饋,不過不管怎樣啦XDD,既然身活在這一行,也只能當成每季都有無敵大魔王可以打,抱持的愉悅痛苦的心情,來寫寫這開箱文吧。( 未來技術,會不會也朝向組隊出團的境界阿= =… )

( 其實本來是想偷懶,寫新版的SSDT開箱文,但結果Terry哥動作更快…馬上寫了這篇,所以小弟只好來開ASP.NET MVC Fall 2012 Updae (QQ) )

軟體需求

此更新只能在Visual Studio 2012和Visual Studio Express 2012 for Web。

官方支援

此更新為prerelease,官方是不support的,有問題必須去論壇問。

更新項目

因為沒有很仔細的一個一個去研究,所以有誤的話,請和小弟說,小弟會盡快更正;同樣的,未來有時間,再針對每個項目去做介紹。(原文在此,當然,根據小弟的習慣,不可能完全照意思翻啦…有興趣的可以去看原文喔!!)

以下為更新項目 :

Web Publishing (網站佈署)

  • Website發佈的強化 (現在Web Application Project和Website project有相同的發佈體驗了喔!!)
  • 選擇式發佈 – 你可以選擇一個或多個檔案來進行發佈(在佈署到Web Deploy endpoint之後),詳細如下:
    • 可以佈署選擇的檔案
    • 可以知道本地文件和原端文件之間的差異 
    • 可以利用遠端的檔案來更新本地端檔案,或是利用本地端檔案更新遠端檔案。 ( 真繞舌= =)

New ASP.NET MVC Templates ( 新!!ASP.NET MVC 樣板 )

  • Facebook樣板 – 只需要簡單的幾個步驟,就可以使用Facebook樣板可以快速地建立一個Facebook Canvas應用程式並且取得相關資料,有興趣的人可以參考這篇 http://go.microsoft.com/fwlink/?LinkID=269921
  • Single Page Application ( 單一頁面應用程式!!復活!!) – 單一頁面應用程式,使用了knockout.js和ASP.NET Web API,這個樣板時做了代辦事項應用程式,並且示範了使用JavaScript和HTML5搭配RESTful Server API。
  • FixedDisplayModes package – MVC專案樣板已經包含了新的FixedDisplayModes這個NuGet package,這個Package包含了MVC 4錯誤的解決方法。關於更多訊息請參考MVC Team的文章(http://blogs.msdn.com/b/rickandy/archive/2012/09/17/asp-net-mvc-4-mobile-caching-bug-fixed.aspx)。

ASP.NET Web API

Web API 增強了非常多的新怪物功能

  • ASP.NET Web API OData
  • ASP.NET Web API Tracing
  • ASP.NET Web API Help Page
ASP.NET Web API OData (再度復活!!)

當你需要建立含有豐富商業邏輯的資料來源OData Endpoints時,ASP.NET Web API OData 給了你非常多的靈活度。 最後 ASP.NET Web API OData預設會包含在ASP.NET MVC 4 專案樣板 ,同時也提供NuGet (http://www.nuget.org/packages/microsoft.aspnet.webapi.odata).

ASP.NET Web API Tracing

ASP.NET Web API Tracing 整合了.NET Tracing和Web API來追蹤數據。而目前的Web API 專案樣板預設也設定為啟用。你的web API所追蹤的數據會送到Output window並起供IntelliTrace來使用. 你也可以在任何的應用程式來使用ASP.NET Web API Tracing,你只需要安裝ASP.NET Web API Tracing NuGet package。 (http://www.nuget.org/packages/microsoft.aspnet.webapi.tracing)。

更多的ASP.NET Web API Tracing 資訊 http://go.microsoft.com/fwlink/?LinkID=269874

ASP.NET Web API Help Page

The ASP.NET Web API Help Page 預設已經包含在Web API專案樣板裡面. 簡單的說,ASP.NET Web API Help Page 會自動的產生說明文件,包含了HTTP endpoints、支持的HTTP methods, 參數等等。 你也可以在任何的應用程式來使用ASP.NET Web API Help Page ,你只需要安裝ASP.NET Web API Help Page NuGet package(http://www.nuget.org/packages/microsoft.aspnet.webapi.helppage).

更多的ASP.NET Web API Help Page 資訊http://go.microsoft.com/fwlink/?LinkId=271140

Windows Azure Authentication ( Windows Azure驗證 )

Windows Azure Authentication可以讓你簡單的把Windows Azure Directory使用在Web application上,你可以使用Office365的使用者,或是使用企業自己的domain帳號等等。

更多的Windows Azure authentication資訊http://go.microsoft.com/fwlink/?LinkID=267940

ASP.NET SignalR (大推)

ASP.NET SignalR 可以讓你簡單的建立(怎麼每個都講簡單建立…)即時的ASP.NET應用程式,而不是使用WebSockets!!

更多的ASP.NET SignalR資訊 http://go.microsoft.com/fwlink/?LinkId=271271

雖然未來小弟練習的時候,還是會寫心得筆記,但現在已經有很多前輩寫了SignalR的文章喔!!絕對值得推薦!!有興趣的可以點進去看看喔!!91哥小朱前輩黑暗前輩 ( 神人三人組~~ )。

ASP.NET Friendly URLs

ASP.NET FriendlyURLs一樣可以非常簡單讓Developer建立乾淨的URL!! ( 就是那種不包含.aspx的URL ),而且不太需要怎樣的設定!!,重點是,他也支援ASP.NET 4.0的應用程式!!其次,他也可以簡單的讓Developer加入mobile支援到現有的application上,並且支援Desktop和Mobile View的切換喔!!

更多的ASP.NET Friendly URLs資訊 http://www.hanselman.com/blog/IntroducingASPNETFriendlyUrlsCleanerURLsEasierRoutingAndMobileViewsForASPNETWebForms.aspx

安裝

基本上就是這樣,但同樣的目前也是會有一些問題存在,大家可以參考這裡,如果想當白老鼠勇者的人,就可以到這裡去下載安裝了。

image

下載的是exe檔,點兩下就可以開始裝了 ( 別忘了把vs2012先關閉喔 )。

image

過一下子,就完成了!!

image

然後,大家就可以開始被玩體驗了!!

後記

同上,有興趣的人就衝吧XDDD,小弟有空,再來打打看這些大魔王吧!!~

參考網址

Viewing all 144 articles
Browse latest View live