2018年1月8日 星期一

使用C#開發LineBot(18) – 輕鬆偵錯你的WebHook

上週六在Study4.tw社群分享中,有位學員問到一個很常見的問題,Linebot的WebHook該如何Debug呢? 因為是跑在伺服器端,production的時候要偵錯非常困難。之前我們也說過可以寫Log和把Exception透過Line傳給Admin等方法,但畢竟沒有像是我們習慣的單步偵錯那麼直覺,我們是否有可能可以在production環境中單步偵錯嗎?

我得說,不適合,但技術上確實可以。

production是正式環境,在正常狀況下我們不可能去單步偵錯,但其實,在技術上,我們可以透過azure web app的遠端偵錯,來實現正式對外環境的單步偵錯,如果不放心,你也可以在production以外,建立第二個對外的staging測試環境,來實現單步偵錯。

接下來這篇,我們來看看如何使用這個功能。

如果你用Azure Web App作為你的WebHook hosting網站,並且使用VS2015以上的開發工具,那恭喜你,其實你是可以在PC上,透過IIS提供的遠端偵錯機制,來進行遠端伺服器端的單步偵錯,就好像在locahost上偵錯一般。

當然也沒有『完全』一樣,至少,會慢很多。畢竟,他是連結到遠端的網站,別太苛求。

如何實現呢?有幾個要素,分別是:

  1. 你的WebHook所在網站必須是Azure Web App(或IIS 7.5以上)
  2. 你deploy上去的必須是debug version(而非release version)
  3. 你的開發環境至少是VS2015。

怎麼使用呢?

首先,請先把你的WebHook透過Visual Studio佈署上azure web app(當然你要先申請好網站),請特別留意,你佈署的時候,底下這步驟時,必須選擇debug(而非一般的release):

完成後,請打開你Visual Studio的Server Explorer,在其中找到Azure item,展開『App Service』(如果你從未登入過,在進行這個步驟時,VS會要求你登入,請以你可以登入portal.azure.com建立該Web App的帳密登入),找到你的Web App所屬的Resource Group,然後將其展開,會看到該Resource Group底下所有的Azure Web App名稱,這時,請點選剛才以debug模式佈署的Azure Web App,按下滑鼠右鍵選擇『Attach Debuger』:

一陣運行之後(會需要一點時間,依照您的網路與PC速度而定,大約1-2分鐘)您會發現您的Visual Studio進入了偵錯模式,這時您所建立的中斷點就可以使用了。

神奇的是,在這個模式底下,您其實是偵錯『遠端』的Azure Web App網站,這時候遠端網站上任何的運行,將會觸發您本地端visual studio的中斷點,您可以看到遠端網站記憶體中的變數、可以單步執行,所有的運行就跟在本機localhost偵錯時完全一樣。

當然,唯一最大的差別就是速度,你會發現根本地端偵錯比起來,明顯的比較慢,同時您也要留意,不該用這樣的方式偵錯『正式機』上的Azure Web App,也不該把debug模式的code佈署到正式機。因為這會導致您的用戶在運行時發生意料之外的狀況或停頓,也有可能造成安全性上的疑慮。

因此,您應該在Azure上建立另外一個測試用對外部開放的Web App,部署測試用的WebHook,來進行這樣測試。

但好處是,這樣的偵錯對開發人員來說比較熟悉,也容易找到程式碼邏輯上的錯誤,比起透過try…catch或埋一些log的方式,要便利很多。

------------------
相關課程:http://www.studyhost.tw/NewCourses/LineBot
電子書:http://studyhost.blogspot.tw/2017/12/line-bot.html
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

沒有留言: