[Azure] 將Application Insights加入至桌面應用程式

Microsoft Azure的雲端服務提供了相當多的功能
Application Insights是其中一項非常好用的服務,主要目的在於提供應用程式執行的記錄與狀態查看
目前雖然Application Insights能夠選擇支援的平台並沒有Windows Form的Desktop App
不過還是可以將這個好用的功能加到桌面式的應用程式中使用

要將Application Insights的功能加到桌面式應用程式中使用,可以依照下面的步驟來新增

在Azure端的設定
1.在Azure的服務中,點選Application Insights,並新增一個新的Application Insights服務在Application Insights之中新增一個新的服務2.設定Application Insights的服務,除了輸入Application Insights的名稱之外,請把"應用程式類型"設定為"Windows 市集應用程式"資源群組的部份,可以新增或是選擇現有的資源群組使用就可以

3.於建立完成的Application Insights服務中,在屬性頁面中,將"檢測金鑰"這個值複製下來,等一下在Visual Studio的專案中會用得到

到這邊,Microsoft Azure的Application Insights服務就已經設定完成,接下來可以打開Visual Studio,並建立一個新的Windows應用程式,並進行Application Insights的使用設定

1.在Windows應用程式的專案中,點選右鍵,並點選"管理Nuget套件"2.在Nuget套件管理員的畫面中,找到"Microsoft.ApplicationInsights.WindowServer"這個套件,並將它安裝起來3.安裝好套件的專案,會多了幾個檔案,如"ApplicationInsights.config"這個檔案,以及一些套件的參考,接下來,打開"ApplicationInsights.config"這個檔案,並在檔案中加上一行設定值

<InstrumentationKey>在這裡加上你的金鑰</InstrumentationKey>

這個設定值就是剛剛從Azure上複製下來的檢測金鑰4.加好金鑰之後,在表單上拉三個按鈕,分別是手動送出的事件,例外狀態的事件,以及更新Application Insights的按鈕5.接下來就可以在程式碼中加入我們希望送到Application Insights的訊息了,下面的程式碼,在當頁面讀取的時候會送出一個TrackPageView的訊息,而另外兩個Button也分別會送出一般的TrackEvent與TrackException事件

private TelemetryClient objTc = new TelemetryClient();

private void frmMain_Load(object sender, EventArgs e)
{
    objTc.InstrumentationKey = "在這裡加上你的金鑰";

    objTc.Context.User.Id = Environment.UserName;
    objTc.Context.Session.Id = Guid.NewGuid().ToString();
    objTc.Context.Device.OperatingSystem = Environment.OSVersion.ToString();
    objTc.TrackPageView("frmMain");
}

/// <summary>
/// 單純的透過Button送出Application Insights的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSend_Click(object sender, EventArgs e)
{
    objTc.TrackEvent("Button送出的事件");
    MessageBox.Show("已送出事件");
}

/// <summary>
/// 刻意發生意外事件的動作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnException_Click(object sender, EventArgs e)
{
    try
    {
        DataTable objDt = new DataTable();
        string strColumnValue = objDt.Rows[0]["Column1"].ToString();
    }
    catch (Exception ex)
    {
        objTc.TrackException(ex);
        MessageBox.Show(ex.Message);
    }
    finally
    {
    }
}

private void btnFlush_Click(object sender, EventArgs e)
{
    objTc.Flush();
}

待等待一段時間後,我們可以回到Azure上Application Insights的服務中,就可以看到從Windows桌面應用程式傳回到雲端的記錄了當然也可以查看該應用程式經過幾個PageView或是事件,來源國家也可以看的到

透過Application Insights的記錄,除了可以很快的知道使用者的操作習慣以及程式發生問題的錯誤外,也可以進一步的記錄使用者的電腦平台以及操作時所使用的環境資訊,有助於開發者的除錯,這些資訊也有助於作為改版的資訊

此次的範例程式已放上Github,請參考下列Github網址
https://github.com/madukapai/WinFormAppInsights

參考資料
https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-desktop/