2012年8月29日

Windows Azure - Mobile Service初體驗!!

原本想說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看說明喔!!

參考資料

2012年8月28日

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

前一篇有提到使用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=

參考資料

2012年8月23日

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

當在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 - 注意!!超過免費額度的話!!東西會被自動移除

其實本來沒有打算寫這篇的,但後來發現大家都會覺得,超過的話,頂多被停止服務而已 ( 小弟原本也是這樣想 ),但後來發現,實際上不是這樣,所以就寫了一下這篇來提醒大家一下。

以下是超過服務的畫面,其實在超過服務之前,Windows Azure就會提醒你,即將超過了,要不要打算付費,不過也完全沒停到服務會消失就是了- -…

圖片 1

後來忍痛選擇繳費後,可以看到如下圖,原本的Virtual Machines 和設定的Networks都消失不見了… ( 但Storage和DB還在… )

image

本來以為Cloud Service還在,但後來點進去發現,裡面也空了= =…

image

反正就是全部都被清空空了QQ…

後記

其實說真的,也不能完全怪說,為什麼把服務全部都砍掉了,畢竟佔在那邊,消耗的資源還是很可觀的;而且其實Microsoft針對重要資料,例如DB、Storage、和VM的VHDS其實也都沒砍掉 ( Cloud Server 要重新上傳與佈署就是了… 另外,小弟原本就沒使用Web Sites…所以不清楚過期後,Web Sites會變得怎樣…),如果需要將VM重新啟動回來,其實也不會很困難 ( 比較麻煩的大概就是IP又不一樣了- -||| ),總之,如果再測試期間,有在跑甚麼重要的服務,記得快要超過的時候,要好好的想一想,是否要付費下去,不然就會和小弟一樣,要花時間再重新建置…

另外,有一點也要說明清楚一下,是免費額度已經"炸掉",才會遭到移除,如果今天提前勾選願意付費,那自然也不會遭到移除,但如果已經炸掉後,才勾選願意付費( 像小弟這樣 ),那服務還是會被移除的…

總之,大家使用免費額度的話,偶而還是要去看一下目前的使用狀況怎樣喔!!

2012年8月22日

安裝有支援Silverlight、WPF、StechFlow版本的Blend for Visual Studio

為什麼要下這個標題!?裝完Visual Studio 2012後,不就會有Blend for Visual Studio了嗎??理由很簡單,大家看下圖就知道了,使用Blend for Visual Studio是不支援Silverlight、WPF的!! ( 他只能開Win 8 APP… )

image

目前官方也指出,他們也很抱歉,並且在努力改進…,而目前也提供了一個Blend + StechFlow Preview版本來解決Silverlight和WPF的問題;但同樣的,官方也提到一些授權問題,並且也提供了對應表,讓大家知道哪個版本可以開甚麼專案… ( 真的不想在這邊抱怨…)

image

好吧,回到重點,我們可以從這邊進行下載,然後開始安裝。

image

安裝過程。

image

到這邊就安裝好了。

image

然後我們可以從開始列裡面發現多了一個Blend + StechFlow Preview。

image

開啟畫面,就很明顯地寫著Preview。

image

打開後,就可以讀取Silverlight的XMAL了…

image

就這樣…

後記

只能說,這個過渡時期,如果有需要的人,就在等等,或是直接衝了…

參考網址