Visual Studio 2017 開發 Azure Functions v2 - .Net Standard 版本

  • 309
  • 0

在昨天 (11/15) Visual Studio 2017 開發 Azure Functions 的套件在 VS Market place 上公開了並且有一個貼文專門介紹它,正式地把這新版的套件釋出.有關 Azure functions 的功能和做法,相信有關於 Azure functions 的朋友們一定相當熟悉了.這一篇文章將介紹此新版套件的一些特點.正在用 Visual Studio 2017 上開發 Azure Functions 的朋友們,這篇文章適合你們來看.

在 Visual Studio 2017 的新版套件

如果你曾安裝過先前的版本,你應該會看到 Azure Functions and Web Jobs Tools 已經自動更新成新的版本.這次的版號是 31114,是 11/14 晚上最後 build 完的版本.

這一版的開發套件最大的不同在於加入了 Azure Function v2,也就是所謂的支持 .Net Standard 2.0 版本的 Azure Function.因此,當你開新專案時,你會看到範本上提供 v1 , v2 兩種選擇.

上圖畫面左上方的下拉選擇可供你選擇 v1, v2.在 v2 版本中,專案的 Target Framework 是 .Net Standard 2.0.你會看到提供的預設範本只有 3 種 triggers,目前來說這是 Azure Functions team 能在 .Net Standard 2.0 上提供的 trigger,相信以後會更多.由於 Azure Functions CLI 的進步,也使在本機上執行 Azure Functions 配合 Azure Storage Emulator 變得更為簡單.上圖就是一個 Queue trigger + Storage Emulator 的例子,文章後面會做更多說明.

接下來的內容,我將針對 Http trigger 和 Queue trigger 做介紹.

Http trigger

這應該是 Azure Functions 應用裡最常見的 trigger,因為你只要發出一個 Http Get/Post 就可以觸發一個 Azure Functions 的執行.當你用 Http trigger 來當範本時,建立出來的第一個 Function1.cs 跟之前的版本是一樣的,它主要接收一個 name 參數,然後將參數的值顯示出來.當你直接執行 (F5) 這專案時,如果你沒有新版的 Azure Functions CLI,則 VS 就會通知你要進行安裝新版的 Azure Functions CLI,確定後,Azure Functions CLI 會自動下載到你的電腦上.

接著,你會看到一個 command prompt 並且在本機上執行著這個 Http trigger 的 Azure Functions.在這個 command prompt 裡,你可以看到本機所執行的 URL,依照範本的程式碼,只要在 URL 後上加上 name 參數,就可以看到結果.

當你嘗試在本機上執行時,我建議將 .Net Core SDK 升級到 2.0.3 版以上以避免一些編譯程式碼和本機執行的問題.

你也可以試著將此 Azure Functions 發佈到 Azure 上,在發佈的過程中,你可能會看到以下的訊息:

這是發佈工具發現 Azure 上的 Functions 和你要上傳的版本不同,由於目前上在 Azure 上支援 .Net Standard 2.0 的 Azure Functions 仍是預覽版本,所以才會看到這樣訊息.只要按下 "Yes",發佈工具會自動地將一個特別的設定值寫到 Azure 的設定檔上, 然後發佈就會進行並完成.當發佈完成後,你就可以直接在瀏覽器上執行這個 Azure Functions 的執行結果.

因為 Azure Functions 的 code 很長,所以在上面的畫面上看不到最後的參數是 name=test.這個 http trigger Azure Functions 在 Azure 上目前是用 dotnet.exe (2.0.0) 所執行的.

Queue trigger

另一個常見的 Azure Functions 種類就是 Queue trigger,這是一個當 Azure storage 裡 Queue 有一個新的訊息時就會觸發一個 Azure Functions 的執行.這類型的應用很是相當廣泛.在這次新版的套件裡可以讓你直接選用 Azure 上的 storage,如下圖:

當你按下 Browse 之後,會出現另一個視窗讓你選擇你在 Azure 上所擁有的 storage,選定之後,工具會自動地將你所選的 storage 的連線資訊帶回來寫到專案裡頭,讓你節省一些設定上的時間.以下的內容用 Storage Emulator 來介紹.你也可以選擇 Storage Emulator 在本機上執行 Queue trigger Azure Functions.若你選擇 Storage Emulator,請讓 Connection 欄位保持空白.

在你執行專案之前,請先將本機上的 Storage Emulator 開啟.如果你有安裝 Visual Studio 2017 的 Azure development workload,那麼預設上你本機上就有 Storage Emulator.你可以在 Windows 開始選擇上打入 Storage Emulator 就可以找到它.找到它之後就直接啟動它.或是你可以透過 AzureStorageEmulator.exe 來啟動它,如下圖所示:

當 Storage Emulator 啟動之後,你就可以執行 Azure Functions 專案.

接著,我們需要在 Queue 裡新增一個訊息才能觸發 Azure Functions.我們使用 Azure Storage Explorer 來為本機上的 storage emulator 裡的 Queue 新增一筆訊息,如下圖所示:

請注意,預設上專案範本裡用的 Queue 名稱是 "myqueue-items",所以要在 Storage Explorer 上建立相同的名稱才行.然後直接新增一筆訊息.新增完成後,你就可以看到本機的 Queue trigger Azure Functions 被觸發執行了.當你要發佈到 Azure 上時,記得修改程式的 Connection 屬性,並且在 local.settings.json 裡更新 storage 的連線資訊.

Durable function

之前有朋友問我 Durable Functions 是否支援.其實這並不是此次新版 Azure Functions and WebJobs Tools 套件能決定的事情,這取決於 Azure Functions CLI 和 Azure 上的支援程度.如今 Durable Functions 在 Azure 上已經有預覽版,所以這次的新版套件裡也提供了 Durable Functions 的範本.在專案裡新增一個 Functions 時,你可以選擇 Durable Functions,如下所示:

Azure Functions v2 的遠端偵錯 (Remote debugging)

如果你用 VS 15.6 以前的版本來對 Azure Functions v2 來進行遠端偵錯時,你會發現 VS 是附加在 w3wp.exe 上.其實這是錯的,所以目前你無法透過 Server Explorer 或 Cloud Explorer 來進行遠端偵錯.正確的情況是 VS 應該是對遠端的 dotnet.exe 進行偵錯,而不是 w3wp.exe.這個錯誤已被修正,但由於這個錯誤修正的時間過晚,所以被安排在 VS 15.6 才能釋出,因此在 VS 15.6 時你才能正確地進行遠端偵錯.但目前仍是有一個 workaround 讓你可以手動進行.請參考這一篇貼文,參考此貼文的內容來做,你只要在最後的選擇遠端 process 時,選擇 dotnet.exe 即可.如果你沒看到 dotnet.exe,那你必須觸發一下你的 Azure Functions 才行.