2014年1月17日 星期五

ASP.NET MVC 4 WebApi 多專案執行之間的資料傳遞

ASP.NET MVC 4 WebApi 中,一個方案底下可以掛上多個專案,在專案之間使用 Api 做資料傳遞,如果是以「 Windows Azure 雲端服務」專案,當然,部署到雲端當然沒有問題,因為各 Api 在溝通時,都已經知道要呼叫 Api 的網址了。

但是,在本機執行測試並不是這麼一回事,因為它執行後 IP:Port 會亂跳,而且是視載入狀況而決定它是哪一個 IP:Port,且如果使用 Windows Azure 雲端服務執行,還必須先啟動 Windows Azure 偵錯環境,多個專案就會啟動幾次,還會失敗,執行一次就非常耗時。

例如,有三個專案如下圖


執行後三個專案的 IP:Port 分別為:http://127.0.0.1:81/、http://127.0.0.3:82、http://127.0.0.2:81,且有兩個專案是失效的,而且下次執行後,IP:Port 還會不一樣,OMG,所以根本無法測試,如果你也遇到這種情況,使用下面方法解決:

1.

在方案內設定將所有執行 Azure 專案轉為非 Azure 專案,這個動作是要將所有網頁執行出來的網址都是 localhost。



2.

接著將每個專案都指定一個獨特的 port 號,這樣就能完全指定每一個專案執行出來的網址是唯一且不會變動的。


最後在各專案之間就可以先將其他的 Api Domain 寫在 web.config 方便取用,最後部署到雲端之前先將 Domain 改掉就可以了。




2014年1月15日 星期三

Azure Storage Explorer 輕鬆管理 Windows Azure 儲存體

Azure Storage Explorer 是一個可以輕鬆管理 Windows Azure 儲存體的工具,省去在一般管理時切換不同的 Blob、Table、Queue 甚至是不同的儲存體操作的時間,如果是私密的 Blob,可以很快的取得 Blob 在 SAS ( shared access signature ) 後的網址。初次使用,只需要做一次設定,往後即可方便且快速使用。

以下就說明 Azure Storage Explorer 安裝設定與基本操作。

1.

首先到 Azure Storage Explorer 官方網站 下載 Azure Storage Explorer 到本機硬碟。


2.

利用「傻瓜安裝法」將 Azure Storage Explorer 安裝到電腦。

3.

執行 Azure Storage Explorer 後會如同下圖狀態


4.

接下來就要做初始設定了,在 Azure Storage Explorer 點擊 Add Account 會跳出要輸入 Storage account name 和 Storage account key,此時要至 Windows Azure 選擇儲存體且取得儲存體的名稱與金鑰。如下圖所示設定:


5.

設定完成後,即可針對該儲存體的內容做新增或是調整,右側上方可以選擇該儲存體的 Blob、Table 或 Queue,而左上方可以新增、複製、更名、刪除 實體,而右邊中間區塊就是實體內的物件列表,若是 Blob 裡面就是檔案列表。雙擊某個檔案就會顯示該檔案資訊。


6.

由於 Table、Queue 操作較單純,功能很雷同,這裡就讓各位使用者去嘗試,在此針對 Blob 說明較獨特的功能做說明。

除了基本功能:檢視、複製、更名、刪除、上傳、下載,另外還有一個權限功能:

Blob 針對容器有三種權限設定,Private、Public Blob、Public Container,其中 Public Container 是只要知道這個檔案網址的人都可以對此檔案做動作,其他都必須要取得含有所謂的共享存取簽章( Shared Access Signature ) 的網址,以便讓系統知道這個網址是有權限讀取的。網址後面會帶取得這圖片的 token,而這 token 經過解密後,就可以得知使用者對這張照片所有的權限。

所以依照下圖所示,即可取得檔案含有共享存取簽章( Shared Access Signature ) 的網址。當然,你可以在這上面設定這張圖片的新增、寫入、刪除、列表功能,甚至是存取的時間。


Azure Storage Explorer 是一個很好用的工具,幾個鍵就等於在網頁上做很多動作,這可能要使用過後才會有這樣的感覺。


2014年1月14日 星期二

ASP.NET MVC 4 WebApi Help Page 建立自訂的說明文件

在建立 ASP.NET MVC 4 WebApi 專案,過程中它會建立一個 Help Page,協助開發人員對自己撰寫的 Controller 下註解,以便初次進入專案的開發人員快速了解每一個 Api 並且使用,且方便交接。


看這次的例子,此 Controller 有兩個 Api,如下圖所示:



看來此處的 Api 說明,並不是開發人員自己定義的,所以接下來的設定,可以使這些說明變成是開發人員定義的。

參考:Creating Help Pages for ASP.NET Web API

1.

在專案的 Areas 下有 Help Page 資料夾,這裡就是產生 Help Page 內容的 MVC,如有興趣可參考。 接著就把 App_Start 底下檔案 HelpPageConfig.cs 做修改:


config.SetDocumentationProvider(new XmlDocumentationProvider(
    HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")));

把此行註解拿掉以啟用,此行意思是建立一個 XML 檔案來存放開發人員定義的說明文件,存放位置為 ~/App_Data/XmlDocument.xml。

2.

此時對專案點擊右鍵 > 屬性 > 建置,對 XML 文件檔案方框打勾,設定存放位置為 App_Data/XmlDocument.xml。



3.

再去修改剛剛的 Controller Api,使用三個斜線的註解去說明此 Api 的功能為何,如以下所示:

/// <summary>
/// [後台] 取得 單一部門 資料
/// </summary>
/// <param name="id">編號</param>
/// <param name="language">語系</param>
/// <param name="date">日期</param>
/// <returns></returns>
public async Task<OM_Department> Get(Guid id, string language, DateTime date)
{
 // ...
}

設定到此,已經算是完成了。最後執行專案看看結果:



而 App_Data/XmlDocument.xml 產生的內容為:
<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Backend</name>
    </assembly>
    <members>
 
  ...
  
        <member name="M:Backend.Areas.orgmaintainer.Controllers.OM_DepartmentController.Get(System.Guid,System.String,System.DateTime)">
            <summary>
            [後台] 取得 單一部門 資料
            </summary>
            <param name="id">編號</param>
            <param name="language">語系</param>
            <param name="date">日期</param>
            <returns></returns>
        </member>
        
  ...
  
    </members>
</doc>

最後補充一點,必須每個 Api 上都要加上註解以說明,不然它是不會幫你自動產生,而會出現 「No documentation available.」。